[{"data":1,"prerenderedAt":173029},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch01-ji-chu-zhi-shi":3,"wiki-doc-nav":35},{"id":4,"title":5,"body":6,"description":27,"extension":28,"meta":29,"navigation":30,"path":31,"seo":32,"stem":33,"__hash__":34},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":8,"toc":22},"minimark",[9,13,18],[10,11,5],"h1",{"id":12},"_1-基础知识",[14,15,17],"h2",{"id":16},"_11-js的组成","1.1 js的组成",[19,20,21],"p",{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":23,"searchDepth":24,"depth":24,"links":25},"",2,[26],{"id":16,"depth":24,"text":17},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":5,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",[36,5152,6260,7680,10669,12020,13509,14598,23361,23373,23972,23998,24122,24363,24428,24446,24459,24506,24630,24799,24998,25178,25383,25519,25614,25651,25664,25974,26715,27423,27444,28464,30095,30246,30259,30271,30572,50384,50399,50416,50449,53321,76669,92814,92835,92948,93069,93839,94502,94863,94901,95007,95107,95150,95176,95237,96891,96992,97017,97508,98008,99088,99371,100113,100615,100627,102643,104307,105810,107508,109425,111344,113366,116836,117268,117731,118480,121424,121772,121794,122150,125457,125469,125872,125886,126033,126200,126405,126706,127263,127920,129851,131449,132098,133592,135023,136258,137952,139704,142114,142230,143165,143376,144261,145496,145724,145737,146892,149304,151672,154993,157470,159114,160891,162904,165956,168136,170663,172857],{"id":37,"title":38,"body":39,"description":23,"extension":28,"meta":5147,"navigation":30,"path":5148,"seo":5149,"stem":5150,"__hash__":5151},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":40,"toc":5119},[41,44,48,51,55,68,72,77,80,83,86,89,92,127,131,134,137,140,143,196,200,219,221,235,238,246,249,1112,1119,1136,1140,1231,1235,1241,1330,1334,1372,1376,1440,1444,1448,1455,1466,1470,1475,1479,1484,1488,1493,1497,1501,1506,1776,1781,1919,1924,2181,2184,2192,2196,2201,2304,2307,2613,2622,2723,2726,2729,2732,2735,2995,3000,3140,3143,3322,3325,3453,3456,3608,3612,3617,3620,3631,3639,3642,3749,3753,3757,3762,3812,3817,3822,3846,3851,3904,3907,3912,4089,4094,4379,4384,4781,4785,4790,4847,4852,4860,4863,5003,5006,5115],[10,42,38],{"id":43},"_1基础入门",[14,45,47],{"id":46},"_11注释","1.1注释",[19,49,50],{},"\u002F\u002F或者\u002F* *\u002F",[14,52,54],{"id":53},"_12命名","1.2命名",[56,57,58,62,65],"ol",{},[59,60,61],"li",{},"字母数字下划线",[59,63,64],{},"开头必须是字母或_",[59,66,67],{},"不能使用关键词",[14,69,71],{"id":70},"_13数据类型","1.3数据类型",[73,74,76],"h3",{"id":75},"_131整形","1.3.1整形",[19,78,79],{},"short 短整形 2",[19,81,82],{},"int 整形 4",[19,84,85],{},"long 长整形 win4 linux32位4 linux64位8",[19,87,88],{},"long long 长长整形 8",[19,90,91],{},"利用sizeof可以求数据类型占用的内存空间大小",[93,94,98],"pre",{"className":95,"code":96,"language":97,"meta":23,"style":23},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[99,100,101,120],"code",{"__ignoreMap":23},[102,103,106,110,114,117],"span",{"class":104,"line":105},"line",1,[102,107,109],{"class":108},"szBVR","sizeof",[102,111,113],{"class":112},"sVt8B","(",[102,115,116],{"class":108},"int",[102,118,119],{"class":112},")\n",[102,121,122,124],{"class":104,"line":24},[102,123,109],{"class":108},[102,125,126],{"class":112},"(num)\n",[73,128,130],{"id":129},"_132浮点型","1.3.2浮点型",[19,132,133],{},"float 单精度 4节 7位有效数字",[19,135,136],{},"double 双精度 8节 15-16有效数字",[19,138,139],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,141,142],{},"注意点：",[93,144,146],{"className":95,"code":145,"language":97,"meta":23,"style":23},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[99,147,148,173],{"__ignoreMap":23},[102,149,150,153,156,159,163,166,169],{"class":104,"line":105},[102,151,152],{"class":108},"float",[102,154,155],{"class":112}," f1",[102,157,158],{"class":108},"=",[102,160,162],{"class":161},"sj4cs","3.14",[102,164,165],{"class":108},"f",[102,167,168],{"class":112},";",[102,170,172],{"class":171},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[102,174,175,177,180,182,185,188,191,193],{"class":104,"line":24},[102,176,152],{"class":108},[102,178,179],{"class":112}," f2",[102,181,158],{"class":108},[102,183,184],{"class":161},"3",[102,186,187],{"class":108},"e",[102,189,190],{"class":161},"2",[102,192,168],{"class":112},[102,194,195],{"class":171}," \u002F\u002F科学记数法\n",[73,197,199],{"id":198},"_133字符型","1.3.3字符型",[93,201,203],{"className":95,"code":202,"language":97,"meta":23,"style":23},"char ch='a'\n",[99,204,205],{"__ignoreMap":23},[102,206,207,210,213,215],{"class":104,"line":105},[102,208,209],{"class":108},"char",[102,211,212],{"class":112}," ch",[102,214,158],{"class":108},[102,216,218],{"class":217},"sZZnC","'a'\n",[19,220,142],{},[56,222,223,226,229,232],{},[59,224,225],{},"在显示字符型变量时，只能单引号，双引号x",[59,227,228],{},"单引号内只能一个字符，不能字符串",[59,230,231],{},"c和c++字符型变量只占用一个字符",[59,233,234],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,236,237],{},"ASCII码大致由以下两部分组成：",[56,239,240,243],{},[59,241,242],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[59,244,245],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,247,248],{},"ASCII码表格：",[250,251,252,296],"table",{},[253,254,255],"thead",{},[256,257,258,266,271,275,280,284,288,292],"tr",{},[259,260,261,265],"th",{},[262,263,264],"strong",{},"ASCII","值",[259,267,268],{},[262,269,270],{},"控制字符",[259,272,273,265],{},[262,274,264],{},[259,276,277],{},[262,278,279],{},"字符",[259,281,282,265],{},[262,283,264],{},[259,285,286],{},[262,287,279],{},[259,289,290,265],{},[262,291,264],{},[259,293,294],{},[262,295,279],{},[297,298,299,326,352,377,402,428,453,478,504,529,555,581,607,632,658,684,710,734,759,784,809,834,859,884,909,934,959,985,1010,1035,1060,1086],"tbody",{},[256,300,301,305,308,311,314,317,320,323],{},[302,303,304],"td",{},"0",[302,306,307],{},"NUT",[302,309,310],{},"32",[302,312,313],{},"(space)",[302,315,316],{},"64",[302,318,319],{},"@",[302,321,322],{},"96",[302,324,325],{},"、",[256,327,328,331,334,337,340,343,346,349],{},[302,329,330],{},"1",[302,332,333],{},"SOH",[302,335,336],{},"33",[302,338,339],{},"!",[302,341,342],{},"65",[302,344,345],{},"A",[302,347,348],{},"97",[302,350,351],{},"a",[256,353,354,356,359,362,365,368,371,374],{},[302,355,190],{},[302,357,358],{},"STX",[302,360,361],{},"34",[302,363,364],{},"\"",[302,366,367],{},"66",[302,369,370],{},"B",[302,372,373],{},"98",[302,375,376],{},"b",[256,378,379,381,384,387,390,393,396,399],{},[302,380,184],{},[302,382,383],{},"ETX",[302,385,386],{},"35",[302,388,389],{},"#",[302,391,392],{},"67",[302,394,395],{},"C",[302,397,398],{},"99",[302,400,401],{},"c",[256,403,404,407,410,413,416,419,422,425],{},[302,405,406],{},"4",[302,408,409],{},"EOT",[302,411,412],{},"36",[302,414,415],{},"$",[302,417,418],{},"68",[302,420,421],{},"D",[302,423,424],{},"100",[302,426,427],{},"d",[256,429,430,433,436,439,442,445,448,451],{},[302,431,432],{},"5",[302,434,435],{},"ENQ",[302,437,438],{},"37",[302,440,441],{},"%",[302,443,444],{},"69",[302,446,447],{},"E",[302,449,450],{},"101",[302,452,187],{},[256,454,455,458,461,464,467,470,473,476],{},[302,456,457],{},"6",[302,459,460],{},"ACK",[302,462,463],{},"38",[302,465,466],{},"&",[302,468,469],{},"70",[302,471,472],{},"F",[302,474,475],{},"102",[302,477,165],{},[256,479,480,483,486,489,492,495,498,501],{},[302,481,482],{},"7",[302,484,485],{},"BEL",[302,487,488],{},"39",[302,490,491],{},",",[302,493,494],{},"71",[302,496,497],{},"G",[302,499,500],{},"103",[302,502,503],{},"g",[256,505,506,509,512,515,517,520,523,526],{},[302,507,508],{},"8",[302,510,511],{},"BS",[302,513,514],{},"40",[302,516,113],{},[302,518,519],{},"72",[302,521,522],{},"H",[302,524,525],{},"104",[302,527,528],{},"h",[256,530,531,534,537,540,543,546,549,552],{},[302,532,533],{},"9",[302,535,536],{},"HT",[302,538,539],{},"41",[302,541,542],{},")",[302,544,545],{},"73",[302,547,548],{},"I",[302,550,551],{},"105",[302,553,554],{},"i",[256,556,557,560,563,566,569,572,575,578],{},[302,558,559],{},"10",[302,561,562],{},"LF",[302,564,565],{},"42",[302,567,568],{},"*",[302,570,571],{},"74",[302,573,574],{},"J",[302,576,577],{},"106",[302,579,580],{},"j",[256,582,583,586,589,592,595,598,601,604],{},[302,584,585],{},"11",[302,587,588],{},"VT",[302,590,591],{},"43",[302,593,594],{},"+",[302,596,597],{},"75",[302,599,600],{},"K",[302,602,603],{},"107",[302,605,606],{},"k",[256,608,609,612,615,618,620,623,626,629],{},[302,610,611],{},"12",[302,613,614],{},"FF",[302,616,617],{},"44",[302,619,491],{},[302,621,622],{},"76",[302,624,625],{},"L",[302,627,628],{},"108",[302,630,631],{},"l",[256,633,634,637,640,643,646,649,652,655],{},[302,635,636],{},"13",[302,638,639],{},"CR",[302,641,642],{},"45",[302,644,645],{},"-",[302,647,648],{},"77",[302,650,651],{},"M",[302,653,654],{},"109",[302,656,657],{},"m",[256,659,660,663,666,669,672,675,678,681],{},[302,661,662],{},"14",[302,664,665],{},"SO",[302,667,668],{},"46",[302,670,671],{},".",[302,673,674],{},"78",[302,676,677],{},"N",[302,679,680],{},"110",[302,682,683],{},"n",[256,685,686,689,692,695,698,701,704,707],{},[302,687,688],{},"15",[302,690,691],{},"SI",[302,693,694],{},"47",[302,696,697],{},"\u002F",[302,699,700],{},"79",[302,702,703],{},"O",[302,705,706],{},"111",[302,708,709],{},"o",[256,711,712,715,718,721,723,726,729,732],{},[302,713,714],{},"16",[302,716,717],{},"DLE",[302,719,720],{},"48",[302,722,304],{},[302,724,725],{},"80",[302,727,728],{},"P",[302,730,731],{},"112",[302,733,19],{},[256,735,736,739,742,745,747,750,753,756],{},[302,737,738],{},"17",[302,740,741],{},"DCI",[302,743,744],{},"49",[302,746,330],{},[302,748,749],{},"81",[302,751,752],{},"Q",[302,754,755],{},"113",[302,757,758],{},"q",[256,760,761,764,767,770,772,775,778,781],{},[302,762,763],{},"18",[302,765,766],{},"DC2",[302,768,769],{},"50",[302,771,190],{},[302,773,774],{},"82",[302,776,777],{},"R",[302,779,780],{},"114",[302,782,783],{},"r",[256,785,786,789,792,795,797,800,803,806],{},[302,787,788],{},"19",[302,790,791],{},"DC3",[302,793,794],{},"51",[302,796,184],{},[302,798,799],{},"83",[302,801,802],{},"S",[302,804,805],{},"115",[302,807,808],{},"s",[256,810,811,814,817,820,822,825,828,831],{},[302,812,813],{},"20",[302,815,816],{},"DC4",[302,818,819],{},"52",[302,821,406],{},[302,823,824],{},"84",[302,826,827],{},"T",[302,829,830],{},"116",[302,832,833],{},"t",[256,835,836,839,842,845,847,850,853,856],{},[302,837,838],{},"21",[302,840,841],{},"NAK",[302,843,844],{},"53",[302,846,432],{},[302,848,849],{},"85",[302,851,852],{},"U",[302,854,855],{},"117",[302,857,858],{},"u",[256,860,861,864,867,870,872,875,878,881],{},[302,862,863],{},"22",[302,865,866],{},"SYN",[302,868,869],{},"54",[302,871,457],{},[302,873,874],{},"86",[302,876,877],{},"V",[302,879,880],{},"118",[302,882,883],{},"v",[256,885,886,889,892,895,897,900,903,906],{},[302,887,888],{},"23",[302,890,891],{},"TB",[302,893,894],{},"55",[302,896,482],{},[302,898,899],{},"87",[302,901,902],{},"W",[302,904,905],{},"119",[302,907,908],{},"w",[256,910,911,914,917,920,922,925,928,931],{},[302,912,913],{},"24",[302,915,916],{},"CAN",[302,918,919],{},"56",[302,921,508],{},[302,923,924],{},"88",[302,926,927],{},"X",[302,929,930],{},"120",[302,932,933],{},"x",[256,935,936,939,942,945,947,950,953,956],{},[302,937,938],{},"25",[302,940,941],{},"EM",[302,943,944],{},"57",[302,946,533],{},[302,948,949],{},"89",[302,951,952],{},"Y",[302,954,955],{},"121",[302,957,958],{},"y",[256,960,961,964,967,970,973,976,979,982],{},[302,962,963],{},"26",[302,965,966],{},"SUB",[302,968,969],{},"58",[302,971,972],{},":",[302,974,975],{},"90",[302,977,978],{},"Z",[302,980,981],{},"122",[302,983,984],{},"z",[256,986,987,990,993,996,998,1001,1004,1007],{},[302,988,989],{},"27",[302,991,992],{},"ESC",[302,994,995],{},"59",[302,997,168],{},[302,999,1000],{},"91",[302,1002,1003],{},"[",[302,1005,1006],{},"123",[302,1008,1009],{},"{",[256,1011,1012,1015,1018,1021,1024,1027,1029,1032],{},[302,1013,1014],{},"28",[302,1016,1017],{},"FS",[302,1019,1020],{},"60",[302,1022,1023],{},"\u003C",[302,1025,1026],{},"92",[302,1028,697],{},[302,1030,1031],{},"124",[302,1033,1034],{},"|",[256,1036,1037,1040,1043,1046,1048,1051,1054,1057],{},[302,1038,1039],{},"29",[302,1041,1042],{},"GS",[302,1044,1045],{},"61",[302,1047,158],{},[302,1049,1050],{},"93",[302,1052,1053],{},"]",[302,1055,1056],{},"125",[302,1058,1059],{},"}",[256,1061,1062,1065,1068,1071,1074,1077,1080,1083],{},[302,1063,1064],{},"30",[302,1066,1067],{},"RS",[302,1069,1070],{},"62",[302,1072,1073],{},">",[302,1075,1076],{},"94",[302,1078,1079],{},"^",[302,1081,1082],{},"126",[302,1084,1085],{},"`",[256,1087,1088,1091,1094,1097,1100,1103,1106,1109],{},[302,1089,1090],{},"31",[302,1092,1093],{},"US",[302,1095,1096],{},"63",[302,1098,1099],{},"?",[302,1101,1102],{},"95",[302,1104,1105],{},"_",[302,1107,1108],{},"127",[302,1110,1111],{},"DEL",[19,1113,1114,1115,1118],{},"ASCII 码大致由以下",[262,1116,1117],{},"两部分组","成：",[1120,1121,1122,1129],"ul",{},[59,1123,1124,1125,1128],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[262,1126,1127],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[59,1130,1131,1132,1135],{},"ASCII 打印字符：数字 ",[262,1133,1134],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[73,1137,1139],{"id":1138},"_134转义字符","1.3.4转义字符",[93,1141,1143],{"className":95,"code":1142,"language":97,"meta":23,"style":23},"\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",[99,1144,1145,1150,1166,1181,1187,1201,1207],{"__ignoreMap":23},[102,1146,1147],{"class":104,"line":105},[102,1148,1149],{"class":171},"\u002F\u002F换行符\n",[102,1151,1152,1155,1158,1161,1163],{"class":104,"line":24},[102,1153,1154],{"class":112},"cout ",[102,1156,1157],{"class":108},"\u003C\u003C",[102,1159,1160],{"class":217},"\"hello world\u002Fn\"",[102,1162,168],{"class":112},[102,1164,1165],{"class":171}," \u002F\u002F就等同于如下：\n",[102,1167,1169,1171,1173,1176,1178],{"class":104,"line":1168},3,[102,1170,1154],{"class":112},[102,1172,1157],{"class":108},[102,1174,1175],{"class":217},"\"hello world\"",[102,1177,1157],{"class":108},[102,1179,1180],{"class":112},"endl;\n",[102,1182,1184],{"class":104,"line":1183},4,[102,1185,1186],{"class":171},"\u002F\u002F反斜杠\n",[102,1188,1190,1192,1194,1197,1199],{"class":104,"line":1189},5,[102,1191,1154],{"class":112},[102,1193,1157],{"class":108},[102,1195,1196],{"class":217},"\"\u002F\u002F\"",[102,1198,1157],{"class":108},[102,1200,1180],{"class":112},[102,1202,1204],{"class":104,"line":1203},6,[102,1205,1206],{"class":171},"\u002F\u002F水平制表符\n",[102,1208,1210,1212,1214,1217,1220,1223,1225,1228],{"class":104,"line":1209},7,[102,1211,1154],{"class":112},[102,1213,1157],{"class":108},[102,1215,1216],{"class":217},"\"aaaa",[102,1218,1219],{"class":161},"\\t",[102,1221,1222],{"class":217},"helloworld\"",[102,1224,1157],{"class":108},[102,1226,1227],{"class":112},"endl;",[102,1229,1230],{"class":171}," \u002F\u002F输出窗口时有对齐效果\n",[73,1232,1234],{"id":1233},"_135字符串型","1.3.5字符串型",[19,1236,1237,1238,1240],{},"char 变量名",[102,1239],{},"=\"字符串值\"",[93,1242,1244],{"className":95,"code":1243,"language":97,"meta":23,"style":23},"\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",[99,1245,1246,1251,1256,1261,1266,1280,1293,1298,1304,1316],{"__ignoreMap":23},[102,1247,1248],{"class":104,"line":105},[102,1249,1250],{"class":171},"\u002F\u002Fc风格字符串\n",[102,1252,1253],{"class":104,"line":24},[102,1254,1255],{"class":171},"\u002F\u002F注意事项：\n",[102,1257,1258],{"class":104,"line":1168},[102,1259,1260],{"class":171},"\u002F\u002F1.char字符串名[]\n",[102,1262,1263],{"class":104,"line":1183},[102,1264,1265],{"class":171},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[102,1267,1268,1270,1273,1275,1277],{"class":104,"line":1189},[102,1269,209],{"class":108},[102,1271,1272],{"class":112}," str[]",[102,1274,158],{"class":108},[102,1276,1175],{"class":217},[102,1278,1279],{"class":112},";\n",[102,1281,1282,1284,1286,1289,1291],{"class":104,"line":1203},[102,1283,1154],{"class":112},[102,1285,1157],{"class":108},[102,1287,1288],{"class":112},"str",[102,1290,1157],{"class":108},[102,1292,1180],{"class":112},[102,1294,1295],{"class":104,"line":1209},[102,1296,1297],{"class":171},"\u002F\u002Fc++风格字符串\n",[102,1299,1301],{"class":104,"line":1300},8,[102,1302,1303],{"class":171},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[102,1305,1307,1310,1312,1314],{"class":104,"line":1306},9,[102,1308,1309],{"class":112},"string str2",[102,1311,158],{"class":108},[102,1313,1175],{"class":217},[102,1315,1279],{"class":112},[102,1317,1319,1321,1323,1326,1328],{"class":104,"line":1318},10,[102,1320,1154],{"class":112},[102,1322,1157],{"class":108},[102,1324,1325],{"class":112},"str2",[102,1327,1157],{"class":108},[102,1329,1180],{"class":112},[73,1331,1333],{"id":1332},"_136布尔类型bool","1.3.6布尔类型bool",[93,1335,1337],{"className":95,"code":1336,"language":97,"meta":23,"style":23},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[99,1338,1339,1354],{"__ignoreMap":23},[102,1340,1341,1344,1347,1349,1352],{"class":104,"line":105},[102,1342,1343],{"class":108},"bool",[102,1345,1346],{"class":112}," flag",[102,1348,158],{"class":108},[102,1350,1351],{"class":161},"true",[102,1353,1279],{"class":112},[102,1355,1356,1359,1362,1365,1367,1369],{"class":104,"line":24},[102,1357,1358],{"class":112},"cout",[102,1360,1361],{"class":108},"\u003C\u003Csizeof",[102,1363,1364],{"class":112},"(flag)",[102,1366,1157],{"class":108},[102,1368,1227],{"class":112},[102,1370,1371],{"class":171}," \u002F\u002F查看布尔占内存空间\n",[14,1373,1375],{"id":1374},"_14键盘输入cin","1.4键盘输入cin",[93,1377,1379],{"className":95,"code":1378,"language":97,"meta":23,"style":23},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[99,1380,1381,1394,1411,1422],{"__ignoreMap":23},[102,1382,1383,1385,1388,1390,1392],{"class":104,"line":105},[102,1384,116],{"class":108},[102,1386,1387],{"class":112}," a",[102,1389,158],{"class":108},[102,1391,304],{"class":161},[102,1393,1279],{"class":112},[102,1395,1396,1398,1400,1403,1405,1407,1409],{"class":104,"line":24},[102,1397,1358],{"class":112},[102,1399,1157],{"class":108},[102,1401,1402],{"class":217},"\"请给整型变量a赋值\"",[102,1404,1157],{"class":108},[102,1406,351],{"class":112},[102,1408,1157],{"class":108},[102,1410,1180],{"class":112},[102,1412,1413,1416,1419],{"class":104,"line":1168},[102,1414,1415],{"class":112},"cin ",[102,1417,1418],{"class":108},">>",[102,1420,1421],{"class":112}," a;\n",[102,1423,1424,1426,1428,1431,1434,1436,1438],{"class":104,"line":1183},[102,1425,1154],{"class":112},[102,1427,1157],{"class":108},[102,1429,1430],{"class":217}," \"整型变量a=\"",[102,1432,1433],{"class":108}," \u003C\u003C",[102,1435,351],{"class":112},[102,1437,1157],{"class":108},[102,1439,1180],{"class":112},[14,1441,1443],{"id":1442},"_15运算符","1.5运算符",[73,1445,1447],{"id":1446},"_151算术运算符","1.5.1算术运算符",[19,1449,1450,1454],{},[1451,1452],"img",{"alt":23,"src":1453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[56,1456,1457,1460,1463],{},[59,1458,1459],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[59,1461,1462],{},"两个小数不可以做取模运算",[59,1464,1465],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[73,1467,1469],{"id":1468},"_152赋值运算符","1.5.2赋值运算符",[19,1471,1472],{},[1451,1473],{"alt":23,"src":1474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[73,1476,1478],{"id":1477},"_153比较运算符","1.5.3比较运算符",[19,1480,1481],{},[1451,1482],{"alt":23,"src":1483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[73,1485,1487],{"id":1486},"_154逻辑运算符","1.5.4逻辑运算符",[19,1489,1490],{},[1451,1491],{"alt":23,"src":1492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1494,1496],{"id":1495},"_16程序流程结构","1.6程序流程结构",[73,1498,1500],{"id":1499},"_161选择结构","1.6.1选择结构",[56,1502,1503],{},[59,1504,1505],{},"if语句\n单行、多行、多条件if语句",[93,1507,1509],{"className":95,"code":1508,"language":97,"meta":23,"style":23},"\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",[99,1510,1511,1516,1531,1536,1550,1555,1560,1569,1582,1586,1599,1604,1610,1615,1629,1634,1640,1661,1666,1680,1685,1714,1719,1736,1741,1746,1751,1765,1770],{"__ignoreMap":23},[102,1512,1513],{"class":104,"line":105},[102,1514,1515],{"class":171},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[102,1517,1518,1521,1524,1526,1529],{"class":104,"line":24},[102,1519,1520],{"class":108},"if",[102,1522,1523],{"class":112},"(score",[102,1525,1073],{"class":108},[102,1527,1528],{"class":161},"600",[102,1530,119],{"class":112},[102,1532,1533],{"class":104,"line":1168},[102,1534,1535],{"class":112},"{\n",[102,1537,1538,1541,1543,1546,1548],{"class":104,"line":1183},[102,1539,1540],{"class":112},"    cout",[102,1542,1157],{"class":108},[102,1544,1545],{"class":217},"'这是单行if语句'",[102,1547,1157],{"class":108},[102,1549,1180],{"class":112},[102,1551,1552],{"class":104,"line":1189},[102,1553,1554],{"class":112},"}\n",[102,1556,1557],{"class":104,"line":1203},[102,1558,1559],{"class":171},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[102,1561,1562,1564,1566],{"class":104,"line":1209},[102,1563,1415],{"class":112},[102,1565,1418],{"class":108},[102,1567,1568],{"class":112}," score\n",[102,1570,1571,1573,1575,1578,1580],{"class":104,"line":1300},[102,1572,1520],{"class":108},[102,1574,1523],{"class":112},[102,1576,1577],{"class":108},"\u003C=",[102,1579,1528],{"class":161},[102,1581,119],{"class":112},[102,1583,1584],{"class":104,"line":1306},[102,1585,1535],{"class":112},[102,1587,1588,1590,1592,1595,1597],{"class":104,"line":1318},[102,1589,1540],{"class":112},[102,1591,1418],{"class":108},[102,1593,1594],{"class":217},"\"小于等于600\"",[102,1596,1157],{"class":108},[102,1598,1180],{"class":112},[102,1600,1602],{"class":104,"line":1601},11,[102,1603,1554],{"class":112},[102,1605,1607],{"class":104,"line":1606},12,[102,1608,1609],{"class":108},"else\n",[102,1611,1613],{"class":104,"line":1612},13,[102,1614,1535],{"class":112},[102,1616,1618,1620,1622,1625,1627],{"class":104,"line":1617},14,[102,1619,1540],{"class":112},[102,1621,1418],{"class":108},[102,1623,1624],{"class":217},"\"大于600\"",[102,1626,1418],{"class":108},[102,1628,1180],{"class":112},[102,1630,1632],{"class":104,"line":1631},15,[102,1633,1554],{"class":112},[102,1635,1637],{"class":104,"line":1636},16,[102,1638,1639],{"class":171},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[102,1641,1643,1645,1648,1650,1652,1655,1657,1659],{"class":104,"line":1642},17,[102,1644,1520],{"class":108},[102,1646,1647],{"class":112}," (",[102,1649,304],{"class":161},[102,1651,1023],{"class":108},[102,1653,1654],{"class":112},"num",[102,1656,1023],{"class":108},[102,1658,424],{"class":161},[102,1660,119],{"class":112},[102,1662,1664],{"class":104,"line":1663},18,[102,1665,1535],{"class":112},[102,1667,1669,1671,1673,1676,1678],{"class":104,"line":1668},19,[102,1670,1540],{"class":112},[102,1672,1157],{"class":108},[102,1674,1675],{"class":217},"\"小于100\"",[102,1677,1157],{"class":108},[102,1679,1180],{"class":112},[102,1681,1683],{"class":104,"line":1682},20,[102,1684,1554],{"class":112},[102,1686,1688,1691,1694,1697,1700,1702,1705,1707,1709,1712],{"class":104,"line":1687},21,[102,1689,1690],{"class":108},"else",[102,1692,1693],{"class":108}," if",[102,1695,1696],{"class":112}," (nmu",[102,1698,1699],{"class":108},">=",[102,1701,424],{"class":161},[102,1703,1704],{"class":108},"&&",[102,1706,1654],{"class":112},[102,1708,1023],{"class":108},[102,1710,1711],{"class":161},"200",[102,1713,119],{"class":112},[102,1715,1717],{"class":104,"line":1716},22,[102,1718,1535],{"class":112},[102,1720,1722,1724,1726,1729,1731,1733],{"class":104,"line":1721},23,[102,1723,1540],{"class":112},[102,1725,1157],{"class":108},[102,1727,1728],{"class":217},"\"不小于100且小于200\"",[102,1730,1157],{"class":108},[102,1732,1227],{"class":112},[102,1734,1735],{"class":171}," \u002F\u002F可以无限else if,python中是elif：\n",[102,1737,1739],{"class":104,"line":1738},24,[102,1740,1554],{"class":112},[102,1742,1744],{"class":104,"line":1743},25,[102,1745,1609],{"class":108},[102,1747,1749],{"class":104,"line":1748},26,[102,1750,1535],{"class":112},[102,1752,1754,1756,1758,1761,1763],{"class":104,"line":1753},27,[102,1755,1540],{"class":112},[102,1757,1157],{"class":108},[102,1759,1760],{"class":217},"\"不小于200\"",[102,1762,1157],{"class":108},[102,1764,1180],{"class":112},[102,1766,1768],{"class":104,"line":1767},28,[102,1769,1554],{"class":112},[102,1771,1773],{"class":104,"line":1772},29,[102,1774,1775],{"class":171},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[56,1777,1778],{"start":24},[59,1779,1780],{},"三目运算符",[93,1782,1784],{"className":95,"code":1783,"language":97,"meta":23,"style":23},"\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",[99,1785,1786,1791,1796,1822,1844,1861,1866,1889,1904],{"__ignoreMap":23},[102,1787,1788],{"class":104,"line":105},[102,1789,1790],{"class":171},"\u002F\u002F创建三个变量a,b,c\n",[102,1792,1793],{"class":104,"line":24},[102,1794,1795],{"class":171},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[102,1797,1798,1800,1802,1804,1806,1809,1811,1813,1816,1818,1820],{"class":104,"line":1168},[102,1799,116],{"class":108},[102,1801,1387],{"class":112},[102,1803,158],{"class":108},[102,1805,813],{"class":161},[102,1807,1808],{"class":112},",b",[102,1810,158],{"class":108},[102,1812,559],{"class":161},[102,1814,1815],{"class":112},",c",[102,1817,158],{"class":108},[102,1819,304],{"class":161},[102,1821,1279],{"class":112},[102,1823,1824,1826,1828,1831,1833,1835,1837,1839,1841],{"class":104,"line":1183},[102,1825,401],{"class":112},[102,1827,158],{"class":108},[102,1829,1830],{"class":112},"(a",[102,1832,1073],{"class":108},[102,1834,376],{"class":112},[102,1836,1099],{"class":108},[102,1838,351],{"class":112},[102,1840,972],{"class":108},[102,1842,1843],{"class":112},"b)\n",[102,1845,1846,1848,1850,1853,1855,1857,1859],{"class":104,"line":1189},[102,1847,1358],{"class":112},[102,1849,1157],{"class":108},[102,1851,1852],{"class":217},"\"c=\"",[102,1854,1157],{"class":108},[102,1856,401],{"class":112},[102,1858,1157],{"class":108},[102,1860,1180],{"class":112},[102,1862,1863],{"class":104,"line":1203},[102,1864,1865],{"class":171},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[102,1867,1868,1870,1872,1874,1876,1878,1880,1883,1885,1887],{"class":104,"line":1209},[102,1869,1830],{"class":112},[102,1871,1073],{"class":108},[102,1873,376],{"class":112},[102,1875,1099],{"class":108},[102,1877,351],{"class":112},[102,1879,972],{"class":108},[102,1881,1882],{"class":112},"b)",[102,1884,158],{"class":108},[102,1886,424],{"class":161},[102,1888,1279],{"class":112},[102,1890,1891,1893,1895,1897,1899,1901],{"class":104,"line":1300},[102,1892,1358],{"class":112},[102,1894,1157],{"class":108},[102,1896,351],{"class":112},[102,1898,1157],{"class":108},[102,1900,1227],{"class":112},[102,1902,1903],{"class":171}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[102,1905,1906,1908,1910,1912,1914,1916],{"class":104,"line":1306},[102,1907,1358],{"class":112},[102,1909,1157],{"class":108},[102,1911,376],{"class":112},[102,1913,1157],{"class":108},[102,1915,1227],{"class":112},[102,1917,1918],{"class":171}," \u002F\u002F10   a>b,b还是原值\n",[56,1920,1921],{"start":1168},[59,1922,1923],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[93,1925,1927],{"className":95,"code":1926,"language":97,"meta":23,"style":23},"\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",[99,1928,1929,1934,1942,1956,1966,1970,1984,1997,2007,2015,2020,2045,2066,2088,2109,2131,2152,2172,2177],{"__ignoreMap":23},[102,1930,1931],{"class":104,"line":105},[102,1932,1933],{"class":171},"\u002F\u002F案例-电影打分\n",[102,1935,1936,1939],{"class":104,"line":24},[102,1937,1938],{"class":108},"#include",[102,1940,1941],{"class":217},"\u003Ciostream>\n",[102,1943,1944,1947,1950,1954],{"class":104,"line":1168},[102,1945,1946],{"class":108},"using",[102,1948,1949],{"class":108}," namespace",[102,1951,1953],{"class":1952},"sScJk"," std",[102,1955,1279],{"class":112},[102,1957,1958,1960,1963],{"class":104,"line":1183},[102,1959,116],{"class":108},[102,1961,1962],{"class":1952}," main",[102,1964,1965],{"class":112},"()\n",[102,1967,1968],{"class":104,"line":1189},[102,1969,1535],{"class":112},[102,1971,1972,1975,1978,1980,1982],{"class":104,"line":1203},[102,1973,1974],{"class":108},"    int",[102,1976,1977],{"class":112}," score",[102,1979,158],{"class":108},[102,1981,304],{"class":161},[102,1983,1279],{"class":112},[102,1985,1986,1988,1990,1993,1995],{"class":104,"line":1209},[102,1987,1540],{"class":112},[102,1989,1157],{"class":108},[102,1991,1992],{"class":217},"\"电影打分：\"",[102,1994,1157],{"class":108},[102,1996,1180],{"class":112},[102,1998,1999,2002,2004],{"class":104,"line":1300},[102,2000,2001],{"class":112},"    cin",[102,2003,1418],{"class":108},[102,2005,2006],{"class":112},"score;\n",[102,2008,2009,2012],{"class":104,"line":1306},[102,2010,2011],{"class":108},"    switch",[102,2013,2014],{"class":112},"(score)\n",[102,2016,2017],{"class":104,"line":1318},[102,2018,2019],{"class":112},"    {\n",[102,2021,2022,2025,2028,2031,2033,2036,2038,2040,2043],{"class":104,"line":1601},[102,2023,2024],{"class":108},"        case",[102,2026,2027],{"class":161}," 10",[102,2029,2030],{"class":112},":cout",[102,2032,1157],{"class":108},[102,2034,2035],{"class":217},"\"经典\"",[102,2037,1157],{"class":108},[102,2039,1227],{"class":112},[102,2041,2042],{"class":108},"break",[102,2044,1279],{"class":112},[102,2046,2047,2049,2052,2054,2056,2058,2060,2062,2064],{"class":104,"line":1606},[102,2048,2024],{"class":108},[102,2050,2051],{"class":161}," 9",[102,2053,2030],{"class":112},[102,2055,1157],{"class":108},[102,2057,2035],{"class":217},[102,2059,1157],{"class":108},[102,2061,1227],{"class":112},[102,2063,2042],{"class":108},[102,2065,1279],{"class":112},[102,2067,2068,2070,2073,2075,2077,2080,2082,2084,2086],{"class":104,"line":1612},[102,2069,2024],{"class":108},[102,2071,2072],{"class":161}," 8",[102,2074,2030],{"class":112},[102,2076,1157],{"class":108},[102,2078,2079],{"class":217},"\"非常好\"",[102,2081,1157],{"class":108},[102,2083,1227],{"class":112},[102,2085,2042],{"class":108},[102,2087,1279],{"class":112},[102,2089,2090,2092,2095,2097,2099,2101,2103,2105,2107],{"class":104,"line":1617},[102,2091,2024],{"class":108},[102,2093,2094],{"class":161}," 7",[102,2096,2030],{"class":112},[102,2098,1157],{"class":108},[102,2100,2079],{"class":217},[102,2102,1157],{"class":108},[102,2104,1227],{"class":112},[102,2106,2042],{"class":108},[102,2108,1279],{"class":112},[102,2110,2111,2113,2116,2118,2120,2123,2125,2127,2129],{"class":104,"line":1631},[102,2112,2024],{"class":108},[102,2114,2115],{"class":161}," 6",[102,2117,2030],{"class":112},[102,2119,1157],{"class":108},[102,2121,2122],{"class":217},"\"一般\"",[102,2124,1157],{"class":108},[102,2126,1227],{"class":112},[102,2128,2042],{"class":108},[102,2130,1279],{"class":112},[102,2132,2133,2135,2138,2140,2142,2144,2146,2148,2150],{"class":104,"line":1636},[102,2134,2024],{"class":108},[102,2136,2137],{"class":161}," 5",[102,2139,2030],{"class":112},[102,2141,1157],{"class":108},[102,2143,2122],{"class":217},[102,2145,1157],{"class":108},[102,2147,1227],{"class":112},[102,2149,2042],{"class":108},[102,2151,1279],{"class":112},[102,2153,2154,2157,2159,2161,2164,2166,2168,2170],{"class":104,"line":1642},[102,2155,2156],{"class":108},"        default",[102,2158,2030],{"class":112},[102,2160,1157],{"class":108},[102,2162,2163],{"class":217},"\"烂片\"",[102,2165,1157],{"class":108},[102,2167,1227],{"class":112},[102,2169,2042],{"class":108},[102,2171,1279],{"class":112},[102,2173,2174],{"class":104,"line":1663},[102,2175,2176],{"class":112},"    }\n",[102,2178,2179],{"class":104,"line":1668},[102,2180,1554],{"class":112},[19,2182,2183],{},"if和switch区别：",[1120,2185,2186,2189],{},[59,2187,2188],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[59,2190,2191],{},"switch优点：结构清晰，执行效率高",[73,2193,2195],{"id":2194},"_162循环结构","1.6.2循环结构",[56,2197,2198],{},[59,2199,2200],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[93,2202,2204],{"className":95,"code":2203,"language":97,"meta":23,"style":23},"\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",[99,2205,2206,2211,2219,2223,2236,2250,2254,2274,2284,2288,2300],{"__ignoreMap":23},[102,2207,2208],{"class":104,"line":105},[102,2209,2210],{"class":171},"\u002F\u002F打印0-9数字\n",[102,2212,2213,2215,2217],{"class":104,"line":24},[102,2214,116],{"class":108},[102,2216,1962],{"class":1952},[102,2218,1965],{"class":112},[102,2220,2221],{"class":104,"line":1168},[102,2222,1535],{"class":112},[102,2224,2225,2227,2230,2232,2234],{"class":104,"line":1183},[102,2226,1974],{"class":108},[102,2228,2229],{"class":112}," num",[102,2231,158],{"class":108},[102,2233,304],{"class":161},[102,2235,1279],{"class":112},[102,2237,2238,2241,2244,2246,2248],{"class":104,"line":1189},[102,2239,2240],{"class":108},"    while",[102,2242,2243],{"class":112},"(num",[102,2245,1023],{"class":108},[102,2247,559],{"class":161},[102,2249,119],{"class":112},[102,2251,2252],{"class":104,"line":1203},[102,2253,2019],{"class":112},[102,2255,2256,2259,2262,2264,2266,2268,2271],{"class":104,"line":1209},[102,2257,2258],{"class":1952},"       std",[102,2260,2261],{"class":112},"::cout",[102,2263,1157],{"class":108},[102,2265,1654],{"class":112},[102,2267,1157],{"class":108},[102,2269,2270],{"class":1952},"std",[102,2272,2273],{"class":112},"::endl;\n",[102,2275,2276,2279,2282],{"class":104,"line":1300},[102,2277,2278],{"class":112},"        num",[102,2280,2281],{"class":108},"++",[102,2283,1279],{"class":112},[102,2285,2286],{"class":104,"line":1306},[102,2287,2176],{"class":112},[102,2289,2290,2293,2295,2298],{"class":104,"line":1318},[102,2291,2292],{"class":1952},"    system",[102,2294,113],{"class":112},[102,2296,2297],{"class":217},"\"pause\"",[102,2299,119],{"class":112},[102,2301,2302],{"class":104,"line":1601},[102,2303,1554],{"class":112},[19,2305,2306],{},"注意：写好循环条件，避免死循环情况",[93,2308,2310],{"className":95,"code":2309,"language":97,"meta":23,"style":23},"\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",[99,2311,2312,2317,2324,2331,2341,2349,2353,2358,2385,2390,2395,2403,2430,2435,2440,2453,2463,2467,2477,2482,2495,2500,2514,2519,2534,2538,2551,2555,2560,2564,2578,2586,2591,2597,2603,2608],{"__ignoreMap":23},[102,2313,2314],{"class":104,"line":105},[102,2315,2316],{"class":171},"\u002F\u002F循环结构-猜数字\n",[102,2318,2319,2321],{"class":104,"line":24},[102,2320,1938],{"class":108},[102,2322,2323],{"class":217}," \u003Ciostream>\n",[102,2325,2326,2328],{"class":104,"line":1168},[102,2327,1938],{"class":108},[102,2329,2330],{"class":217}," \u003Cctime>\n",[102,2332,2333,2335,2337,2339],{"class":104,"line":1183},[102,2334,1946],{"class":108},[102,2336,1949],{"class":108},[102,2338,1953],{"class":1952},[102,2340,1279],{"class":112},[102,2342,2343,2345,2347],{"class":104,"line":1189},[102,2344,116],{"class":108},[102,2346,1962],{"class":1952},[102,2348,1965],{"class":112},[102,2350,2351],{"class":104,"line":1203},[102,2352,1535],{"class":112},[102,2354,2355],{"class":104,"line":1209},[102,2356,2357],{"class":171},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[102,2359,2360,2363,2366,2369,2372,2374,2377,2379,2382],{"class":104,"line":1300},[102,2361,2362],{"class":1952},"    srand",[102,2364,2365],{"class":112},"((",[102,2367,2368],{"class":108},"unsigned",[102,2370,2371],{"class":108}," int",[102,2373,542],{"class":112},[102,2375,2376],{"class":1952},"time",[102,2378,113],{"class":112},[102,2380,2381],{"class":161},"NULL",[102,2383,2384],{"class":112},"));\n",[102,2386,2387],{"class":104,"line":1306},[102,2388,2389],{"emptyLinePlaceholder":30},"\n",[102,2391,2392],{"class":104,"line":1318},[102,2393,2394],{"class":171},"    \u002F\u002F1.系统生成随机数\n",[102,2396,2397,2400],{"class":104,"line":1601},[102,2398,2399],{"class":171},"    \u002F\u002Frand()%100",[102,2401,2402],{"class":171}," \u002F\u002F生成0-99的随机数\n",[102,2404,2405,2407,2409,2411,2414,2417,2419,2421,2423,2425,2427],{"class":104,"line":1606},[102,2406,1974],{"class":108},[102,2408,2229],{"class":112},[102,2410,158],{"class":108},[102,2412,2413],{"class":1952},"rand",[102,2415,2416],{"class":112},"()",[102,2418,441],{"class":108},[102,2420,424],{"class":161},[102,2422,594],{"class":108},[102,2424,330],{"class":161},[102,2426,168],{"class":112},[102,2428,2429],{"class":171}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[102,2431,2432],{"class":104,"line":1612},[102,2433,2434],{"class":171},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[102,2436,2437],{"class":104,"line":1617},[102,2438,2439],{"class":171},"    \u002F\u002F2.玩家猜测\n",[102,2441,2442,2444,2447,2449,2451],{"class":104,"line":1631},[102,2443,1974],{"class":108},[102,2445,2446],{"class":112}," val",[102,2448,158],{"class":108},[102,2450,304],{"class":161},[102,2452,1279],{"class":112},[102,2454,2455,2457,2459,2461],{"class":104,"line":1636},[102,2456,2240],{"class":108},[102,2458,1647],{"class":112},[102,2460,330],{"class":161},[102,2462,119],{"class":112},[102,2464,2465],{"class":104,"line":1642},[102,2466,2019],{"class":112},[102,2468,2469,2472,2474],{"class":104,"line":1663},[102,2470,2471],{"class":112},"        cin",[102,2473,1418],{"class":108},[102,2475,2476],{"class":112},"val;\n",[102,2478,2479],{"class":104,"line":1668},[102,2480,2481],{"class":171},"        \u002F\u002F3.判断玩家猜测\n",[102,2483,2484,2487,2490,2492],{"class":104,"line":1682},[102,2485,2486],{"class":108},"        if",[102,2488,2489],{"class":112},"(val",[102,2491,1023],{"class":108},[102,2493,2494],{"class":112},"num) \n",[102,2496,2497],{"class":104,"line":1687},[102,2498,2499],{"class":112},"        {\n",[102,2501,2502,2505,2507,2510,2512],{"class":104,"line":1716},[102,2503,2504],{"class":112},"            cout",[102,2506,1157],{"class":108},[102,2508,2509],{"class":217},"\"猜小了！\"",[102,2511,1157],{"class":108},[102,2513,1180],{"class":112},[102,2515,2516],{"class":104,"line":1721},[102,2517,2518],{"class":112},"        }\n",[102,2520,2521,2524,2526,2529,2531],{"class":104,"line":1738},[102,2522,2523],{"class":108},"        else",[102,2525,1693],{"class":108},[102,2527,2528],{"class":112}," (val",[102,2530,1073],{"class":108},[102,2532,2533],{"class":112},"num)\n",[102,2535,2536],{"class":104,"line":1743},[102,2537,2499],{"class":112},[102,2539,2540,2542,2544,2547,2549],{"class":104,"line":1748},[102,2541,2504],{"class":112},[102,2543,1157],{"class":108},[102,2545,2546],{"class":217},"\"猜大了！\"",[102,2548,1157],{"class":108},[102,2550,1180],{"class":112},[102,2552,2553],{"class":104,"line":1753},[102,2554,2518],{"class":112},[102,2556,2557],{"class":104,"line":1767},[102,2558,2559],{"class":108},"        else\n",[102,2561,2562],{"class":104,"line":1772},[102,2563,2499],{"class":112},[102,2565,2567,2569,2571,2574,2576],{"class":104,"line":2566},30,[102,2568,2504],{"class":112},[102,2570,1157],{"class":108},[102,2572,2573],{"class":217},"\"猜对了！\"",[102,2575,1157],{"class":108},[102,2577,1180],{"class":112},[102,2579,2581,2584],{"class":104,"line":2580},31,[102,2582,2583],{"class":108},"            break",[102,2585,1279],{"class":112},[102,2587,2589],{"class":104,"line":2588},32,[102,2590,2518],{"class":112},[102,2592,2594],{"class":104,"line":2593},33,[102,2595,2596],{"class":171},"        \u002F\u002F猜对 退出游戏\n",[102,2598,2600],{"class":104,"line":2599},34,[102,2601,2602],{"class":171},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[102,2604,2606],{"class":104,"line":2605},35,[102,2607,2176],{"class":112},[102,2609,2611],{"class":104,"line":2610},36,[102,2612,1554],{"class":112},[56,2614,2615],{"start":24},[59,2616,2617,2618,2621],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[262,2619,2620],{},"do...while会先执行一次循环语句","，在判断循环语句",[93,2623,2625],{"className":95,"code":2624,"language":97,"meta":23,"style":23},"\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",[99,2626,2627,2632,2640,2644,2656,2664,2668,2685,2692,2696,2709,2719],{"__ignoreMap":23},[102,2628,2629],{"class":104,"line":105},[102,2630,2631],{"class":171},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[102,2633,2634,2636,2638],{"class":104,"line":24},[102,2635,116],{"class":108},[102,2637,1962],{"class":1952},[102,2639,1965],{"class":112},[102,2641,2642],{"class":104,"line":1168},[102,2643,1535],{"class":112},[102,2645,2646,2648,2650,2652,2654],{"class":104,"line":1183},[102,2647,1974],{"class":108},[102,2649,2229],{"class":112},[102,2651,158],{"class":108},[102,2653,304],{"class":161},[102,2655,1279],{"class":112},[102,2657,2658,2661],{"class":104,"line":1189},[102,2659,2660],{"class":108},"    do",[102,2662,2663],{"class":112}," \n",[102,2665,2666],{"class":104,"line":1203},[102,2667,2019],{"class":112},[102,2669,2670,2673,2675,2677,2679,2681,2683],{"class":104,"line":1209},[102,2671,2672],{"class":1952},"        std",[102,2674,2261],{"class":112},[102,2676,1157],{"class":108},[102,2678,1654],{"class":112},[102,2680,1157],{"class":108},[102,2682,2270],{"class":1952},[102,2684,2273],{"class":112},[102,2686,2687,2689],{"class":104,"line":1300},[102,2688,2278],{"class":112},[102,2690,2691],{"class":108},"++\n",[102,2693,2694],{"class":104,"line":1306},[102,2695,2176],{"class":112},[102,2697,2698,2700,2702,2704,2706],{"class":104,"line":1318},[102,2699,2240],{"class":108},[102,2701,2243],{"class":112},[102,2703,1023],{"class":108},[102,2705,559],{"class":161},[102,2707,2708],{"class":112},");\n",[102,2710,2711,2713,2715,2717],{"class":104,"line":1601},[102,2712,2292],{"class":1952},[102,2714,113],{"class":112},[102,2716,2297],{"class":217},[102,2718,2708],{"class":112},[102,2720,2721],{"class":104,"line":1606},[102,2722,1554],{"class":112},[19,2724,2725],{},"案例-水仙花数",[19,2727,2728],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,2730,2731],{},"例如：1^3+5^3+3^3=153",[19,2733,2734],{},"请用do...while语句，求出所有3位数的水仙花数",[93,2736,2738],{"className":95,"code":2737,"language":97,"meta":23,"style":23},"#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",[99,2739,2740,2746,2756,2764,2768,2773,2785,2791,2795,2800,2816,2832,2848,2863,2882,2897,2945,2949,2961,2965,2973,2977,2991],{"__ignoreMap":23},[102,2741,2742,2744],{"class":104,"line":105},[102,2743,1938],{"class":108},[102,2745,2323],{"class":217},[102,2747,2748,2750,2752,2754],{"class":104,"line":24},[102,2749,1946],{"class":108},[102,2751,1949],{"class":108},[102,2753,1953],{"class":1952},[102,2755,1279],{"class":112},[102,2757,2758,2760,2762],{"class":104,"line":1168},[102,2759,116],{"class":108},[102,2761,1962],{"class":1952},[102,2763,1965],{"class":112},[102,2765,2766],{"class":104,"line":1183},[102,2767,1535],{"class":112},[102,2769,2770],{"class":104,"line":1189},[102,2771,2772],{"class":171},"    \u002F\u002F1.先打印所有三位数字\n",[102,2774,2775,2777,2779,2781,2783],{"class":104,"line":1203},[102,2776,1974],{"class":108},[102,2778,2229],{"class":112},[102,2780,158],{"class":108},[102,2782,424],{"class":161},[102,2784,1279],{"class":112},[102,2786,2787,2789],{"class":104,"line":1209},[102,2788,2660],{"class":108},[102,2790,2663],{"class":112},[102,2792,2793],{"class":104,"line":1300},[102,2794,2019],{"class":112},[102,2796,2797],{"class":104,"line":1306},[102,2798,2799],{"class":171},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[102,2801,2802,2805,2807,2809,2811,2813],{"class":104,"line":1318},[102,2803,2804],{"class":108},"        int",[102,2806,1387],{"class":112},[102,2808,158],{"class":108},[102,2810,304],{"class":161},[102,2812,168],{"class":112},[102,2814,2815],{"class":171}," \u002F\u002F个位\n",[102,2817,2818,2820,2823,2825,2827,2829],{"class":104,"line":1601},[102,2819,2804],{"class":108},[102,2821,2822],{"class":112}," b",[102,2824,158],{"class":108},[102,2826,304],{"class":161},[102,2828,168],{"class":112},[102,2830,2831],{"class":171}," \u002F\u002F十位\n",[102,2833,2834,2836,2839,2841,2843,2845],{"class":104,"line":1606},[102,2835,2804],{"class":108},[102,2837,2838],{"class":112}," c",[102,2840,158],{"class":108},[102,2842,304],{"class":161},[102,2844,168],{"class":112},[102,2846,2847],{"class":171}," \u002F\u002F百位\n",[102,2849,2850,2853,2855,2857,2859,2861],{"class":104,"line":1612},[102,2851,2852],{"class":112},"        a",[102,2854,158],{"class":108},[102,2856,1654],{"class":112},[102,2858,441],{"class":108},[102,2860,559],{"class":161},[102,2862,1279],{"class":112},[102,2864,2865,2868,2870,2872,2874,2876,2878,2880],{"class":104,"line":1617},[102,2866,2867],{"class":112},"        b",[102,2869,158],{"class":108},[102,2871,1654],{"class":112},[102,2873,697],{"class":108},[102,2875,559],{"class":161},[102,2877,441],{"class":108},[102,2879,559],{"class":161},[102,2881,1279],{"class":112},[102,2883,2884,2887,2889,2891,2893,2895],{"class":104,"line":1631},[102,2885,2886],{"class":112},"        c",[102,2888,158],{"class":108},[102,2890,1654],{"class":112},[102,2892,697],{"class":108},[102,2894,424],{"class":161},[102,2896,1279],{"class":112},[102,2898,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2936,2939,2942],{"class":104,"line":1636},[102,2900,2486],{"class":108},[102,2902,1830],{"class":112},[102,2904,568],{"class":108},[102,2906,351],{"class":112},[102,2908,568],{"class":108},[102,2910,351],{"class":112},[102,2912,594],{"class":108},[102,2914,376],{"class":112},[102,2916,568],{"class":108},[102,2918,376],{"class":112},[102,2920,568],{"class":108},[102,2922,376],{"class":112},[102,2924,594],{"class":108},[102,2926,401],{"class":112},[102,2928,568],{"class":108},[102,2930,401],{"class":112},[102,2932,568],{"class":108},[102,2934,2935],{"class":112},"c ",[102,2937,2938],{"class":108},"==",[102,2940,2941],{"class":112}," num)",[102,2943,2944],{"class":171}," \u002F\u002F如果是水仙花数，才打印\n",[102,2946,2947],{"class":104,"line":1642},[102,2948,2499],{"class":112},[102,2950,2951,2953,2955,2957,2959],{"class":104,"line":1663},[102,2952,2504],{"class":112},[102,2954,1157],{"class":108},[102,2956,1654],{"class":112},[102,2958,1157],{"class":108},[102,2960,1180],{"class":112},[102,2962,2963],{"class":104,"line":1668},[102,2964,2518],{"class":112},[102,2966,2967,2969,2971],{"class":104,"line":1682},[102,2968,2278],{"class":112},[102,2970,2281],{"class":108},[102,2972,1279],{"class":112},[102,2974,2975],{"class":104,"line":1687},[102,2976,2176],{"class":112},[102,2978,2979,2981,2984,2986,2989],{"class":104,"line":1716},[102,2980,2240],{"class":108},[102,2982,2983],{"class":112}," (num ",[102,2985,1023],{"class":108},[102,2987,2988],{"class":161}," 1000",[102,2990,2708],{"class":112},[102,2992,2993],{"class":104,"line":1721},[102,2994,1554],{"class":112},[56,2996,2997],{"start":1168},[59,2998,2999],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[93,3001,3003],{"className":95,"code":3002,"language":97,"meta":23,"style":23},"\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",[99,3004,3005,3010,3039,3043,3055,3059,3064,3075,3082,3086,3100,3104,3111,3115,3127,3136],{"__ignoreMap":23},[102,3006,3007],{"class":104,"line":105},[102,3008,3009],{"class":171},"\u002F\u002F从数字0-9打印\n",[102,3011,3012,3015,3017,3019,3022,3024,3026,3029,3031,3033,3035,3037],{"class":104,"line":24},[102,3013,3014],{"class":108},"for",[102,3016,113],{"class":112},[102,3018,116],{"class":108},[102,3020,3021],{"class":112}," i",[102,3023,158],{"class":108},[102,3025,304],{"class":161},[102,3027,3028],{"class":112},";i",[102,3030,1023],{"class":108},[102,3032,559],{"class":161},[102,3034,3028],{"class":112},[102,3036,2281],{"class":108},[102,3038,119],{"class":112},[102,3040,3041],{"class":104,"line":1168},[102,3042,1535],{"class":112},[102,3044,3045,3047,3049,3051,3053],{"class":104,"line":1183},[102,3046,1540],{"class":112},[102,3048,1157],{"class":108},[102,3050,554],{"class":112},[102,3052,1157],{"class":108},[102,3054,1180],{"class":112},[102,3056,3057],{"class":104,"line":1189},[102,3058,1554],{"class":112},[102,3060,3061],{"class":104,"line":1203},[102,3062,3063],{"class":171},"\u002F\u002F上式可以进行拆分\n",[102,3065,3066,3068,3070,3072],{"class":104,"line":1209},[102,3067,116],{"class":108},[102,3069,3021],{"class":112},[102,3071,158],{"class":108},[102,3073,3074],{"class":161},"0\n",[102,3076,3077,3079],{"class":104,"line":1300},[102,3078,3014],{"class":108},[102,3080,3081],{"class":112},"(;;;)\n",[102,3083,3084],{"class":104,"line":1306},[102,3085,1535],{"class":112},[102,3087,3088,3091,3094,3096,3098],{"class":104,"line":1318},[102,3089,3090],{"class":108},"    if",[102,3092,3093],{"class":112},"(i",[102,3095,1699],{"class":108},[102,3097,559],{"class":161},[102,3099,119],{"class":112},[102,3101,3102],{"class":104,"line":1601},[102,3103,2019],{"class":112},[102,3105,3106,3109],{"class":104,"line":1606},[102,3107,3108],{"class":108},"        break",[102,3110,1279],{"class":112},[102,3112,3113],{"class":104,"line":1612},[102,3114,2176],{"class":112},[102,3116,3117,3119,3121,3123,3125],{"class":104,"line":1617},[102,3118,1540],{"class":112},[102,3120,1157],{"class":108},[102,3122,554],{"class":112},[102,3124,1157],{"class":108},[102,3126,1180],{"class":112},[102,3128,3129,3132,3134],{"class":104,"line":1631},[102,3130,3131],{"class":112},"    i",[102,3133,2281],{"class":108},[102,3135,1279],{"class":112},[102,3137,3138],{"class":104,"line":1636},[102,3139,1554],{"class":112},[19,3141,3142],{},"小练习",[93,3144,3146],{"className":95,"code":3145,"language":97,"meta":23,"style":23},"#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",[99,3147,3148,3154,3164,3172,3176,3181,3186,3214,3218,3223,3228,3269,3273,3286,3290,3294,3298,3310,3314,3318],{"__ignoreMap":23},[102,3149,3150,3152],{"class":104,"line":105},[102,3151,1938],{"class":108},[102,3153,1941],{"class":217},[102,3155,3156,3158,3160,3162],{"class":104,"line":24},[102,3157,1946],{"class":108},[102,3159,1949],{"class":108},[102,3161,1953],{"class":1952},[102,3163,1279],{"class":112},[102,3165,3166,3168,3170],{"class":104,"line":1168},[102,3167,116],{"class":108},[102,3169,1962],{"class":1952},[102,3171,1965],{"class":112},[102,3173,3174],{"class":104,"line":1183},[102,3175,1535],{"class":112},[102,3177,3178],{"class":104,"line":1189},[102,3179,3180],{"class":171},"    \u002F\u002F敲桌子案例\n",[102,3182,3183],{"class":104,"line":1203},[102,3184,3185],{"class":171},"    \u002F\u002F1.先输出1-100的数字\n",[102,3187,3188,3191,3193,3195,3197,3199,3201,3204,3206,3208,3210,3212],{"class":104,"line":1209},[102,3189,3190],{"class":108},"    for",[102,3192,113],{"class":112},[102,3194,116],{"class":108},[102,3196,3021],{"class":112},[102,3198,158],{"class":108},[102,3200,330],{"class":161},[102,3202,3203],{"class":112},"; i",[102,3205,1577],{"class":108},[102,3207,424],{"class":161},[102,3209,3203],{"class":112},[102,3211,2281],{"class":108},[102,3213,119],{"class":112},[102,3215,3216],{"class":104,"line":1300},[102,3217,2019],{"class":112},[102,3219,3220],{"class":104,"line":1306},[102,3221,3222],{"class":171},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[102,3224,3225],{"class":104,"line":1318},[102,3226,3227],{"class":171},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[102,3229,3230,3232,3234,3236,3238,3240,3242,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267],{"class":104,"line":1601},[102,3231,2486],{"class":108},[102,3233,3093],{"class":112},[102,3235,441],{"class":108},[102,3237,482],{"class":161},[102,3239,2938],{"class":108},[102,3241,304],{"class":161},[102,3243,3244],{"class":108}," ||",[102,3246,3021],{"class":112},[102,3248,441],{"class":108},[102,3250,559],{"class":161},[102,3252,2938],{"class":108},[102,3254,482],{"class":161},[102,3256,3244],{"class":108},[102,3258,3021],{"class":112},[102,3260,697],{"class":108},[102,3262,559],{"class":161},[102,3264,2938],{"class":108},[102,3266,482],{"class":161},[102,3268,119],{"class":112},[102,3270,3271],{"class":104,"line":1606},[102,3272,2499],{"class":112},[102,3274,3275,3277,3279,3282,3284],{"class":104,"line":1612},[102,3276,2504],{"class":112},[102,3278,1157],{"class":108},[102,3280,3281],{"class":217},"\"敲桌子\"",[102,3283,1157],{"class":108},[102,3285,1180],{"class":112},[102,3287,3288],{"class":104,"line":1617},[102,3289,2518],{"class":112},[102,3291,3292],{"class":104,"line":1631},[102,3293,2559],{"class":108},[102,3295,3296],{"class":104,"line":1636},[102,3297,2499],{"class":112},[102,3299,3300,3302,3304,3306,3308],{"class":104,"line":1642},[102,3301,2504],{"class":112},[102,3303,1157],{"class":108},[102,3305,554],{"class":112},[102,3307,1157],{"class":108},[102,3309,1180],{"class":112},[102,3311,3312],{"class":104,"line":1663},[102,3313,2518],{"class":112},[102,3315,3316],{"class":104,"line":1668},[102,3317,2176],{"class":112},[102,3319,3320],{"class":104,"line":1682},[102,3321,1554],{"class":112},[19,3323,3324],{},"嵌套实现星图",[93,3326,3328],{"className":95,"code":3327,"language":97,"meta":23,"style":23},"#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",[99,3329,3330,3336,3346,3354,3358,3384,3388,3417,3421,3432,3436,3445,3449],{"__ignoreMap":23},[102,3331,3332,3334],{"class":104,"line":105},[102,3333,1938],{"class":108},[102,3335,1941],{"class":217},[102,3337,3338,3340,3342,3344],{"class":104,"line":24},[102,3339,1946],{"class":108},[102,3341,1949],{"class":108},[102,3343,1953],{"class":1952},[102,3345,1279],{"class":112},[102,3347,3348,3350,3352],{"class":104,"line":1168},[102,3349,116],{"class":108},[102,3351,1962],{"class":1952},[102,3353,1965],{"class":112},[102,3355,3356],{"class":104,"line":1183},[102,3357,1535],{"class":112},[102,3359,3360,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380,3382],{"class":104,"line":1189},[102,3361,3190],{"class":108},[102,3363,1647],{"class":112},[102,3365,116],{"class":108},[102,3367,3021],{"class":112},[102,3369,158],{"class":108},[102,3371,304],{"class":161},[102,3373,3028],{"class":112},[102,3375,1023],{"class":108},[102,3377,559],{"class":161},[102,3379,3028],{"class":112},[102,3381,2281],{"class":108},[102,3383,119],{"class":112},[102,3385,3386],{"class":104,"line":1203},[102,3387,2019],{"class":112},[102,3389,3390,3393,3395,3397,3400,3402,3404,3407,3409,3411,3413,3415],{"class":104,"line":1209},[102,3391,3392],{"class":108},"        for",[102,3394,1647],{"class":112},[102,3396,116],{"class":108},[102,3398,3399],{"class":112}," j",[102,3401,158],{"class":108},[102,3403,304],{"class":161},[102,3405,3406],{"class":112},";j",[102,3408,1023],{"class":108},[102,3410,559],{"class":161},[102,3412,3406],{"class":112},[102,3414,2281],{"class":108},[102,3416,119],{"class":112},[102,3418,3419],{"class":104,"line":1300},[102,3420,2499],{"class":112},[102,3422,3423,3425,3427,3430],{"class":104,"line":1306},[102,3424,2504],{"class":112},[102,3426,1157],{"class":108},[102,3428,3429],{"class":217},"\"*\"",[102,3431,1279],{"class":112},[102,3433,3434],{"class":104,"line":1318},[102,3435,2518],{"class":112},[102,3437,3438,3441,3443],{"class":104,"line":1601},[102,3439,3440],{"class":112},"        cout",[102,3442,1157],{"class":108},[102,3444,1180],{"class":112},[102,3446,3447],{"class":104,"line":1606},[102,3448,2176],{"class":112},[102,3450,3451],{"class":104,"line":1612},[102,3452,1554],{"class":112},[19,3454,3455],{},"乘法口诀表",[93,3457,3459],{"className":95,"code":3458,"language":97,"meta":23,"style":23},"#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",[99,3460,3461,3467,3477,3485,3489,3515,3519,3544,3548,3588,3592,3600,3604],{"__ignoreMap":23},[102,3462,3463,3465],{"class":104,"line":105},[102,3464,1938],{"class":108},[102,3466,2323],{"class":217},[102,3468,3469,3471,3473,3475],{"class":104,"line":24},[102,3470,1946],{"class":108},[102,3472,1949],{"class":108},[102,3474,1953],{"class":1952},[102,3476,1279],{"class":112},[102,3478,3479,3481,3483],{"class":104,"line":1168},[102,3480,116],{"class":108},[102,3482,1962],{"class":1952},[102,3484,1965],{"class":112},[102,3486,3487],{"class":104,"line":1183},[102,3488,1535],{"class":112},[102,3490,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513],{"class":104,"line":1189},[102,3492,3190],{"class":108},[102,3494,113],{"class":112},[102,3496,116],{"class":108},[102,3498,3021],{"class":112},[102,3500,158],{"class":108},[102,3502,330],{"class":161},[102,3504,3028],{"class":112},[102,3506,1023],{"class":108},[102,3508,559],{"class":161},[102,3510,3028],{"class":112},[102,3512,2281],{"class":108},[102,3514,119],{"class":112},[102,3516,3517],{"class":104,"line":1203},[102,3518,2019],{"class":112},[102,3520,3521,3523,3525,3527,3529,3531,3533,3535,3537,3540,3542],{"class":104,"line":1209},[102,3522,3392],{"class":108},[102,3524,113],{"class":112},[102,3526,116],{"class":108},[102,3528,3399],{"class":112},[102,3530,158],{"class":108},[102,3532,330],{"class":161},[102,3534,3406],{"class":112},[102,3536,1577],{"class":108},[102,3538,3539],{"class":112},"i;j",[102,3541,2281],{"class":108},[102,3543,119],{"class":112},[102,3545,3546],{"class":104,"line":1300},[102,3547,2499],{"class":112},[102,3549,3550,3552,3554,3556,3558,3560,3562,3564,3566,3569,3571,3573,3575,3577,3579,3582,3584,3586],{"class":104,"line":1306},[102,3551,2504],{"class":112},[102,3553,1157],{"class":108},[102,3555,580],{"class":112},[102,3557,1157],{"class":108},[102,3559,3429],{"class":217},[102,3561,1157],{"class":108},[102,3563,554],{"class":112},[102,3565,1157],{"class":108},[102,3567,3568],{"class":217},"\"=\"",[102,3570,1157],{"class":108},[102,3572,554],{"class":112},[102,3574,568],{"class":108},[102,3576,580],{"class":112},[102,3578,1157],{"class":108},[102,3580,3581],{"class":217},"'",[102,3583,1219],{"class":161},[102,3585,3581],{"class":217},[102,3587,1279],{"class":112},[102,3589,3590],{"class":104,"line":1318},[102,3591,2518],{"class":112},[102,3593,3594,3596,3598],{"class":104,"line":1601},[102,3595,3440],{"class":112},[102,3597,1157],{"class":108},[102,3599,1180],{"class":112},[102,3601,3602],{"class":104,"line":1606},[102,3603,2176],{"class":112},[102,3605,3606],{"class":104,"line":1612},[102,3607,1554],{"class":112},[73,3609,3611],{"id":3610},"_163跳出语句","1.6.3跳出语句",[56,3613,3614],{},[59,3615,3616],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3618,3619],{},"break使用时机：",[1120,3621,3622,3625,3628],{},[59,3623,3624],{},"出现在switch条件语句中，作用是终止case并跳出switch",[59,3626,3627],{},"出现在循环结构中，作用是跳出当前的循环结构",[59,3629,3630],{},"出现在嵌套循环中，跳出最近的内层循环语句",[56,3632,3633,3636],{"start":24},[59,3634,3635],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[59,3637,3638],{},"goto语句\n语法：goto 标记;",[19,3640,3641],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[93,3643,3645],{"className":95,"code":3644,"language":97,"meta":23,"style":23},"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",[99,3646,3647,3655,3659,3672,3682,3695,3708,3721,3729,3745],{"__ignoreMap":23},[102,3648,3649,3651,3653],{"class":104,"line":105},[102,3650,116],{"class":108},[102,3652,1962],{"class":1952},[102,3654,1965],{"class":112},[102,3656,3657],{"class":104,"line":24},[102,3658,1535],{"class":112},[102,3660,3661,3663,3665,3668,3670],{"class":104,"line":1168},[102,3662,1540],{"class":112},[102,3664,1157],{"class":108},[102,3666,3667],{"class":217},"\"1\"",[102,3669,1157],{"class":108},[102,3671,1180],{"class":112},[102,3673,3674,3677,3680],{"class":104,"line":1183},[102,3675,3676],{"class":108},"    goto",[102,3678,3679],{"class":1952}," FLAG",[102,3681,1279],{"class":112},[102,3683,3684,3686,3688,3691,3693],{"class":104,"line":1189},[102,3685,1540],{"class":112},[102,3687,1157],{"class":108},[102,3689,3690],{"class":217},"\"2\"",[102,3692,1157],{"class":108},[102,3694,1180],{"class":112},[102,3696,3697,3699,3701,3704,3706],{"class":104,"line":1203},[102,3698,1540],{"class":112},[102,3700,1157],{"class":108},[102,3702,3703],{"class":217},"\"3\"",[102,3705,1157],{"class":108},[102,3707,1180],{"class":112},[102,3709,3710,3712,3714,3717,3719],{"class":104,"line":1209},[102,3711,1540],{"class":112},[102,3713,1157],{"class":108},[102,3715,3716],{"class":217},"\"4\"",[102,3718,1157],{"class":108},[102,3720,1180],{"class":112},[102,3722,3723,3726],{"class":104,"line":1300},[102,3724,3725],{"class":1952},"    FLAG",[102,3727,3728],{"class":112},":\n",[102,3730,3731,3733,3735,3738,3740,3742],{"class":104,"line":1306},[102,3732,1540],{"class":112},[102,3734,1157],{"class":108},[102,3736,3737],{"class":217},"\"5\"",[102,3739,1157],{"class":108},[102,3741,1227],{"class":112},[102,3743,3744],{"class":171},"\u002F\u002F跳过了2,3,4,直接到5\n",[102,3746,3747],{"class":104,"line":1318},[102,3748,1554],{"class":112},[14,3750,3752],{"id":3751},"_17数组","1.7数组",[73,3754,3756],{"id":3755},"_171一维数组","1.7.1一维数组",[56,3758,3759],{},[59,3760,3761],{},"一维数组定义方式",[250,3763,3764,3774],{},[253,3765,3766],{},[256,3767,3768,3771],{},[259,3769,3770],{},"方式",[259,3772,3773],{},"注意事项",[297,3775,3776,3790,3800],{},[256,3777,3778,3784],{},[302,3779,3780,3781,168],{},"数据类型 数组名",[102,3782,3783],{},"数组长度",[302,3785,3786,3787,3789],{},"这种方式是先定义再arr",[102,3788,554],{},"赋值",[256,3791,3792,3797],{},[302,3793,3780,3794,3796],{},[102,3795,3783],{},"={值1,值2....};",[302,3798,3799],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[256,3801,3802,3806],{},[302,3803,3780,3804,3796],{},[102,3805],{},[302,3807,3808,3809,3811],{},"int arr",[102,3810],{},";这是不正确的，按照这样的方式定义必须有初始长度",[56,3813,3814],{"start":24},[59,3815,3816],{},"一维数组数组名\n用途：",[1120,3818,3819],{},[59,3820,3821],{},"1.可以统计整个数组在内存中的长度：",[93,3823,3825],{"className":95,"code":3824,"language":97,"meta":23,"style":23},"sizeof(arr);\nsizeof(arr[0]);\n",[99,3826,3827,3834],{"__ignoreMap":23},[102,3828,3829,3831],{"class":104,"line":105},[102,3830,109],{"class":108},[102,3832,3833],{"class":112},"(arr);\n",[102,3835,3836,3838,3841,3843],{"class":104,"line":24},[102,3837,109],{"class":108},[102,3839,3840],{"class":112},"(arr[",[102,3842,304],{"class":161},[102,3844,3845],{"class":112},"]);\n",[1120,3847,3848],{},[59,3849,3850],{},"2.可以获取数组在内存中的首地址:",[93,3852,3854],{"className":95,"code":3853,"language":97,"meta":23,"style":23},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[99,3855,3856,3861,3874,3879],{"__ignoreMap":23},[102,3857,3858],{"class":104,"line":105},[102,3859,3860],{"class":171},"\u002F\u002F查看16进制的首地址\n",[102,3862,3863,3865,3867,3870,3872],{"class":104,"line":24},[102,3864,1358],{"class":112},[102,3866,1157],{"class":108},[102,3868,3869],{"class":112},"arr",[102,3871,1157],{"class":108},[102,3873,1180],{"class":112},[102,3875,3876],{"class":104,"line":1168},[102,3877,3878],{"class":171},"\u002F\u002F看10进制数\n",[102,3880,3881,3883,3885,3887,3889,3891,3893,3896,3898,3900,3902],{"class":104,"line":1183},[102,3882,1358],{"class":112},[102,3884,1157],{"class":108},[102,3886,113],{"class":112},[102,3888,116],{"class":108},[102,3890,542],{"class":112},[102,3892,466],{"class":108},[102,3894,3895],{"class":112},"arr[",[102,3897,304],{"class":161},[102,3899,1053],{"class":112},[102,3901,1157],{"class":108},[102,3903,1180],{"class":112},[19,3905,3906],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1120,3908,3909],{},[59,3910,3911],{},"1️⃣五只小猪称体重",[93,3913,3915],{"className":95,"code":3914,"language":97,"meta":23,"style":23},"#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",[99,3916,3917,3923,3933,3941,3945,3985,3998,4024,4028,4040,4044,4054,4058,4062,4075,4085],{"__ignoreMap":23},[102,3918,3919,3921],{"class":104,"line":105},[102,3920,1938],{"class":108},[102,3922,1941],{"class":217},[102,3924,3925,3927,3929,3931],{"class":104,"line":24},[102,3926,1946],{"class":108},[102,3928,1949],{"class":108},[102,3930,1953],{"class":1952},[102,3932,1279],{"class":112},[102,3934,3935,3937,3939],{"class":104,"line":1168},[102,3936,116],{"class":108},[102,3938,1962],{"class":1952},[102,3940,1965],{"class":112},[102,3942,3943],{"class":104,"line":1183},[102,3944,1535],{"class":112},[102,3946,3947,3949,3952,3954,3956,3958,3960,3963,3965,3968,3970,3972,3974,3977,3979,3982],{"class":104,"line":1189},[102,3948,1974],{"class":108},[102,3950,3951],{"class":112}," arr[",[102,3953,432],{"class":161},[102,3955,1053],{"class":112},[102,3957,158],{"class":108},[102,3959,1009],{"class":112},[102,3961,3962],{"class":161},"300",[102,3964,491],{"class":112},[102,3966,3967],{"class":161},"350",[102,3969,491],{"class":112},[102,3971,1711],{"class":161},[102,3973,491],{"class":112},[102,3975,3976],{"class":161},"400",[102,3978,491],{"class":112},[102,3980,3981],{"class":161},"250",[102,3983,3984],{"class":112},"};\n",[102,3986,3987,3989,3992,3994,3996],{"class":104,"line":1203},[102,3988,1974],{"class":108},[102,3990,3991],{"class":112}," tmp",[102,3993,158],{"class":108},[102,3995,304],{"class":161},[102,3997,1279],{"class":112},[102,3999,4000,4002,4004,4006,4008,4010,4012,4014,4016,4018,4020,4022],{"class":104,"line":1209},[102,4001,3190],{"class":108},[102,4003,1647],{"class":112},[102,4005,116],{"class":108},[102,4007,3021],{"class":112},[102,4009,158],{"class":108},[102,4011,304],{"class":161},[102,4013,3028],{"class":112},[102,4015,1023],{"class":108},[102,4017,432],{"class":161},[102,4019,3028],{"class":112},[102,4021,2281],{"class":108},[102,4023,119],{"class":112},[102,4025,4026],{"class":104,"line":1300},[102,4027,2019],{"class":112},[102,4029,4030,4032,4035,4037],{"class":104,"line":1306},[102,4031,2486],{"class":108},[102,4033,4034],{"class":112},"(tmp",[102,4036,1023],{"class":108},[102,4038,4039],{"class":112},"arr[i])\n",[102,4041,4042],{"class":104,"line":1318},[102,4043,2499],{"class":112},[102,4045,4046,4049,4051],{"class":104,"line":1601},[102,4047,4048],{"class":112},"            tmp",[102,4050,158],{"class":108},[102,4052,4053],{"class":112},"arr[i];\n",[102,4055,4056],{"class":104,"line":1606},[102,4057,2518],{"class":112},[102,4059,4060],{"class":104,"line":1612},[102,4061,2176],{"class":112},[102,4063,4064,4066,4068,4071,4073],{"class":104,"line":1617},[102,4065,1540],{"class":112},[102,4067,1157],{"class":108},[102,4069,4070],{"class":112},"tmp",[102,4072,1157],{"class":108},[102,4074,1180],{"class":112},[102,4076,4077,4080,4083],{"class":104,"line":1631},[102,4078,4079],{"class":108},"    return",[102,4081,4082],{"class":161}," 0",[102,4084,1279],{"class":112},[102,4086,4087],{"class":104,"line":1636},[102,4088,1554],{"class":112},[1120,4090,4091],{},[59,4092,4093],{},"2️⃣数组元素逆置",[93,4095,4097],{"className":95,"code":4096,"language":97,"meta":23,"style":23},"\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",[99,4098,4099,4104,4110,4120,4128,4132,4167,4183,4215,4228,4233,4238,4250,4260,4270,4275,4284,4294,4299,4304,4331,4335,4351,4355,4366,4375],{"__ignoreMap":23},[102,4100,4101],{"class":104,"line":105},[102,4102,4103],{"class":171},"\u002F\u002F元素逆置\n",[102,4105,4106,4108],{"class":104,"line":24},[102,4107,1938],{"class":108},[102,4109,1941],{"class":217},[102,4111,4112,4114,4116,4118],{"class":104,"line":1168},[102,4113,1946],{"class":108},[102,4115,1949],{"class":108},[102,4117,1953],{"class":1952},[102,4119,1279],{"class":112},[102,4121,4122,4124,4126],{"class":104,"line":1183},[102,4123,116],{"class":108},[102,4125,1962],{"class":1952},[102,4127,1965],{"class":112},[102,4129,4130],{"class":104,"line":1189},[102,4131,1535],{"class":112},[102,4133,4134,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157,4159,4161,4163,4165],{"class":104,"line":1203},[102,4135,4136],{"class":108},"   int",[102,4138,3951],{"class":112},[102,4140,432],{"class":161},[102,4142,1053],{"class":112},[102,4144,158],{"class":108},[102,4146,1009],{"class":112},[102,4148,330],{"class":161},[102,4150,491],{"class":112},[102,4152,190],{"class":161},[102,4154,491],{"class":112},[102,4156,184],{"class":161},[102,4158,491],{"class":112},[102,4160,406],{"class":161},[102,4162,491],{"class":112},[102,4164,432],{"class":161},[102,4166,3984],{"class":112},[102,4168,4169,4171,4174,4176,4178,4180],{"class":104,"line":1209},[102,4170,4136],{"class":108},[102,4172,4173],{"class":112}," start",[102,4175,158],{"class":108},[102,4177,304],{"class":161},[102,4179,168],{"class":112},[102,4181,4182],{"class":171},"\u002F\u002F起始下标\n",[102,4184,4185,4187,4190,4193,4196,4199,4201,4203,4206,4208,4210,4212],{"class":104,"line":1300},[102,4186,4136],{"class":108},[102,4188,4189],{"class":112}," end",[102,4191,4192],{"class":108},"=sizeof",[102,4194,4195],{"class":112},"(arr)",[102,4197,4198],{"class":108},"\u002Fsizeof",[102,4200,3840],{"class":112},[102,4202,304],{"class":161},[102,4204,4205],{"class":112},"])",[102,4207,645],{"class":108},[102,4209,330],{"class":161},[102,4211,168],{"class":112},[102,4213,4214],{"class":171},"\u002F\u002F结束下标\n",[102,4216,4217,4220,4223,4225],{"class":104,"line":1306},[102,4218,4219],{"class":108},"   while",[102,4221,4222],{"class":112}," (start",[102,4224,1023],{"class":108},[102,4226,4227],{"class":112},"end)\n",[102,4229,4230],{"class":104,"line":1318},[102,4231,4232],{"class":112},"   {\n",[102,4234,4235],{"class":104,"line":1601},[102,4236,4237],{"class":171},"    \u002F\u002F实现元素互换代码\n",[102,4239,4240,4242,4245,4247],{"class":104,"line":1606},[102,4241,1974],{"class":108},[102,4243,4244],{"class":112}," temp",[102,4246,158],{"class":108},[102,4248,4249],{"class":112},"arr[start];\n",[102,4251,4252,4255,4257],{"class":104,"line":1612},[102,4253,4254],{"class":112},"    arr[start]",[102,4256,158],{"class":108},[102,4258,4259],{"class":112},"arr[end];\n",[102,4261,4262,4265,4267],{"class":104,"line":1617},[102,4263,4264],{"class":112},"    arr[end]",[102,4266,158],{"class":108},[102,4268,4269],{"class":112},"temp;\n",[102,4271,4272],{"class":104,"line":1631},[102,4273,4274],{"class":171},"    \u002F\u002F下标更新\n",[102,4276,4277,4280,4282],{"class":104,"line":1636},[102,4278,4279],{"class":112},"    start",[102,4281,2281],{"class":108},[102,4283,1279],{"class":112},[102,4285,4286,4289,4292],{"class":104,"line":1642},[102,4287,4288],{"class":112},"    end",[102,4290,4291],{"class":108},"--",[102,4293,1279],{"class":112},[102,4295,4296],{"class":104,"line":1663},[102,4297,4298],{"class":112},"   }\n",[102,4300,4301],{"class":104,"line":1668},[102,4302,4303],{"class":171},"   \u002F\u002F输出逆置后的数组\n",[102,4305,4306,4309,4311,4313,4315,4317,4319,4321,4323,4325,4327,4329],{"class":104,"line":1682},[102,4307,4308],{"class":108},"   for",[102,4310,1647],{"class":112},[102,4312,116],{"class":108},[102,4314,3021],{"class":112},[102,4316,158],{"class":108},[102,4318,304],{"class":161},[102,4320,3028],{"class":112},[102,4322,1023],{"class":108},[102,4324,432],{"class":161},[102,4326,3028],{"class":112},[102,4328,2281],{"class":108},[102,4330,119],{"class":112},[102,4332,4333],{"class":104,"line":1687},[102,4334,4232],{"class":112},[102,4336,4337,4339,4341,4344,4346,4349],{"class":104,"line":1716},[102,4338,1540],{"class":112},[102,4340,1157],{"class":108},[102,4342,4343],{"class":112},"arr[i]",[102,4345,1157],{"class":108},[102,4347,4348],{"class":217},"\" \"",[102,4350,1279],{"class":112},[102,4352,4353],{"class":104,"line":1721},[102,4354,4298],{"class":112},[102,4356,4357,4360,4362,4364],{"class":104,"line":1738},[102,4358,4359],{"class":1952},"   system",[102,4361,113],{"class":112},[102,4363,2297],{"class":217},[102,4365,2708],{"class":112},[102,4367,4368,4371,4373],{"class":104,"line":1743},[102,4369,4370],{"class":108},"   return",[102,4372,4082],{"class":161},[102,4374,1279],{"class":112},[102,4376,4377],{"class":104,"line":1748},[102,4378,1554],{"class":112},[1120,4380,4381],{},[59,4382,4383],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[93,4385,4387],{"className":95,"code":4386,"language":97,"meta":23,"style":23},"\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",[99,4388,4389,4394,4400,4410,4418,4422,4474,4487,4513,4517,4531,4535,4540,4545,4575,4579,4584,4618,4622,4627,4647,4652,4664,4680,4695,4700,4704,4708,4721,4747,4751,4765,4769,4777],{"__ignoreMap":23},[102,4390,4391],{"class":104,"line":105},[102,4392,4393],{"class":171},"\u002F\u002F冒泡排序,升序\n",[102,4395,4396,4398],{"class":104,"line":24},[102,4397,1938],{"class":108},[102,4399,1941],{"class":217},[102,4401,4402,4404,4406,4408],{"class":104,"line":1168},[102,4403,1946],{"class":108},[102,4405,1949],{"class":108},[102,4407,1953],{"class":1952},[102,4409,1279],{"class":112},[102,4411,4412,4414,4416],{"class":104,"line":1183},[102,4413,116],{"class":108},[102,4415,1962],{"class":1952},[102,4417,1965],{"class":112},[102,4419,4420],{"class":104,"line":1189},[102,4421,1535],{"class":112},[102,4423,4424,4426,4428,4430,4433,4435,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470,4472],{"class":104,"line":1203},[102,4425,1974],{"class":108},[102,4427,3951],{"class":112},[102,4429,533],{"class":161},[102,4431,4432],{"class":112},"] ",[102,4434,158],{"class":108},[102,4436,4437],{"class":112}," {",[102,4439,406],{"class":161},[102,4441,491],{"class":112},[102,4443,190],{"class":161},[102,4445,491],{"class":112},[102,4447,508],{"class":161},[102,4449,491],{"class":112},[102,4451,304],{"class":161},[102,4453,491],{"class":112},[102,4455,432],{"class":161},[102,4457,491],{"class":112},[102,4459,482],{"class":161},[102,4461,491],{"class":112},[102,4463,330],{"class":161},[102,4465,491],{"class":112},[102,4467,184],{"class":161},[102,4469,491],{"class":112},[102,4471,533],{"class":161},[102,4473,3984],{"class":112},[102,4475,4476,4478,4480,4483,4485],{"class":104,"line":1209},[102,4477,1540],{"class":112},[102,4479,1157],{"class":108},[102,4481,4482],{"class":217},"\"排序前：\"",[102,4484,1157],{"class":108},[102,4486,1180],{"class":112},[102,4488,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509,4511],{"class":104,"line":1300},[102,4490,3190],{"class":108},[102,4492,1647],{"class":112},[102,4494,116],{"class":108},[102,4496,3021],{"class":112},[102,4498,158],{"class":108},[102,4500,304],{"class":161},[102,4502,3028],{"class":112},[102,4504,1023],{"class":108},[102,4506,533],{"class":161},[102,4508,3028],{"class":112},[102,4510,2281],{"class":108},[102,4512,119],{"class":112},[102,4514,4515],{"class":104,"line":1306},[102,4516,2019],{"class":112},[102,4518,4519,4521,4523,4525,4527,4529],{"class":104,"line":1318},[102,4520,3440],{"class":112},[102,4522,1157],{"class":108},[102,4524,4343],{"class":112},[102,4526,1157],{"class":108},[102,4528,4348],{"class":217},[102,4530,1279],{"class":112},[102,4532,4533],{"class":104,"line":1601},[102,4534,2176],{"class":112},[102,4536,4537],{"class":104,"line":1606},[102,4538,4539],{"class":171},"    \u002F\u002F开始冒泡排序\n",[102,4541,4542],{"class":104,"line":1612},[102,4543,4544],{"class":171},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[102,4546,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573],{"class":104,"line":1617},[102,4548,3190],{"class":108},[102,4550,1647],{"class":112},[102,4552,116],{"class":108},[102,4554,3021],{"class":112},[102,4556,158],{"class":108},[102,4558,304],{"class":161},[102,4560,3028],{"class":112},[102,4562,1023],{"class":108},[102,4564,533],{"class":161},[102,4566,645],{"class":108},[102,4568,330],{"class":161},[102,4570,3028],{"class":112},[102,4572,2281],{"class":108},[102,4574,119],{"class":112},[102,4576,4577],{"class":104,"line":1631},[102,4578,2019],{"class":112},[102,4580,4581],{"class":104,"line":1636},[102,4582,4583],{"class":171},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[102,4585,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616],{"class":104,"line":1642},[102,4587,3392],{"class":108},[102,4589,1647],{"class":112},[102,4591,116],{"class":108},[102,4593,3399],{"class":112},[102,4595,158],{"class":108},[102,4597,304],{"class":161},[102,4599,3406],{"class":112},[102,4601,1023],{"class":108},[102,4603,533],{"class":161},[102,4605,645],{"class":108},[102,4607,554],{"class":112},[102,4609,645],{"class":108},[102,4611,330],{"class":161},[102,4613,3406],{"class":112},[102,4615,2281],{"class":108},[102,4617,119],{"class":112},[102,4619,4620],{"class":104,"line":1663},[102,4621,2499],{"class":112},[102,4623,4624],{"class":104,"line":1668},[102,4625,4626],{"class":171},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[102,4628,4629,4632,4635,4637,4640,4642,4644],{"class":104,"line":1682},[102,4630,4631],{"class":108},"            if",[102,4633,4634],{"class":112},"(arr[j]",[102,4636,1073],{"class":108},[102,4638,4639],{"class":112},"arr[j",[102,4641,594],{"class":108},[102,4643,330],{"class":161},[102,4645,4646],{"class":112},"])\n",[102,4648,4649],{"class":104,"line":1687},[102,4650,4651],{"class":112},"            {\n",[102,4653,4654,4657,4659,4661],{"class":104,"line":1716},[102,4655,4656],{"class":108},"                int",[102,4658,4244],{"class":112},[102,4660,158],{"class":108},[102,4662,4663],{"class":112},"arr[j];\n",[102,4665,4666,4669,4671,4673,4675,4677],{"class":104,"line":1721},[102,4667,4668],{"class":112},"                arr[j]",[102,4670,158],{"class":108},[102,4672,4639],{"class":112},[102,4674,594],{"class":108},[102,4676,330],{"class":161},[102,4678,4679],{"class":112},"];\n",[102,4681,4682,4685,4687,4689,4691,4693],{"class":104,"line":1738},[102,4683,4684],{"class":112},"                arr[j",[102,4686,594],{"class":108},[102,4688,330],{"class":161},[102,4690,1053],{"class":112},[102,4692,158],{"class":108},[102,4694,4269],{"class":112},[102,4696,4697],{"class":104,"line":1743},[102,4698,4699],{"class":112},"            }\n",[102,4701,4702],{"class":104,"line":1748},[102,4703,2518],{"class":112},[102,4705,4706],{"class":104,"line":1753},[102,4707,2176],{"class":112},[102,4709,4710,4712,4714,4717,4719],{"class":104,"line":1767},[102,4711,1540],{"class":112},[102,4713,1157],{"class":108},[102,4715,4716],{"class":217},"\"排序后：\"",[102,4718,1157],{"class":108},[102,4720,1180],{"class":112},[102,4722,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745],{"class":104,"line":1772},[102,4724,3190],{"class":108},[102,4726,1647],{"class":112},[102,4728,116],{"class":108},[102,4730,3021],{"class":112},[102,4732,158],{"class":108},[102,4734,304],{"class":161},[102,4736,3028],{"class":112},[102,4738,1023],{"class":108},[102,4740,533],{"class":161},[102,4742,3028],{"class":112},[102,4744,2281],{"class":108},[102,4746,119],{"class":112},[102,4748,4749],{"class":104,"line":2566},[102,4750,2019],{"class":112},[102,4752,4753,4755,4757,4759,4761,4763],{"class":104,"line":2580},[102,4754,3440],{"class":112},[102,4756,1157],{"class":108},[102,4758,4343],{"class":112},[102,4760,1157],{"class":108},[102,4762,4348],{"class":217},[102,4764,1279],{"class":112},[102,4766,4767],{"class":104,"line":2588},[102,4768,2176],{"class":112},[102,4770,4771,4773,4775],{"class":104,"line":2593},[102,4772,4079],{"class":108},[102,4774,4082],{"class":161},[102,4776,1279],{"class":112},[102,4778,4779],{"class":104,"line":2599},[102,4780,1554],{"class":112},[73,4782,4784],{"id":4783},"_172二维数组","1.7.2二维数组",[56,4786,4787],{},[59,4788,4789],{},"二维数组的四种定义方式",[250,4791,4792,4801],{},[253,4793,4794],{},[256,4795,4796,4799],{},[259,4797,4798],{},"序号",[259,4800,3770],{},[297,4802,4803,4813,4822,4831,4840],{},[256,4804,4805,4807],{},[302,4806,330],{},[302,4808,4809,4810,168],{},"数据类型 数组名[行数]",[102,4811,4812],{},"列数",[256,4814,4815,4817],{},[302,4816,190],{},[302,4818,4809,4819,4821],{},[102,4820,4812],{},"={ {数据1,数据2}，{数据3，数据4}... }",[256,4823,4824,4826],{},[302,4825,184],{},[302,4827,4809,4828,4830],{},[102,4829,4812],{},"={数据1,数据2,数据3...}",[256,4832,4833,4835],{},[302,4834,406],{},[302,4836,4837,4838,4830],{},"数据类型 数组名[]",[102,4839,4812],{},[256,4841,4842,4845],{},[302,4843,4844],{},"注意：不能只省略列数",[302,4846],{},[56,4848,4849],{"start":24},[59,4850,4851],{},"二维数组数组名",[1120,4853,4854,4857],{},[59,4855,4856],{},"1.查看二维数组所占内存空间",[59,4858,4859],{},"2.获取二维数组首地址",[19,4861,4862],{},"已知二维数组，求二维数组的行数与列数",[93,4864,4866],{"className":95,"code":4865,"language":97,"meta":23,"style":23},"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",[99,4867,4868,4876,4880,4898,4902,4920,4936,4941,4966,4999],{"__ignoreMap":23},[102,4869,4870,4872,4874],{"class":104,"line":105},[102,4871,116],{"class":108},[102,4873,1962],{"class":1952},[102,4875,1965],{"class":112},[102,4877,4878],{"class":104,"line":24},[102,4879,1535],{"class":112},[102,4881,4882,4884,4886,4888,4891,4893,4895],{"class":104,"line":1168},[102,4883,1974],{"class":108},[102,4885,3951],{"class":112},[102,4887,190],{"class":161},[102,4889,4890],{"class":112},"][",[102,4892,184],{"class":161},[102,4894,1053],{"class":112},[102,4896,4897],{"class":108},"=\n",[102,4899,4900],{"class":104,"line":1183},[102,4901,2019],{"class":112},[102,4903,4904,4907,4909,4911,4913,4915,4917],{"class":104,"line":1189},[102,4905,4906],{"class":112},"        {",[102,4908,330],{"class":161},[102,4910,491],{"class":112},[102,4912,190],{"class":161},[102,4914,491],{"class":112},[102,4916,184],{"class":161},[102,4918,4919],{"class":112},"},\n",[102,4921,4922,4924,4926,4928,4930,4932,4934],{"class":104,"line":1203},[102,4923,4906],{"class":112},[102,4925,406],{"class":161},[102,4927,491],{"class":112},[102,4929,432],{"class":161},[102,4931,491],{"class":112},[102,4933,457],{"class":161},[102,4935,1554],{"class":112},[102,4937,4938],{"class":104,"line":1209},[102,4939,4940],{"class":112},"    };\n",[102,4942,4943,4945,4947,4950,4952,4954,4956,4958,4960,4962,4964],{"class":104,"line":1300},[102,4944,1540],{"class":112},[102,4946,1157],{"class":108},[102,4948,4949],{"class":217},"\"二维数组的行数\"",[102,4951,1361],{"class":108},[102,4953,4195],{"class":112},[102,4955,4198],{"class":108},[102,4957,3840],{"class":112},[102,4959,304],{"class":161},[102,4961,4205],{"class":112},[102,4963,1157],{"class":108},[102,4965,1180],{"class":112},[102,4967,4968,4970,4972,4975,4977,4979,4981,4983,4985,4987,4989,4991,4993,4995,4997],{"class":104,"line":1306},[102,4969,1540],{"class":112},[102,4971,1157],{"class":108},[102,4973,4974],{"class":217},"\"二维数组的列数\"",[102,4976,1361],{"class":108},[102,4978,3840],{"class":112},[102,4980,304],{"class":161},[102,4982,4205],{"class":112},[102,4984,4198],{"class":108},[102,4986,3840],{"class":112},[102,4988,304],{"class":161},[102,4990,4890],{"class":112},[102,4992,304],{"class":161},[102,4994,4205],{"class":112},[102,4996,1157],{"class":108},[102,4998,1180],{"class":112},[102,5000,5001],{"class":104,"line":1318},[102,5002,1554],{"class":112},[19,5004,5005],{},"查看二维数组首地址",[93,5007,5009],{"className":95,"code":5008,"language":97,"meta":23,"style":23},"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",[99,5010,5011,5028,5054,5079],{"__ignoreMap":23},[102,5012,5013,5015,5017,5020,5022,5024,5026],{"class":104,"line":105},[102,5014,1358],{"class":112},[102,5016,1157],{"class":108},[102,5018,5019],{"class":217},"\"二维数组首地址：\"",[102,5021,1157],{"class":108},[102,5023,3869],{"class":112},[102,5025,1157],{"class":108},[102,5027,1180],{"class":112},[102,5029,5030,5032,5034,5037,5039,5041,5043,5046,5048,5050,5052],{"class":104,"line":24},[102,5031,1358],{"class":112},[102,5033,1157],{"class":108},[102,5035,5036],{"class":217},"\"二维数组第一行的首地址：\"",[102,5038,1157],{"class":108},[102,5040,113],{"class":112},[102,5042,116],{"class":108},[102,5044,5045],{"class":112},")arr[",[102,5047,304],{"class":161},[102,5049,1053],{"class":112},[102,5051,1157],{"class":108},[102,5053,1180],{"class":112},[102,5055,5056,5058,5060,5063,5065,5067,5069,5071,5073,5075,5077],{"class":104,"line":1168},[102,5057,1358],{"class":112},[102,5059,1157],{"class":108},[102,5061,5062],{"class":217},"\"二维数组第二行的首地址：\"",[102,5064,1157],{"class":108},[102,5066,113],{"class":112},[102,5068,116],{"class":108},[102,5070,5045],{"class":112},[102,5072,330],{"class":161},[102,5074,1053],{"class":112},[102,5076,1157],{"class":108},[102,5078,1180],{"class":112},[102,5080,5081,5083,5085,5088,5090,5092,5094,5096,5098,5100,5102,5104,5106,5108,5110,5112],{"class":104,"line":1183},[102,5082,1358],{"class":112},[102,5084,1157],{"class":108},[102,5086,5087],{"class":217},"\"二维数组第一个元素的首地址:\"",[102,5089,1157],{"class":108},[102,5091,113],{"class":112},[102,5093,116],{"class":108},[102,5095,542],{"class":112},[102,5097,466],{"class":108},[102,5099,3895],{"class":112},[102,5101,304],{"class":161},[102,5103,4890],{"class":112},[102,5105,304],{"class":161},[102,5107,1053],{"class":112},[102,5109,1157],{"class":108},[102,5111,1227],{"class":112},[102,5113,5114],{"class":171},"\u002F\u002F对于数，要加取址符\n",[5116,5117,5118],"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":23,"searchDepth":24,"depth":24,"links":5120},[5121,5122,5123,5131,5132,5138,5143],{"id":46,"depth":24,"text":47},{"id":53,"depth":24,"text":54},{"id":70,"depth":24,"text":71,"children":5124},[5125,5126,5127,5128,5129,5130],{"id":75,"depth":1168,"text":76},{"id":129,"depth":1168,"text":130},{"id":198,"depth":1168,"text":199},{"id":1138,"depth":1168,"text":1139},{"id":1233,"depth":1168,"text":1234},{"id":1332,"depth":1168,"text":1333},{"id":1374,"depth":24,"text":1375},{"id":1442,"depth":24,"text":1443,"children":5133},[5134,5135,5136,5137],{"id":1446,"depth":1168,"text":1447},{"id":1468,"depth":1168,"text":1469},{"id":1477,"depth":1168,"text":1478},{"id":1486,"depth":1168,"text":1487},{"id":1495,"depth":24,"text":1496,"children":5139},[5140,5141,5142],{"id":1499,"depth":1168,"text":1500},{"id":2194,"depth":1168,"text":2195},{"id":3610,"depth":1168,"text":3611},{"id":3751,"depth":24,"text":3752,"children":5144},[5145,5146],{"id":3755,"depth":1168,"text":3756},{"id":4783,"depth":1168,"text":4784},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":38,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5153,"title":5154,"body":5155,"description":23,"extension":28,"meta":6255,"navigation":30,"path":6256,"seo":6257,"stem":6258,"__hash__":6259},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5156,"toc":6247},[5157,5160,5164,5172,5180,5183,5249,5253,5256,5332,5336,5339,5342,5345,5558,5562,5567,5631,5636,5703,5708,5799,5802,5907,5911,5914,5920,6064,6068,6071,6085,6088,6133,6136,6244],[10,5158,5154],{"id":5159},"_2函数",[14,5161,5163],{"id":5162},"_21函数概述","2.1函数概述",[56,5165,5166,5169],{},[59,5167,5168],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[59,5170,5171],{},"语法：",[93,5173,5178],{"className":5174,"code":5176,"language":5177,"meta":23},[5175],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[99,5179,5176],{"__ignoreMap":23},[19,5181,5182],{},"小案例",[93,5184,5186],{"className":95,"code":5185,"language":97,"meta":23,"style":23},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[99,5187,5188,5193,5217,5221,5238,5245],{"__ignoreMap":23},[102,5189,5190],{"class":104,"line":105},[102,5191,5192],{"class":171},"\u002F\u002Fnum1,num2形参\n",[102,5194,5195,5197,5200,5202,5204,5208,5210,5212,5215],{"class":104,"line":24},[102,5196,116],{"class":108},[102,5198,5199],{"class":1952}," add",[102,5201,113],{"class":112},[102,5203,116],{"class":108},[102,5205,5207],{"class":5206},"s4XuR"," num1",[102,5209,491],{"class":112},[102,5211,116],{"class":108},[102,5213,5214],{"class":5206}," num2",[102,5216,119],{"class":112},[102,5218,5219],{"class":104,"line":1168},[102,5220,1535],{"class":112},[102,5222,5223,5225,5228,5230,5233,5235],{"class":104,"line":1183},[102,5224,1974],{"class":108},[102,5226,5227],{"class":112}," sum",[102,5229,158],{"class":108},[102,5231,5232],{"class":112},"num1",[102,5234,594],{"class":108},[102,5236,5237],{"class":112},"num2;\n",[102,5239,5240,5242],{"class":104,"line":1189},[102,5241,4079],{"class":108},[102,5243,5244],{"class":112}," sum;\n",[102,5246,5247],{"class":104,"line":1203},[102,5248,1554],{"class":112},[14,5250,5252],{"id":5251},"_22函数调用","2.2函数调用",[19,5254,5255],{},"调用刚刚写的求和函数",[93,5257,5259],{"className":95,"code":5258,"language":97,"meta":23,"style":23},"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",[99,5260,5261,5269,5273,5278,5290,5302,5311,5316,5328],{"__ignoreMap":23},[102,5262,5263,5265,5267],{"class":104,"line":105},[102,5264,116],{"class":108},[102,5266,1962],{"class":1952},[102,5268,1965],{"class":112},[102,5270,5271],{"class":104,"line":24},[102,5272,1535],{"class":112},[102,5274,5275],{"class":104,"line":1168},[102,5276,5277],{"class":171},"    \u002F\u002Fa,b实参\n",[102,5279,5280,5282,5284,5286,5288],{"class":104,"line":1183},[102,5281,1974],{"class":108},[102,5283,1387],{"class":112},[102,5285,158],{"class":108},[102,5287,304],{"class":161},[102,5289,1279],{"class":112},[102,5291,5292,5294,5296,5298,5300],{"class":104,"line":1189},[102,5293,1974],{"class":108},[102,5295,2822],{"class":112},[102,5297,158],{"class":108},[102,5299,304],{"class":161},[102,5301,1279],{"class":112},[102,5303,5304,5306,5308],{"class":104,"line":1203},[102,5305,2001],{"class":112},[102,5307,1418],{"class":108},[102,5309,5310],{"class":112},"a,b;\n",[102,5312,5313],{"class":104,"line":1209},[102,5314,5315],{"class":171},"    \u002F\u002F调用函数时，实参值传给了形参\n",[102,5317,5318,5320,5322,5325],{"class":104,"line":1300},[102,5319,1540],{"class":112},[102,5321,1157],{"class":108},[102,5323,5324],{"class":1952},"add",[102,5326,5327],{"class":112},"(a,b);\n",[102,5329,5330],{"class":104,"line":1306},[102,5331,1554],{"class":112},[14,5333,5335],{"id":5334},"_23值传递","2.3值传递",[19,5337,5338],{},"值传递就是函数调用时实参将数值传给形参",[19,5340,5341],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5343,5344],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[93,5346,5348],{"className":95,"code":5347,"language":97,"meta":23,"style":23},"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",[99,5349,5350,5372,5376,5389,5406,5424,5435,5444,5453,5466,5482,5498,5507,5511,5519,5523,5535,5547,5554],{"__ignoreMap":23},[102,5351,5352,5355,5358,5360,5362,5364,5366,5368,5370],{"class":104,"line":105},[102,5353,5354],{"class":108},"void",[102,5356,5357],{"class":1952}," swap",[102,5359,113],{"class":112},[102,5361,116],{"class":108},[102,5363,5207],{"class":5206},[102,5365,491],{"class":112},[102,5367,116],{"class":108},[102,5369,5214],{"class":5206},[102,5371,119],{"class":112},[102,5373,5374],{"class":104,"line":24},[102,5375,1535],{"class":112},[102,5377,5378,5380,5382,5385,5387],{"class":104,"line":1168},[102,5379,1540],{"class":112},[102,5381,1157],{"class":108},[102,5383,5384],{"class":217},"\"交换前：\"",[102,5386,1157],{"class":108},[102,5388,1180],{"class":112},[102,5390,5391,5393,5395,5398,5400,5402,5404],{"class":104,"line":1183},[102,5392,1540],{"class":112},[102,5394,1157],{"class":108},[102,5396,5397],{"class":217},"\"num1=\"",[102,5399,1157],{"class":108},[102,5401,5232],{"class":112},[102,5403,1157],{"class":108},[102,5405,1180],{"class":112},[102,5407,5408,5410,5412,5415,5417,5420,5422],{"class":104,"line":1189},[102,5409,1540],{"class":112},[102,5411,1157],{"class":108},[102,5413,5414],{"class":217},"\"num2=\"",[102,5416,1157],{"class":108},[102,5418,5419],{"class":112},"num2",[102,5421,1157],{"class":108},[102,5423,1180],{"class":112},[102,5425,5426,5428,5430,5432],{"class":104,"line":1203},[102,5427,1974],{"class":108},[102,5429,4244],{"class":112},[102,5431,158],{"class":108},[102,5433,5434],{"class":112},"num1;\n",[102,5436,5437,5440,5442],{"class":104,"line":1209},[102,5438,5439],{"class":112},"    num1",[102,5441,158],{"class":108},[102,5443,5237],{"class":112},[102,5445,5446,5449,5451],{"class":104,"line":1300},[102,5447,5448],{"class":112},"    num2",[102,5450,158],{"class":108},[102,5452,4269],{"class":112},[102,5454,5455,5457,5459,5462,5464],{"class":104,"line":1306},[102,5456,1540],{"class":112},[102,5458,1157],{"class":108},[102,5460,5461],{"class":217},"\"交换后：\"",[102,5463,1157],{"class":108},[102,5465,1180],{"class":112},[102,5467,5468,5470,5472,5474,5476,5478,5480],{"class":104,"line":1318},[102,5469,1540],{"class":112},[102,5471,1157],{"class":108},[102,5473,5397],{"class":217},[102,5475,1157],{"class":108},[102,5477,5232],{"class":112},[102,5479,1157],{"class":108},[102,5481,1180],{"class":112},[102,5483,5484,5486,5488,5490,5492,5494,5496],{"class":104,"line":1601},[102,5485,1540],{"class":112},[102,5487,1157],{"class":108},[102,5489,5414],{"class":217},[102,5491,1157],{"class":108},[102,5493,5419],{"class":112},[102,5495,1157],{"class":108},[102,5497,1180],{"class":112},[102,5499,5500,5502,5504],{"class":104,"line":1606},[102,5501,4079],{"class":108},[102,5503,168],{"class":112},[102,5505,5506],{"class":171},"\u002F\u002F或者不写\n",[102,5508,5509],{"class":104,"line":1612},[102,5510,1554],{"class":112},[102,5512,5513,5515,5517],{"class":104,"line":1617},[102,5514,116],{"class":108},[102,5516,1962],{"class":1952},[102,5518,1965],{"class":112},[102,5520,5521],{"class":104,"line":1631},[102,5522,1535],{"class":112},[102,5524,5525,5527,5529,5531,5533],{"class":104,"line":1636},[102,5526,1974],{"class":108},[102,5528,1387],{"class":112},[102,5530,158],{"class":108},[102,5532,559],{"class":161},[102,5534,1279],{"class":112},[102,5536,5537,5539,5541,5543,5545],{"class":104,"line":1642},[102,5538,1974],{"class":108},[102,5540,2822],{"class":112},[102,5542,158],{"class":108},[102,5544,813],{"class":161},[102,5546,1279],{"class":112},[102,5548,5549,5552],{"class":104,"line":1663},[102,5550,5551],{"class":1952},"    swap",[102,5553,5327],{"class":112},[102,5555,5556],{"class":104,"line":1668},[102,5557,1554],{"class":112},[14,5559,5561],{"id":5560},"_24函数的常见形式","2.4函数的常见形式",[56,5563,5564],{},[59,5565,5566],{},"无参无返",[93,5568,5570],{"className":95,"code":5569,"language":97,"meta":23,"style":23},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[99,5571,5572,5581,5585,5598,5602,5610,5614,5619,5627],{"__ignoreMap":23},[102,5573,5574,5576,5579],{"class":104,"line":105},[102,5575,5354],{"class":108},[102,5577,5578],{"class":1952}," test01",[102,5580,1965],{"class":112},[102,5582,5583],{"class":104,"line":24},[102,5584,1535],{"class":112},[102,5586,5587,5589,5591,5594,5596],{"class":104,"line":1168},[102,5588,1540],{"class":112},[102,5590,1157],{"class":108},[102,5592,5593],{"class":217},"\"你好\"",[102,5595,1157],{"class":108},[102,5597,1180],{"class":112},[102,5599,5600],{"class":104,"line":1183},[102,5601,1554],{"class":112},[102,5603,5604,5606,5608],{"class":104,"line":1189},[102,5605,116],{"class":108},[102,5607,1962],{"class":1952},[102,5609,1965],{"class":112},[102,5611,5612],{"class":104,"line":1203},[102,5613,1535],{"class":112},[102,5615,5616],{"class":104,"line":1209},[102,5617,5618],{"class":171},"    \u002F\u002F函数调用\n",[102,5620,5621,5624],{"class":104,"line":1300},[102,5622,5623],{"class":1952},"    test01",[102,5625,5626],{"class":112},"();\n",[102,5628,5629],{"class":104,"line":1306},[102,5630,1554],{"class":112},[56,5632,5633],{"start":24},[59,5634,5635],{},"有参无返",[93,5637,5639],{"className":95,"code":5638,"language":97,"meta":23,"style":23},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[99,5640,5641,5656,5660,5672,5676,5684,5688,5699],{"__ignoreMap":23},[102,5642,5643,5645,5648,5650,5652,5654],{"class":104,"line":105},[102,5644,5354],{"class":108},[102,5646,5647],{"class":1952}," test02",[102,5649,113],{"class":112},[102,5651,116],{"class":108},[102,5653,1387],{"class":5206},[102,5655,119],{"class":112},[102,5657,5658],{"class":104,"line":24},[102,5659,1535],{"class":112},[102,5661,5662,5664,5666,5668,5670],{"class":104,"line":1168},[102,5663,1540],{"class":112},[102,5665,1157],{"class":108},[102,5667,5593],{"class":217},[102,5669,1157],{"class":108},[102,5671,1180],{"class":112},[102,5673,5674],{"class":104,"line":1183},[102,5675,1554],{"class":112},[102,5677,5678,5680,5682],{"class":104,"line":1189},[102,5679,116],{"class":108},[102,5681,1962],{"class":1952},[102,5683,1965],{"class":112},[102,5685,5686],{"class":104,"line":1203},[102,5687,1535],{"class":112},[102,5689,5690,5693,5695,5697],{"class":104,"line":1209},[102,5691,5692],{"class":1952},"    test02",[102,5694,113],{"class":112},[102,5696,424],{"class":161},[102,5698,2708],{"class":112},[102,5700,5701],{"class":104,"line":1300},[102,5702,1554],{"class":112},[56,5704,5705],{"start":1168},[59,5706,5707],{},"无参有返",[93,5709,5711],{"className":95,"code":5710,"language":97,"meta":23,"style":23},"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",[99,5712,5713,5722,5726,5738,5747,5751,5759,5763,5776,5795],{"__ignoreMap":23},[102,5714,5715,5717,5720],{"class":104,"line":105},[102,5716,116],{"class":108},[102,5718,5719],{"class":1952}," test03",[102,5721,1965],{"class":112},[102,5723,5724],{"class":104,"line":24},[102,5725,1535],{"class":112},[102,5727,5728,5730,5732,5734,5736],{"class":104,"line":1168},[102,5729,1540],{"class":112},[102,5731,1157],{"class":108},[102,5733,5593],{"class":217},[102,5735,1157],{"class":108},[102,5737,1180],{"class":112},[102,5739,5740,5742,5745],{"class":104,"line":1183},[102,5741,4079],{"class":108},[102,5743,5744],{"class":161}," 100",[102,5746,1279],{"class":112},[102,5748,5749],{"class":104,"line":1189},[102,5750,1554],{"class":112},[102,5752,5753,5755,5757],{"class":104,"line":1203},[102,5754,116],{"class":108},[102,5756,1962],{"class":1952},[102,5758,1965],{"class":112},[102,5760,5761],{"class":104,"line":1209},[102,5762,1535],{"class":112},[102,5764,5765,5767,5769,5771,5774],{"class":104,"line":1300},[102,5766,1974],{"class":108},[102,5768,5207],{"class":112},[102,5770,158],{"class":108},[102,5772,5773],{"class":1952},"test03",[102,5775,5626],{"class":112},[102,5777,5778,5780,5782,5784,5786,5788,5790,5792],{"class":104,"line":1306},[102,5779,1540],{"class":112},[102,5781,1157],{"class":108},[102,5783,5397],{"class":217},[102,5785,1157],{"class":108},[102,5787,5232],{"class":112},[102,5789,1157],{"class":108},[102,5791,1227],{"class":112},[102,5793,5794],{"class":171}," \u002F\u002F100\n",[102,5796,5797],{"class":104,"line":1318},[102,5798,1554],{"class":112},[19,5800,5801],{},"4.有参有返",[93,5803,5805],{"className":95,"code":5804,"language":97,"meta":23,"style":23},"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",[99,5806,5807,5822,5826,5839,5845,5849,5858,5862,5874,5888,5903],{"__ignoreMap":23},[102,5808,5809,5811,5814,5816,5818,5820],{"class":104,"line":105},[102,5810,116],{"class":108},[102,5812,5813],{"class":1952}," test04",[102,5815,113],{"class":112},[102,5817,116],{"class":108},[102,5819,1387],{"class":5206},[102,5821,119],{"class":112},[102,5823,5824],{"class":104,"line":24},[102,5825,1535],{"class":112},[102,5827,5828,5830,5832,5835,5837],{"class":104,"line":1168},[102,5829,1540],{"class":112},[102,5831,1157],{"class":108},[102,5833,5834],{"class":217},"\"hello\"",[102,5836,1157],{"class":108},[102,5838,1180],{"class":112},[102,5840,5841,5843],{"class":104,"line":1183},[102,5842,4079],{"class":108},[102,5844,1421],{"class":112},[102,5846,5847],{"class":104,"line":1189},[102,5848,1554],{"class":112},[102,5850,5851,5853,5856],{"class":104,"line":1203},[102,5852,116],{"class":108},[102,5854,5855],{"class":1952}," mian",[102,5857,1965],{"class":112},[102,5859,5860],{"class":104,"line":1209},[102,5861,1535],{"class":112},[102,5863,5864,5866,5868,5870,5872],{"class":104,"line":1300},[102,5865,1974],{"class":108},[102,5867,2822],{"class":112},[102,5869,158],{"class":108},[102,5871,330],{"class":161},[102,5873,1279],{"class":112},[102,5875,5876,5878,5880,5882,5885],{"class":104,"line":1306},[102,5877,1974],{"class":108},[102,5879,2838],{"class":112},[102,5881,158],{"class":108},[102,5883,5884],{"class":1952},"test04",[102,5886,5887],{"class":112},"(b);\n",[102,5889,5890,5892,5894,5896,5898,5900],{"class":104,"line":1318},[102,5891,1540],{"class":112},[102,5893,1157],{"class":108},[102,5895,401],{"class":112},[102,5897,1157],{"class":108},[102,5899,1227],{"class":112},[102,5901,5902],{"class":171}," \u002F\u002F1\n",[102,5904,5905],{"class":104,"line":1601},[102,5906,1554],{"class":112},[14,5908,5910],{"id":5909},"_25函数的声明","2.5函数的声明",[19,5912,5913],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,5915,5916,5917],{},"函数的",[262,5918,5919],{},"声明可以多次，但是函数的定义只能有一次",[93,5921,5923],{"className":95,"code":5922,"language":97,"meta":23,"style":23},"\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",[99,5924,5925,5930,5935,5960,5969,5973,5985,5997,6013,6017,6037,6041,6060],{"__ignoreMap":23},[102,5926,5927],{"class":104,"line":105},[102,5928,5929],{"class":171},"\u002F\u002F函数声明\n",[102,5931,5932],{"class":104,"line":24},[102,5933,5934],{"class":171},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[102,5936,5937,5939,5942,5944,5946,5948,5950,5952,5954,5957],{"class":104,"line":1168},[102,5938,116],{"class":108},[102,5940,5941],{"class":1952}," max",[102,5943,113],{"class":112},[102,5945,116],{"class":108},[102,5947,1387],{"class":5206},[102,5949,491],{"class":112},[102,5951,116],{"class":108},[102,5953,2822],{"class":5206},[102,5955,5956],{"class":112},");",[102,5958,5959],{"class":171},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[102,5961,5962,5964,5966],{"class":104,"line":1183},[102,5963,116],{"class":108},[102,5965,1962],{"class":1952},[102,5967,5968],{"class":112},"() \n",[102,5970,5971],{"class":104,"line":1189},[102,5972,1535],{"class":112},[102,5974,5975,5977,5979,5981,5983],{"class":104,"line":1203},[102,5976,1974],{"class":108},[102,5978,1387],{"class":112},[102,5980,158],{"class":108},[102,5982,559],{"class":161},[102,5984,1279],{"class":112},[102,5986,5987,5989,5991,5993,5995],{"class":104,"line":1209},[102,5988,1974],{"class":108},[102,5990,2822],{"class":112},[102,5992,158],{"class":108},[102,5994,813],{"class":161},[102,5996,1279],{"class":112},[102,5998,5999,6001,6003,6006,6009,6011],{"class":104,"line":1300},[102,6000,1540],{"class":112},[102,6002,1157],{"class":108},[102,6004,6005],{"class":1952},"max",[102,6007,6008],{"class":112},"(a,b)",[102,6010,1157],{"class":108},[102,6012,1180],{"class":112},[102,6014,6015],{"class":104,"line":1306},[102,6016,1554],{"class":112},[102,6018,6019,6021,6023,6025,6027,6029,6031,6033,6035],{"class":104,"line":1318},[102,6020,116],{"class":108},[102,6022,5941],{"class":1952},[102,6024,113],{"class":112},[102,6026,116],{"class":108},[102,6028,1387],{"class":5206},[102,6030,491],{"class":112},[102,6032,116],{"class":108},[102,6034,2822],{"class":5206},[102,6036,119],{"class":112},[102,6038,6039],{"class":104,"line":1601},[102,6040,1535],{"class":112},[102,6042,6043,6045,6047,6049,6051,6053,6055,6057],{"class":104,"line":1606},[102,6044,4079],{"class":108},[102,6046,1387],{"class":112},[102,6048,1073],{"class":108},[102,6050,376],{"class":112},[102,6052,1099],{"class":108},[102,6054,351],{"class":112},[102,6056,972],{"class":108},[102,6058,6059],{"class":112},"b;\n",[102,6061,6062],{"class":104,"line":1612},[102,6063,1554],{"class":112},[14,6065,6067],{"id":6066},"_26函数的分文件编写","2.6函数的分文件编写",[19,6069,6070],{},"4个步骤：",[1120,6072,6073,6076,6079,6082],{},[59,6074,6075],{},"1.创建后缀名为.h的头文件",[59,6077,6078],{},"2.创建后缀名为.cpp的源文件",[59,6080,6081],{},"3.在头文件中写函数的定义",[59,6083,6084],{},"4.在源文件中写函数的定义\n示例：",[19,6086,6087],{},"头文件：swap.h",[93,6089,6091],{"className":95,"code":6090,"language":97,"meta":23,"style":23},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[99,6092,6093,6099,6109,6113],{"__ignoreMap":23},[102,6094,6095,6097],{"class":104,"line":105},[102,6096,1938],{"class":108},[102,6098,1941],{"class":217},[102,6100,6101,6103,6105,6107],{"class":104,"line":24},[102,6102,1946],{"class":108},[102,6104,1949],{"class":108},[102,6106,1953],{"class":1952},[102,6108,1279],{"class":112},[102,6110,6111],{"class":104,"line":1168},[102,6112,5929],{"class":171},[102,6114,6115,6117,6119,6121,6123,6125,6127,6129,6131],{"class":104,"line":1183},[102,6116,5354],{"class":108},[102,6118,5357],{"class":1952},[102,6120,113],{"class":112},[102,6122,116],{"class":108},[102,6124,1387],{"class":5206},[102,6126,491],{"class":112},[102,6128,116],{"class":108},[102,6130,2822],{"class":5206},[102,6132,2708],{"class":112},[19,6134,6135],{},"源文件：swap.cpp",[93,6137,6139],{"className":95,"code":6138,"language":97,"meta":23,"style":23},"#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",[99,6140,6141,6148,6153,6173,6177,6188,6197,6206,6223,6240],{"__ignoreMap":23},[102,6142,6143,6145],{"class":104,"line":105},[102,6144,1938],{"class":108},[102,6146,6147],{"class":217}," \"swap.h\"\n",[102,6149,6150],{"class":104,"line":24},[102,6151,6152],{"class":171},"\u002F\u002F函数的定义\n",[102,6154,6155,6157,6159,6161,6163,6165,6167,6169,6171],{"class":104,"line":1168},[102,6156,5354],{"class":108},[102,6158,5357],{"class":1952},[102,6160,113],{"class":112},[102,6162,116],{"class":108},[102,6164,1387],{"class":5206},[102,6166,491],{"class":112},[102,6168,116],{"class":108},[102,6170,2822],{"class":5206},[102,6172,119],{"class":112},[102,6174,6175],{"class":104,"line":1183},[102,6176,1535],{"class":112},[102,6178,6179,6181,6183,6185],{"class":104,"line":1189},[102,6180,1974],{"class":108},[102,6182,4244],{"class":112},[102,6184,158],{"class":108},[102,6186,6187],{"class":112},"a;\n",[102,6189,6190,6193,6195],{"class":104,"line":1203},[102,6191,6192],{"class":112},"    a",[102,6194,158],{"class":108},[102,6196,6059],{"class":112},[102,6198,6199,6202,6204],{"class":104,"line":1209},[102,6200,6201],{"class":112},"    b",[102,6203,158],{"class":108},[102,6205,4269],{"class":112},[102,6207,6208,6210,6212,6215,6217,6219,6221],{"class":104,"line":1300},[102,6209,1540],{"class":112},[102,6211,1157],{"class":108},[102,6213,6214],{"class":217},"\"a=\"",[102,6216,1157],{"class":108},[102,6218,351],{"class":112},[102,6220,1157],{"class":108},[102,6222,1180],{"class":112},[102,6224,6225,6227,6229,6232,6234,6236,6238],{"class":104,"line":1306},[102,6226,1540],{"class":112},[102,6228,1157],{"class":108},[102,6230,6231],{"class":217},"\"b=\"",[102,6233,1157],{"class":108},[102,6235,376],{"class":112},[102,6237,1157],{"class":108},[102,6239,1180],{"class":112},[102,6241,6242],{"class":104,"line":1318},[102,6243,1554],{"class":112},[5116,6245,6246],{},"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":23,"searchDepth":24,"depth":24,"links":6248},[6249,6250,6251,6252,6253,6254],{"id":5162,"depth":24,"text":5163},{"id":5251,"depth":24,"text":5252},{"id":5334,"depth":24,"text":5335},{"id":5560,"depth":24,"text":5561},{"id":5909,"depth":24,"text":5910},{"id":6066,"depth":24,"text":6067},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5154,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6261,"title":6262,"body":6263,"description":6270,"extension":28,"meta":7675,"navigation":30,"path":7676,"seo":7677,"stem":7678,"__hash__":7679},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6264,"toc":7665},[6265,6268,6271,6275,6437,6441,6444,6447,6450,6453,6593,6597,6600,6603,6606,6671,6675,6680,6747,6750,6754,6757,6768,6773,6793,6796,6801,6820,6823,6827,6846,6849,6853,7088,7092,7095,7098,7101,7263,7266,7270,7273,7279,7662],[10,6266,6262],{"id":6267},"_3指针",[19,6269,6270],{},"通过指针保存一个地址，指针就是个地址",[14,6272,6274],{"id":6273},"_31定义指针","3.1定义指针",[93,6276,6278],{"className":95,"code":6277,"language":97,"meta":23,"style":23},"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",[99,6279,6280,6288,6292,6297,6309,6314,6322,6332,6350,6370,6374,6379,6384,6389,6403,6419,6433],{"__ignoreMap":23},[102,6281,6282,6284,6286],{"class":104,"line":105},[102,6283,116],{"class":108},[102,6285,1962],{"class":1952},[102,6287,1965],{"class":112},[102,6289,6290],{"class":104,"line":24},[102,6291,1535],{"class":112},[102,6293,6294],{"class":104,"line":1168},[102,6295,6296],{"class":171},"    \u002F\u002F1.定义指针\n",[102,6298,6299,6301,6303,6305,6307],{"class":104,"line":1183},[102,6300,1974],{"class":108},[102,6302,1387],{"class":112},[102,6304,158],{"class":108},[102,6306,559],{"class":161},[102,6308,1279],{"class":112},[102,6310,6311],{"class":104,"line":1189},[102,6312,6313],{"class":171},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[102,6315,6316,6319],{"class":104,"line":1203},[102,6317,6318],{"class":108},"    int*",[102,6320,6321],{"class":112},"p;\n",[102,6323,6324,6327,6330],{"class":104,"line":1209},[102,6325,6326],{"class":112},"    p",[102,6328,6329],{"class":108},"=&",[102,6331,6187],{"class":112},[102,6333,6334,6336,6338,6341,6344,6346,6348],{"class":104,"line":1300},[102,6335,1540],{"class":112},[102,6337,1157],{"class":108},[102,6339,6340],{"class":217},"\"a的地址为：\"",[102,6342,6343],{"class":108},"\u003C\u003C&",[102,6345,351],{"class":112},[102,6347,1157],{"class":108},[102,6349,1180],{"class":112},[102,6351,6352,6354,6356,6359,6361,6363,6365,6367],{"class":104,"line":1306},[102,6353,1540],{"class":112},[102,6355,1157],{"class":108},[102,6357,6358],{"class":217},"\"指针p为：\"",[102,6360,1157],{"class":108},[102,6362,19],{"class":112},[102,6364,1157],{"class":108},[102,6366,1227],{"class":112},[102,6368,6369],{"class":171},"\u002F\u002F指针p表示的就是a的地址\n",[102,6371,6372],{"class":104,"line":1318},[102,6373,2389],{"emptyLinePlaceholder":30},[102,6375,6376],{"class":104,"line":1601},[102,6377,6378],{"class":171},"    \u002F\u002F2.使用指针\n",[102,6380,6381],{"class":104,"line":1606},[102,6382,6383],{"class":171},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[102,6385,6386],{"class":104,"line":1612},[102,6387,6388],{"class":171},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[102,6390,6391,6394,6396,6398,6401],{"class":104,"line":1617},[102,6392,6393],{"class":108},"    *",[102,6395,19],{"class":112},[102,6397,158],{"class":108},[102,6399,6400],{"class":161},"1000",[102,6402,1279],{"class":112},[102,6404,6405,6407,6410,6412,6414,6416],{"class":104,"line":1631},[102,6406,1540],{"class":112},[102,6408,6409],{"class":108},"\u003C\u003C*",[102,6411,19],{"class":112},[102,6413,1157],{"class":108},[102,6415,1227],{"class":112},[102,6417,6418],{"class":171},"\u002F\u002F1000\n",[102,6420,6421,6423,6425,6427,6429,6431],{"class":104,"line":1636},[102,6422,1540],{"class":112},[102,6424,1157],{"class":108},[102,6426,351],{"class":112},[102,6428,1157],{"class":108},[102,6430,1227],{"class":112},[102,6432,6418],{"class":171},[102,6434,6435],{"class":104,"line":1642},[102,6436,1554],{"class":112},[14,6438,6440],{"id":6439},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6442,6443],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6445,6446],{},"在32位操作系统下：占用4个字节空间",[19,6448,6449],{},"在64位操作系统下：占用8个字节空间",[19,6451,6452],{},"上方是不管啥数据类型的",[93,6454,6456],{"className":95,"code":6455,"language":97,"meta":23,"style":23},"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",[99,6457,6458,6466,6470,6475,6487,6492,6497,6502,6515,6537,6563,6589],{"__ignoreMap":23},[102,6459,6460,6462,6464],{"class":104,"line":105},[102,6461,116],{"class":108},[102,6463,1962],{"class":1952},[102,6465,1965],{"class":112},[102,6467,6468],{"class":104,"line":24},[102,6469,1535],{"class":112},[102,6471,6472],{"class":104,"line":1168},[102,6473,6474],{"class":171},"    \u002F\u002F指针所占内存空间\n",[102,6476,6477,6479,6481,6483,6485],{"class":104,"line":1183},[102,6478,1974],{"class":108},[102,6480,1387],{"class":112},[102,6482,158],{"class":108},[102,6484,559],{"class":161},[102,6486,1279],{"class":112},[102,6488,6489],{"class":104,"line":1189},[102,6490,6491],{"class":171},"    \u002F\u002Fint *p;\n",[102,6493,6494],{"class":104,"line":1203},[102,6495,6496],{"class":171},"    \u002F\u002Fp=&a;\n",[102,6498,6499],{"class":104,"line":1209},[102,6500,6501],{"class":171},"    \u002F\u002F上述可以写为以下：\n",[102,6503,6504,6506,6509,6511,6513],{"class":104,"line":1300},[102,6505,1974],{"class":108},[102,6507,6508],{"class":108}," *",[102,6510,19],{"class":112},[102,6512,6329],{"class":108},[102,6514,6187],{"class":112},[102,6516,6517,6520,6522,6525,6527,6530,6532,6534],{"class":104,"line":1306},[102,6518,6519],{"class":112},"    cout ",[102,6521,1157],{"class":108},[102,6523,6524],{"class":217},"\"sizeof(int *)\"",[102,6526,1361],{"class":108},[102,6528,6529],{"class":112},"(p)",[102,6531,1157],{"class":108},[102,6533,1227],{"class":112},[102,6535,6536],{"class":171},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[102,6538,6539,6541,6543,6545,6547,6549,6551,6553,6555,6557,6560],{"class":104,"line":1318},[102,6540,6519],{"class":112},[102,6542,1157],{"class":108},[102,6544,6524],{"class":217},[102,6546,1361],{"class":108},[102,6548,113],{"class":112},[102,6550,116],{"class":108},[102,6552,6508],{"class":108},[102,6554,542],{"class":112},[102,6556,1157],{"class":108},[102,6558,6559],{"class":112},"endl",[102,6561,6562],{"class":171},"  \u002F\u002F4字节(32位的话)\n",[102,6564,6565,6567,6569,6572,6574,6576,6578,6580,6582,6584,6586],{"class":104,"line":1601},[102,6566,6519],{"class":112},[102,6568,1157],{"class":108},[102,6570,6571],{"class":217},"\"sizeof(char *)\"",[102,6573,1361],{"class":108},[102,6575,113],{"class":112},[102,6577,209],{"class":108},[102,6579,6508],{"class":108},[102,6581,542],{"class":112},[102,6583,1157],{"class":108},[102,6585,1227],{"class":112},[102,6587,6588],{"class":171}," \u002F\u002F4字节(32位的话)\n",[102,6590,6591],{"class":104,"line":1606},[102,6592,1554],{"class":112},[14,6594,6596],{"id":6595},"_33空指针","3.3空指针",[19,6598,6599],{},"空指针：指针变量指向内存中编号为0的空间",[19,6601,6602],{},"用途：初始化指针变量",[19,6604,6605],{},"注意：空指针指向的内存是不可以访问的",[93,6607,6609],{"className":95,"code":6608,"language":97,"meta":23,"style":23},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[99,6610,6611,6619,6623,6628,6642,6647,6662,6667],{"__ignoreMap":23},[102,6612,6613,6615,6617],{"class":104,"line":105},[102,6614,116],{"class":108},[102,6616,1962],{"class":1952},[102,6618,1965],{"class":112},[102,6620,6621],{"class":104,"line":24},[102,6622,1535],{"class":112},[102,6624,6625],{"class":104,"line":1168},[102,6626,6627],{"class":171},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[102,6629,6630,6632,6634,6636,6638,6640],{"class":104,"line":1183},[102,6631,1974],{"class":108},[102,6633,6508],{"class":108},[102,6635,19],{"class":112},[102,6637,158],{"class":108},[102,6639,2381],{"class":161},[102,6641,1279],{"class":112},[102,6643,6644],{"class":104,"line":1189},[102,6645,6646],{"class":171},"    \u002F\u002F2.空指针不能进行访问\n",[102,6648,6649,6651,6653,6655,6657,6659],{"class":104,"line":1203},[102,6650,6393],{"class":108},[102,6652,19],{"class":112},[102,6654,158],{"class":108},[102,6656,424],{"class":161},[102,6658,168],{"class":112},[102,6660,6661],{"class":171},"\u002F\u002F直接报错，压根不能访问\n",[102,6663,6664],{"class":104,"line":1209},[102,6665,6666],{"class":171},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[102,6668,6669],{"class":104,"line":1300},[102,6670,1554],{"class":112},[14,6672,6674],{"id":6673},"_34野指针","3.4野指针",[19,6676,6677],{},[262,6678,6679],{},"指针变量指向非法的内存空间",[93,6681,6683],{"className":95,"code":6682,"language":97,"meta":23,"style":23},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[99,6684,6685,6693,6697,6726,6731,6743],{"__ignoreMap":23},[102,6686,6687,6689,6691],{"class":104,"line":105},[102,6688,116],{"class":108},[102,6690,1962],{"class":1952},[102,6692,1965],{"class":112},[102,6694,6695],{"class":104,"line":24},[102,6696,1535],{"class":112},[102,6698,6699,6701,6703,6705,6707,6709,6711,6713,6715,6718,6721,6723],{"class":104,"line":1168},[102,6700,1974],{"class":108},[102,6702,6508],{"class":108},[102,6704,19],{"class":112},[102,6706,158],{"class":108},[102,6708,113],{"class":112},[102,6710,116],{"class":108},[102,6712,6508],{"class":108},[102,6714,542],{"class":112},[102,6716,6717],{"class":108},"0x",[102,6719,6720],{"class":161},"1100",[102,6722,168],{"class":112},[102,6724,6725],{"class":171}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[102,6727,6728],{"class":104,"line":1183},[102,6729,6730],{"class":171},"    \u002F\u002F访问野指针报错\n",[102,6732,6733,6735,6737,6739,6741],{"class":104,"line":1189},[102,6734,1540],{"class":112},[102,6736,6409],{"class":108},[102,6738,19],{"class":112},[102,6740,1157],{"class":108},[102,6742,1180],{"class":112},[102,6744,6745],{"class":104,"line":1203},[102,6746,1554],{"class":112},[19,6748,6749],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6751,6753],{"id":6752},"_35const修饰指针","3.5const修饰指针",[19,6755,6756],{},"三种情况：",[1120,6758,6759,6762,6765],{},[59,6760,6761],{},"const修饰指针 常量指针",[59,6763,6764],{},"const修饰常量 指针常量",[59,6766,6767],{},"const即修饰指针，又修饰常量",[56,6769,6770],{},[59,6771,6772],{},"常量指针",[93,6774,6776],{"className":95,"code":6775,"language":97,"meta":23,"style":23},"const int *p=&a;\n",[99,6777,6778],{"__ignoreMap":23},[102,6779,6780,6783,6785,6787,6789,6791],{"class":104,"line":105},[102,6781,6782],{"class":108},"const",[102,6784,2371],{"class":108},[102,6786,6508],{"class":108},[102,6788,19],{"class":112},[102,6790,6329],{"class":108},[102,6792,6187],{"class":112},[19,6794,6795],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[56,6797,6798],{"start":24},[59,6799,6800],{},"指针常量",[93,6802,6804],{"className":95,"code":6803,"language":97,"meta":23,"style":23},"int *const p=&a;\n",[99,6805,6806],{"__ignoreMap":23},[102,6807,6808,6810,6813,6816,6818],{"class":104,"line":105},[102,6809,116],{"class":108},[102,6811,6812],{"class":108}," *const",[102,6814,6815],{"class":112}," p",[102,6817,6329],{"class":108},[102,6819,6187],{"class":112},[19,6821,6822],{},"指针的指向不可以改，指针指向的值可以改",[56,6824,6825],{"start":1168},[59,6826,6767],{},[93,6828,6830],{"className":95,"code":6829,"language":97,"meta":23,"style":23},"const int *const p=&a;\n",[99,6831,6832],{"__ignoreMap":23},[102,6833,6834,6836,6838,6840,6842,6844],{"class":104,"line":105},[102,6835,6782],{"class":108},[102,6837,2371],{"class":108},[102,6839,6812],{"class":108},[102,6841,6815],{"class":112},[102,6843,6329],{"class":108},[102,6845,6187],{"class":112},[19,6847,6848],{},"指针的指向和指针指向的值都不可以改变",[14,6850,6852],{"id":6851},"_36指针和数组","3.6指针和数组",[93,6854,6856],{"className":95,"code":6855,"language":97,"meta":23,"style":23},"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",[99,6857,6858,6866,6870,6875,6929,6950,6966,6982,6993,7010,7015,7029,7055,7059,7071,7080,7084],{"__ignoreMap":23},[102,6859,6860,6862,6864],{"class":104,"line":105},[102,6861,116],{"class":108},[102,6863,1962],{"class":1952},[102,6865,1965],{"class":112},[102,6867,6868],{"class":104,"line":24},[102,6869,1535],{"class":112},[102,6871,6872],{"class":104,"line":1168},[102,6873,6874],{"class":171},"    \u002F\u002F利用指针访问数组中的元素\n",[102,6876,6877,6879,6881,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6917,6919,6921,6923,6925,6927],{"class":104,"line":1183},[102,6878,1974],{"class":108},[102,6880,3951],{"class":112},[102,6882,559],{"class":161},[102,6884,1053],{"class":112},[102,6886,158],{"class":108},[102,6888,1009],{"class":112},[102,6890,330],{"class":161},[102,6892,491],{"class":112},[102,6894,190],{"class":161},[102,6896,491],{"class":112},[102,6898,184],{"class":161},[102,6900,491],{"class":112},[102,6902,406],{"class":161},[102,6904,491],{"class":112},[102,6906,432],{"class":161},[102,6908,491],{"class":112},[102,6910,457],{"class":161},[102,6912,491],{"class":112},[102,6914,482],{"class":161},[102,6916,491],{"class":112},[102,6918,508],{"class":161},[102,6920,491],{"class":112},[102,6922,533],{"class":161},[102,6924,491],{"class":112},[102,6926,559],{"class":161},[102,6928,3984],{"class":112},[102,6930,6931,6933,6935,6938,6940,6942,6944,6946,6948],{"class":104,"line":1189},[102,6932,1540],{"class":112},[102,6934,1157],{"class":108},[102,6936,6937],{"class":217},"\"数组的第一个元素为：\"",[102,6939,1157],{"class":108},[102,6941,3895],{"class":112},[102,6943,304],{"class":161},[102,6945,1053],{"class":112},[102,6947,1157],{"class":108},[102,6949,1180],{"class":112},[102,6951,6952,6954,6956,6958,6960,6963],{"class":104,"line":1203},[102,6953,1974],{"class":108},[102,6955,6508],{"class":108},[102,6957,19],{"class":112},[102,6959,158],{"class":108},[102,6961,6962],{"class":112},"arr;",[102,6964,6965],{"class":171},"\u002F\u002F注意数才要加取地址符号&\n",[102,6967,6968,6970,6972,6974,6976,6978,6980],{"class":104,"line":1209},[102,6969,1540],{"class":112},[102,6971,1157],{"class":108},[102,6973,6937],{"class":217},[102,6975,6409],{"class":108},[102,6977,19],{"class":112},[102,6979,1157],{"class":108},[102,6981,1180],{"class":112},[102,6983,6984,6986,6988,6990],{"class":104,"line":1300},[102,6985,6326],{"class":112},[102,6987,2281],{"class":108},[102,6989,168],{"class":112},[102,6991,6992],{"class":171}," \u002F\u002F让指针向后偏移4个字节\n",[102,6994,6995,6997,6999,7002,7004,7006,7008],{"class":104,"line":1306},[102,6996,1540],{"class":112},[102,6998,1157],{"class":108},[102,7000,7001],{"class":217},"\"数组的第二个元素为：\"",[102,7003,6409],{"class":108},[102,7005,19],{"class":112},[102,7007,1157],{"class":108},[102,7009,1180],{"class":112},[102,7011,7012],{"class":104,"line":1318},[102,7013,7014],{"class":171},"    \u002F\u002F利用指针遍历数组\n",[102,7016,7017,7019,7021,7024,7026],{"class":104,"line":1601},[102,7018,1974],{"class":108},[102,7020,6508],{"class":108},[102,7022,7023],{"class":112},"p2",[102,7025,158],{"class":108},[102,7027,7028],{"class":112},"arr;\n",[102,7030,7031,7033,7035,7037,7039,7041,7043,7045,7047,7049,7051,7053],{"class":104,"line":1606},[102,7032,3190],{"class":108},[102,7034,1647],{"class":112},[102,7036,116],{"class":108},[102,7038,3021],{"class":112},[102,7040,158],{"class":108},[102,7042,304],{"class":161},[102,7044,3028],{"class":112},[102,7046,1023],{"class":108},[102,7048,559],{"class":161},[102,7050,3028],{"class":112},[102,7052,2281],{"class":108},[102,7054,119],{"class":112},[102,7056,7057],{"class":104,"line":1612},[102,7058,2019],{"class":112},[102,7060,7061,7063,7065,7067,7069],{"class":104,"line":1617},[102,7062,3440],{"class":112},[102,7064,6409],{"class":108},[102,7066,7023],{"class":112},[102,7068,1157],{"class":108},[102,7070,1180],{"class":112},[102,7072,7073,7076,7078],{"class":104,"line":1631},[102,7074,7075],{"class":112},"        p2",[102,7077,2281],{"class":108},[102,7079,1279],{"class":112},[102,7081,7082],{"class":104,"line":1636},[102,7083,2176],{"class":112},[102,7085,7086],{"class":104,"line":1642},[102,7087,1554],{"class":112},[14,7089,7091],{"id":7090},"_37指针和函数","3.7指针和函数",[19,7093,7094],{},"利用指针做函数参数，可以修改实参的值",[19,7096,7097],{},"值传递：只改变形参，不改变实参",[19,7099,7100],{},"地址传递：",[93,7102,7104],{"className":95,"code":7103,"language":97,"meta":23,"style":23},"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",[99,7105,7106,7131,7135,7147,7158,7168,7172,7180,7184,7196,7208,7213,7229,7244,7259],{"__ignoreMap":23},[102,7107,7108,7110,7112,7114,7116,7118,7121,7123,7125,7127,7129],{"class":104,"line":105},[102,7109,5354],{"class":108},[102,7111,5357],{"class":1952},[102,7113,113],{"class":112},[102,7115,116],{"class":108},[102,7117,6508],{"class":108},[102,7119,7120],{"class":5206},"p1",[102,7122,491],{"class":112},[102,7124,116],{"class":108},[102,7126,6508],{"class":108},[102,7128,7023],{"class":5206},[102,7130,119],{"class":112},[102,7132,7133],{"class":104,"line":24},[102,7134,1535],{"class":112},[102,7136,7137,7139,7141,7144],{"class":104,"line":1168},[102,7138,1974],{"class":108},[102,7140,4244],{"class":112},[102,7142,7143],{"class":108},"=*",[102,7145,7146],{"class":112},"p1;\n",[102,7148,7149,7151,7153,7155],{"class":104,"line":1183},[102,7150,6393],{"class":108},[102,7152,7120],{"class":112},[102,7154,7143],{"class":108},[102,7156,7157],{"class":112},"p2;\n",[102,7159,7160,7162,7164,7166],{"class":104,"line":1189},[102,7161,6393],{"class":108},[102,7163,7023],{"class":112},[102,7165,158],{"class":108},[102,7167,4269],{"class":112},[102,7169,7170],{"class":104,"line":1203},[102,7171,1554],{"class":112},[102,7173,7174,7176,7178],{"class":104,"line":1209},[102,7175,116],{"class":108},[102,7177,1962],{"class":1952},[102,7179,1965],{"class":112},[102,7181,7182],{"class":104,"line":1300},[102,7183,1535],{"class":112},[102,7185,7186,7188,7190,7192,7194],{"class":104,"line":1306},[102,7187,1974],{"class":108},[102,7189,1387],{"class":112},[102,7191,158],{"class":108},[102,7193,559],{"class":161},[102,7195,1279],{"class":112},[102,7197,7198,7200,7202,7204,7206],{"class":104,"line":1318},[102,7199,1974],{"class":108},[102,7201,2822],{"class":112},[102,7203,158],{"class":108},[102,7205,813],{"class":161},[102,7207,1279],{"class":112},[102,7209,7210],{"class":104,"line":1601},[102,7211,7212],{"class":171},"    \u002F\u002F地址传递\n",[102,7214,7215,7217,7219,7221,7224,7226],{"class":104,"line":1606},[102,7216,5551],{"class":1952},[102,7218,113],{"class":112},[102,7220,466],{"class":108},[102,7222,7223],{"class":112},"a,",[102,7225,466],{"class":108},[102,7227,7228],{"class":112},"b);\n",[102,7230,7231,7233,7235,7237,7239,7241],{"class":104,"line":1612},[102,7232,1540],{"class":112},[102,7234,1157],{"class":108},[102,7236,351],{"class":112},[102,7238,1157],{"class":108},[102,7240,1227],{"class":112},[102,7242,7243],{"class":171},"\u002F\u002F20\n",[102,7245,7246,7248,7250,7252,7254,7256],{"class":104,"line":1617},[102,7247,1540],{"class":112},[102,7249,1157],{"class":108},[102,7251,376],{"class":112},[102,7253,1157],{"class":108},[102,7255,1227],{"class":112},[102,7257,7258],{"class":171},"\u002F\u002F10\n",[102,7260,7261],{"class":104,"line":1631},[102,7262,1554],{"class":112},[19,7264,7265],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7267,7269],{"id":7268},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7271,7272],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7274,7275,7276,7278],{},"例如数组：int arr",[102,7277,559],{},"={4,3,6,9,1,2,10,8,7,5}",[93,7280,7282],{"className":95,"code":7281,"language":97,"meta":23,"style":23},"#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",[99,7283,7284,7290,7300,7324,7328,7359,7363,7397,7401,7419,7423,7434,7449,7464,7468,7472,7476,7480,7484,7492,7496,7501,7555,7567,7579,7584,7592,7596,7601,7626,7630,7645,7654,7658],{"__ignoreMap":23},[102,7285,7286,7288],{"class":104,"line":105},[102,7287,1938],{"class":108},[102,7289,1941],{"class":217},[102,7291,7292,7294,7296,7298],{"class":104,"line":24},[102,7293,1946],{"class":108},[102,7295,1949],{"class":108},[102,7297,1953],{"class":1952},[102,7299,1279],{"class":112},[102,7301,7302,7304,7307,7309,7311,7313,7315,7317,7319,7322],{"class":104,"line":1168},[102,7303,5354],{"class":108},[102,7305,7306],{"class":1952}," bubbleSort",[102,7308,113],{"class":112},[102,7310,116],{"class":108},[102,7312,6508],{"class":108},[102,7314,19],{"class":5206},[102,7316,491],{"class":112},[102,7318,116],{"class":108},[102,7320,7321],{"class":5206}," len",[102,7323,119],{"class":112},[102,7325,7326],{"class":104,"line":1183},[102,7327,1535],{"class":112},[102,7329,7330,7332,7334,7336,7338,7340,7342,7344,7346,7349,7351,7353,7355,7357],{"class":104,"line":1189},[102,7331,3190],{"class":108},[102,7333,113],{"class":112},[102,7335,116],{"class":108},[102,7337,3021],{"class":112},[102,7339,158],{"class":108},[102,7341,304],{"class":161},[102,7343,3028],{"class":112},[102,7345,1023],{"class":108},[102,7347,7348],{"class":112},"len",[102,7350,645],{"class":108},[102,7352,330],{"class":161},[102,7354,3028],{"class":112},[102,7356,2281],{"class":108},[102,7358,119],{"class":112},[102,7360,7361],{"class":104,"line":1203},[102,7362,2019],{"class":112},[102,7364,7365,7367,7369,7371,7373,7375,7377,7379,7381,7383,7385,7387,7389,7391,7393,7395],{"class":104,"line":1209},[102,7366,3392],{"class":108},[102,7368,113],{"class":112},[102,7370,116],{"class":108},[102,7372,3399],{"class":112},[102,7374,158],{"class":108},[102,7376,304],{"class":161},[102,7378,3406],{"class":112},[102,7380,1023],{"class":108},[102,7382,7348],{"class":112},[102,7384,645],{"class":108},[102,7386,554],{"class":112},[102,7388,645],{"class":108},[102,7390,330],{"class":161},[102,7392,3406],{"class":112},[102,7394,2281],{"class":108},[102,7396,119],{"class":112},[102,7398,7399],{"class":104,"line":1300},[102,7400,2499],{"class":112},[102,7402,7403,7405,7408,7410,7413,7415,7417],{"class":104,"line":1306},[102,7404,4631],{"class":108},[102,7406,7407],{"class":112},"(p[j]",[102,7409,1073],{"class":108},[102,7411,7412],{"class":112},"p[j",[102,7414,594],{"class":108},[102,7416,330],{"class":161},[102,7418,4646],{"class":112},[102,7420,7421],{"class":104,"line":1318},[102,7422,4651],{"class":112},[102,7424,7425,7427,7429,7431],{"class":104,"line":1601},[102,7426,4656],{"class":108},[102,7428,4244],{"class":112},[102,7430,158],{"class":108},[102,7432,7433],{"class":112},"p[j];\n",[102,7435,7436,7439,7441,7443,7445,7447],{"class":104,"line":1606},[102,7437,7438],{"class":112},"                p[j]",[102,7440,158],{"class":108},[102,7442,7412],{"class":112},[102,7444,594],{"class":108},[102,7446,330],{"class":161},[102,7448,4679],{"class":112},[102,7450,7451,7454,7456,7458,7460,7462],{"class":104,"line":1612},[102,7452,7453],{"class":112},"                p[j",[102,7455,594],{"class":108},[102,7457,330],{"class":161},[102,7459,1053],{"class":112},[102,7461,158],{"class":108},[102,7463,4269],{"class":112},[102,7465,7466],{"class":104,"line":1617},[102,7467,4699],{"class":112},[102,7469,7470],{"class":104,"line":1631},[102,7471,2518],{"class":112},[102,7473,7474],{"class":104,"line":1636},[102,7475,2176],{"class":112},[102,7477,7478],{"class":104,"line":1642},[102,7479,1554],{"class":112},[102,7481,7482],{"class":104,"line":1663},[102,7483,2389],{"emptyLinePlaceholder":30},[102,7485,7486,7488,7490],{"class":104,"line":1668},[102,7487,116],{"class":108},[102,7489,1962],{"class":1952},[102,7491,1965],{"class":112},[102,7493,7494],{"class":104,"line":1682},[102,7495,1535],{"class":112},[102,7497,7498],{"class":104,"line":1687},[102,7499,7500],{"class":171},"    \u002F\u002F 1.创建数组\n",[102,7502,7503,7505,7507,7509,7511,7513,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551,7553],{"class":104,"line":1716},[102,7504,1974],{"class":108},[102,7506,3951],{"class":112},[102,7508,559],{"class":161},[102,7510,1053],{"class":112},[102,7512,158],{"class":108},[102,7514,1009],{"class":112},[102,7516,406],{"class":161},[102,7518,491],{"class":112},[102,7520,184],{"class":161},[102,7522,491],{"class":112},[102,7524,457],{"class":161},[102,7526,491],{"class":112},[102,7528,533],{"class":161},[102,7530,491],{"class":112},[102,7532,330],{"class":161},[102,7534,491],{"class":112},[102,7536,190],{"class":161},[102,7538,491],{"class":112},[102,7540,559],{"class":161},[102,7542,491],{"class":112},[102,7544,508],{"class":161},[102,7546,491],{"class":112},[102,7548,482],{"class":161},[102,7550,491],{"class":112},[102,7552,432],{"class":161},[102,7554,3984],{"class":112},[102,7556,7557,7559,7561,7563,7565],{"class":104,"line":1721},[102,7558,1974],{"class":108},[102,7560,7321],{"class":112},[102,7562,158],{"class":108},[102,7564,559],{"class":161},[102,7566,1279],{"class":112},[102,7568,7569,7571,7573,7575,7577],{"class":104,"line":1738},[102,7570,1974],{"class":108},[102,7572,6508],{"class":108},[102,7574,19],{"class":112},[102,7576,158],{"class":108},[102,7578,7028],{"class":112},[102,7580,7581],{"class":104,"line":1743},[102,7582,7583],{"class":171},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[102,7585,7586,7589],{"class":104,"line":1748},[102,7587,7588],{"class":1952},"    bubbleSort",[102,7590,7591],{"class":112},"(p,len);\n",[102,7593,7594],{"class":104,"line":1753},[102,7595,2389],{"emptyLinePlaceholder":30},[102,7597,7598],{"class":104,"line":1767},[102,7599,7600],{"class":171},"    \u002F\u002F 3.打印排序后的数组\n",[102,7602,7603,7605,7607,7609,7611,7613,7615,7617,7619,7622,7624],{"class":104,"line":1772},[102,7604,3190],{"class":108},[102,7606,1647],{"class":112},[102,7608,116],{"class":108},[102,7610,3021],{"class":112},[102,7612,158],{"class":108},[102,7614,304],{"class":161},[102,7616,3203],{"class":112},[102,7618,1023],{"class":108},[102,7620,7621],{"class":112},"len; i",[102,7623,2281],{"class":108},[102,7625,119],{"class":112},[102,7627,7628],{"class":104,"line":2566},[102,7629,2019],{"class":112},[102,7631,7632,7634,7636,7638,7640,7643],{"class":104,"line":2580},[102,7633,3440],{"class":112},[102,7635,6409],{"class":108},[102,7637,19],{"class":112},[102,7639,1157],{"class":108},[102,7641,7642],{"class":217},"\"\"",[102,7644,1279],{"class":112},[102,7646,7647,7650,7652],{"class":104,"line":2588},[102,7648,7649],{"class":112},"        p",[102,7651,2281],{"class":108},[102,7653,1279],{"class":112},[102,7655,7656],{"class":104,"line":2593},[102,7657,2176],{"class":112},[102,7659,7660],{"class":104,"line":2599},[102,7661,1554],{"class":112},[5116,7663,7664],{},"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":23,"searchDepth":24,"depth":24,"links":7666},[7667,7668,7669,7670,7671,7672,7673,7674],{"id":6273,"depth":24,"text":6274},{"id":6439,"depth":24,"text":6440},{"id":6595,"depth":24,"text":6596},{"id":6673,"depth":24,"text":6674},{"id":6752,"depth":24,"text":6753},{"id":6851,"depth":24,"text":6852},{"id":7090,"depth":24,"text":7091},{"id":7268,"depth":24,"text":7269},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6262,"description":6270},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7681,"title":7682,"body":7683,"description":7690,"extension":28,"meta":10664,"navigation":30,"path":10665,"seo":10666,"stem":10667,"__hash__":10668},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7684,"toc":10655},[7685,7688,7691,7695,7698,7701,7712,8050,8053,8057,8060,8067,8322,8326,8329,8332,8487,8491,8494,8497,8703,8707,8710,9013,9016,9024,9028,9031,9182,9184,9195,9252,9256,9261,9918,9926,9929,10023,10026,10646,10652],[10,7686,7682],{"id":7687},"_4结构体",[19,7689,7690],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7692,7694],{"id":7693},"_41结构体定义与使用","4.1结构体定义与使用",[19,7696,7697],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7699,7700],{},"通过结构体创建变量的方式：",[1120,7702,7703,7706,7709],{},[59,7704,7705],{},"struct 结构体名 变量名",[59,7707,7708],{},"struct 结构体名 变量名={成员1值，成员2值...}",[59,7710,7711],{},"定义结构体时顺便创建变量",[93,7713,7715],{"className":95,"code":7714,"language":97,"meta":23,"style":23},"#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",[99,7716,7717,7723,7733,7740,7745,7753,7757,7762,7766,7771,7776,7781,7788,7793,7800,7804,7811,7815,7819,7823,7827,7831,7835,7841,7845,7851,7859,7867,7871,7876,7881,7892,7897,7909,7920,7931,7936,7960,7965,7971,7998,8003,8009,8021,8033,8045],{"__ignoreMap":23},[102,7718,7719,7721],{"class":104,"line":105},[102,7720,1938],{"class":108},[102,7722,1941],{"class":217},[102,7724,7725,7727,7729,7731],{"class":104,"line":24},[102,7726,1946],{"class":108},[102,7728,1949],{"class":108},[102,7730,1953],{"class":1952},[102,7732,1279],{"class":112},[102,7734,7735,7737],{"class":104,"line":1168},[102,7736,1938],{"class":108},[102,7738,7739],{"class":217},"\u003Cstring>\n",[102,7741,7742],{"class":104,"line":1183},[102,7743,7744],{"class":171},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[102,7746,7747,7750],{"class":104,"line":1189},[102,7748,7749],{"class":108},"struct",[102,7751,7752],{"class":1952}," Student\n",[102,7754,7755],{"class":104,"line":1203},[102,7756,1535],{"class":112},[102,7758,7759],{"class":104,"line":1209},[102,7760,7761],{"class":171},"    \u002F\u002F成员列表\n",[102,7763,7764],{"class":104,"line":1300},[102,7765,2389],{"emptyLinePlaceholder":30},[102,7767,7768],{"class":104,"line":1306},[102,7769,7770],{"class":171},"    \u002F\u002F姓名\n",[102,7772,7773],{"class":104,"line":1318},[102,7774,7775],{"class":112},"    string name;\n",[102,7777,7778],{"class":104,"line":1601},[102,7779,7780],{"class":171},"    \u002F\u002F年龄\n",[102,7782,7783,7785],{"class":104,"line":1606},[102,7784,1974],{"class":108},[102,7786,7787],{"class":112}," age;\n",[102,7789,7790],{"class":104,"line":1612},[102,7791,7792],{"class":171},"    \u002F\u002F分数\n",[102,7794,7795,7797],{"class":104,"line":1617},[102,7796,1974],{"class":108},[102,7798,7799],{"class":112}," score;\n",[102,7801,7802],{"class":104,"line":1631},[102,7803,3984],{"class":112},[102,7805,7806,7808],{"class":104,"line":1636},[102,7807,7749],{"class":108},[102,7809,7810],{"class":1952}," School\n",[102,7812,7813],{"class":104,"line":1642},[102,7814,1535],{"class":112},[102,7816,7817],{"class":104,"line":1663},[102,7818,7761],{"class":171},[102,7820,7821],{"class":104,"line":1668},[102,7822,2389],{"emptyLinePlaceholder":30},[102,7824,7825],{"class":104,"line":1682},[102,7826,7770],{"class":171},[102,7828,7829],{"class":104,"line":1687},[102,7830,7775],{"class":112},[102,7832,7833],{"class":104,"line":1716},[102,7834,7780],{"class":171},[102,7836,7837,7839],{"class":104,"line":1721},[102,7838,1974],{"class":108},[102,7840,7787],{"class":112},[102,7842,7843],{"class":104,"line":1738},[102,7844,7792],{"class":171},[102,7846,7847,7849],{"class":104,"line":1743},[102,7848,1974],{"class":108},[102,7850,7799],{"class":112},[102,7852,7853,7856],{"class":104,"line":1748},[102,7854,7855],{"class":112},"} s3;",[102,7857,7858],{"class":171}," \u002F\u002F创建结构体时就创建了变量\n",[102,7860,7861,7863,7865],{"class":104,"line":1753},[102,7862,116],{"class":108},[102,7864,1962],{"class":1952},[102,7866,1965],{"class":112},[102,7868,7869],{"class":104,"line":1767},[102,7870,1535],{"class":112},[102,7872,7873],{"class":104,"line":1772},[102,7874,7875],{"class":171},"    \u002F\u002F2.通过学生类型创建具体学生\n",[102,7877,7878],{"class":104,"line":2566},[102,7879,7880],{"class":171},"    \u002F\u002F2.1 struct Student s1;\n",[102,7882,7883,7886,7889],{"class":104,"line":2580},[102,7884,7885],{"class":108},"    struct",[102,7887,7888],{"class":1952}," Student",[102,7890,7891],{"class":112}," s1;\n",[102,7893,7894],{"class":104,"line":2588},[102,7895,7896],{"class":171},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[102,7898,7899,7902,7904,7907],{"class":104,"line":2593},[102,7900,7901],{"class":112},"    s1.name",[102,7903,158],{"class":108},[102,7905,7906],{"class":217},"\"张三\"",[102,7908,1279],{"class":112},[102,7910,7911,7914,7916,7918],{"class":104,"line":2599},[102,7912,7913],{"class":112},"    s1.age",[102,7915,158],{"class":108},[102,7917,763],{"class":161},[102,7919,1279],{"class":112},[102,7921,7922,7925,7927,7929],{"class":104,"line":2605},[102,7923,7924],{"class":112},"    s1.score",[102,7926,158],{"class":108},[102,7928,367],{"class":161},[102,7930,1279],{"class":112},[102,7932,7933],{"class":104,"line":2610},[102,7934,7935],{"class":171},"    \u002F\u002F输出结果\n",[102,7937,7939,7941,7943,7946,7948,7951,7953,7956,7958],{"class":104,"line":7938},37,[102,7940,1540],{"class":112},[102,7942,1157],{"class":108},[102,7944,7945],{"class":112},"s1.name",[102,7947,1157],{"class":108},[102,7949,7950],{"class":112},"s1.age",[102,7952,1157],{"class":108},[102,7954,7955],{"class":112},"s1.score",[102,7957,1157],{"class":108},[102,7959,1180],{"class":112},[102,7961,7963],{"class":104,"line":7962},38,[102,7964,2389],{"emptyLinePlaceholder":30},[102,7966,7968],{"class":104,"line":7967},39,[102,7969,7970],{"class":171},"    \u002F\u002F2.2 struct Student s2={...}\n",[102,7972,7974,7976,7978,7981,7983,7985,7988,7990,7992,7994,7996],{"class":104,"line":7973},40,[102,7975,7885],{"class":108},[102,7977,7888],{"class":1952},[102,7979,7980],{"class":112}," s2",[102,7982,158],{"class":108},[102,7984,1009],{"class":112},[102,7986,7987],{"class":217},"\"王五\"",[102,7989,491],{"class":112},[102,7991,763],{"class":161},[102,7993,491],{"class":112},[102,7995,367],{"class":161},[102,7997,3984],{"class":112},[102,7999,8001],{"class":104,"line":8000},41,[102,8002,2389],{"emptyLinePlaceholder":30},[102,8004,8006],{"class":104,"line":8005},42,[102,8007,8008],{"class":171},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[102,8010,8012,8015,8017,8019],{"class":104,"line":8011},43,[102,8013,8014],{"class":112},"    s3.name",[102,8016,158],{"class":108},[102,8018,3667],{"class":217},[102,8020,1279],{"class":112},[102,8022,8024,8027,8029,8031],{"class":104,"line":8023},44,[102,8025,8026],{"class":112},"    s3.age",[102,8028,158],{"class":108},[102,8030,763],{"class":161},[102,8032,1279],{"class":112},[102,8034,8036,8039,8041,8043],{"class":104,"line":8035},45,[102,8037,8038],{"class":112},"    s3.score",[102,8040,158],{"class":108},[102,8042,813],{"class":161},[102,8044,1279],{"class":112},[102,8046,8048],{"class":104,"line":8047},46,[102,8049,1554],{"class":112},[19,8051,8052],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8054,8056],{"id":8055},"_42结构体数组","4.2结构体数组",[19,8058,8059],{},"将自定义的结构体放入到数组中方便维护",[19,8061,8062,8063,8066],{},"语法：struct 结构体名 数组名",[102,8064,8065],{},"元素个数","={ {}，{},...{} };",[93,8068,8070],{"className":95,"code":8069,"language":97,"meta":23,"style":23},"#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",[99,8071,8072,8078,8088,8094,8099,8105,8109,8113,8119,8125,8129,8133,8141,8145,8150,8165,8169,8185,8201,8205,8210,8226,8241,8256,8261,8287,8291,8314,8318],{"__ignoreMap":23},[102,8073,8074,8076],{"class":104,"line":105},[102,8075,1938],{"class":108},[102,8077,1941],{"class":217},[102,8079,8080,8082,8084,8086],{"class":104,"line":24},[102,8081,1946],{"class":108},[102,8083,1949],{"class":108},[102,8085,1953],{"class":1952},[102,8087,1279],{"class":112},[102,8089,8090,8092],{"class":104,"line":1168},[102,8091,1938],{"class":108},[102,8093,7739],{"class":217},[102,8095,8096],{"class":104,"line":1183},[102,8097,8098],{"class":171},"\u002F\u002F1.定义结构体\n",[102,8100,8101,8103],{"class":104,"line":1189},[102,8102,7749],{"class":108},[102,8104,7752],{"class":1952},[102,8106,8107],{"class":104,"line":1203},[102,8108,1535],{"class":112},[102,8110,8111],{"class":104,"line":1209},[102,8112,7775],{"class":112},[102,8114,8115,8117],{"class":104,"line":1300},[102,8116,1974],{"class":108},[102,8118,7787],{"class":112},[102,8120,8121,8123],{"class":104,"line":1306},[102,8122,1974],{"class":108},[102,8124,7799],{"class":112},[102,8126,8127],{"class":104,"line":1318},[102,8128,2389],{"emptyLinePlaceholder":30},[102,8130,8131],{"class":104,"line":1601},[102,8132,3984],{"class":112},[102,8134,8135,8137,8139],{"class":104,"line":1606},[102,8136,116],{"class":108},[102,8138,1962],{"class":1952},[102,8140,1965],{"class":112},[102,8142,8143],{"class":104,"line":1612},[102,8144,1535],{"class":112},[102,8146,8147],{"class":104,"line":1617},[102,8148,8149],{"class":171},"    \u002F\u002F2.创建结构体数组\n",[102,8151,8152,8154,8156,8159,8161,8163],{"class":104,"line":1631},[102,8153,7885],{"class":108},[102,8155,7888],{"class":1952},[102,8157,8158],{"class":112}," stuArray[",[102,8160,190],{"class":161},[102,8162,1053],{"class":112},[102,8164,4897],{"class":108},[102,8166,8167],{"class":104,"line":1636},[102,8168,2019],{"class":112},[102,8170,8171,8173,8175,8177,8179,8181,8183],{"class":104,"line":1642},[102,8172,4906],{"class":112},[102,8174,7906],{"class":217},[102,8176,491],{"class":112},[102,8178,763],{"class":161},[102,8180,491],{"class":112},[102,8182,424],{"class":161},[102,8184,4919],{"class":112},[102,8186,8187,8189,8191,8193,8195,8197,8199],{"class":104,"line":1663},[102,8188,4906],{"class":112},[102,8190,3667],{"class":217},[102,8192,491],{"class":112},[102,8194,688],{"class":161},[102,8196,491],{"class":112},[102,8198,688],{"class":161},[102,8200,1554],{"class":112},[102,8202,8203],{"class":104,"line":1668},[102,8204,2176],{"class":112},[102,8206,8207],{"class":104,"line":1682},[102,8208,8209],{"class":171},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[102,8211,8212,8215,8217,8220,8222,8224],{"class":104,"line":1687},[102,8213,8214],{"class":112},"    stuArray[",[102,8216,330],{"class":161},[102,8218,8219],{"class":112},"].name",[102,8221,158],{"class":108},[102,8223,3690],{"class":217},[102,8225,1279],{"class":112},[102,8227,8228,8230,8232,8235,8237,8239],{"class":104,"line":1716},[102,8229,8214],{"class":112},[102,8231,330],{"class":161},[102,8233,8234],{"class":112},"].age",[102,8236,158],{"class":108},[102,8238,190],{"class":161},[102,8240,1279],{"class":112},[102,8242,8243,8245,8247,8250,8252,8254],{"class":104,"line":1721},[102,8244,8214],{"class":112},[102,8246,330],{"class":161},[102,8248,8249],{"class":112},"].score",[102,8251,158],{"class":108},[102,8253,190],{"class":161},[102,8255,1279],{"class":112},[102,8257,8258],{"class":104,"line":1738},[102,8259,8260],{"class":171},"    \u002F\u002F4.遍历结构体数组\n",[102,8262,8263,8265,8267,8269,8271,8273,8275,8277,8279,8281,8283,8285],{"class":104,"line":1743},[102,8264,3190],{"class":108},[102,8266,1647],{"class":112},[102,8268,116],{"class":108},[102,8270,3021],{"class":112},[102,8272,158],{"class":108},[102,8274,304],{"class":161},[102,8276,3028],{"class":112},[102,8278,1023],{"class":108},[102,8280,190],{"class":161},[102,8282,3028],{"class":112},[102,8284,2281],{"class":108},[102,8286,119],{"class":112},[102,8288,8289],{"class":104,"line":1748},[102,8290,2019],{"class":112},[102,8292,8293,8295,8297,8300,8302,8305,8307,8310,8312],{"class":104,"line":1753},[102,8294,3440],{"class":112},[102,8296,1157],{"class":108},[102,8298,8299],{"class":112},"stuArray[i].name",[102,8301,1157],{"class":108},[102,8303,8304],{"class":112},"stuArray[i].age",[102,8306,1157],{"class":108},[102,8308,8309],{"class":112},"stuArray[i].score",[102,8311,1157],{"class":108},[102,8313,1180],{"class":112},[102,8315,8316],{"class":104,"line":1767},[102,8317,2176],{"class":112},[102,8319,8320],{"class":104,"line":1772},[102,8321,1554],{"class":112},[14,8323,8325],{"id":8324},"_43结构体指针","4.3结构体指针",[19,8327,8328],{},"作用：通过指针访问结构体中的成员",[19,8330,8331],{},"利用操作符->可以通过结构体指针访问结构体属性",[93,8333,8335],{"className":95,"code":8334,"language":97,"meta":23,"style":23},"#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",[99,8336,8337,8343,8353,8359,8363,8369,8373,8377,8383,8389,8393,8401,8405,8410,8435,8440,8455,8460,8483],{"__ignoreMap":23},[102,8338,8339,8341],{"class":104,"line":105},[102,8340,1938],{"class":108},[102,8342,1941],{"class":217},[102,8344,8345,8347,8349,8351],{"class":104,"line":24},[102,8346,1946],{"class":108},[102,8348,1949],{"class":108},[102,8350,1953],{"class":1952},[102,8352,1279],{"class":112},[102,8354,8355,8357],{"class":104,"line":1168},[102,8356,1938],{"class":108},[102,8358,7739],{"class":217},[102,8360,8361],{"class":104,"line":1183},[102,8362,8098],{"class":171},[102,8364,8365,8367],{"class":104,"line":1189},[102,8366,7749],{"class":108},[102,8368,7752],{"class":1952},[102,8370,8371],{"class":104,"line":1203},[102,8372,1535],{"class":112},[102,8374,8375],{"class":104,"line":1209},[102,8376,7775],{"class":112},[102,8378,8379,8381],{"class":104,"line":1300},[102,8380,1974],{"class":108},[102,8382,7787],{"class":112},[102,8384,8385,8387],{"class":104,"line":1306},[102,8386,1974],{"class":108},[102,8388,7799],{"class":112},[102,8390,8391],{"class":104,"line":1318},[102,8392,3984],{"class":112},[102,8394,8395,8397,8399],{"class":104,"line":1601},[102,8396,116],{"class":108},[102,8398,1962],{"class":1952},[102,8400,1965],{"class":112},[102,8402,8403],{"class":104,"line":1606},[102,8404,1535],{"class":112},[102,8406,8407],{"class":104,"line":1612},[102,8408,8409],{"class":171},"    \u002F\u002F创建学生结构体变量\n",[102,8411,8412,8414,8416,8419,8421,8423,8425,8427,8429,8431,8433],{"class":104,"line":1617},[102,8413,7885],{"class":108},[102,8415,7888],{"class":1952},[102,8417,8418],{"class":112}," s",[102,8420,158],{"class":108},[102,8422,1009],{"class":112},[102,8424,7906],{"class":217},[102,8426,491],{"class":112},[102,8428,763],{"class":161},[102,8430,491],{"class":112},[102,8432,1711],{"class":161},[102,8434,3984],{"class":112},[102,8436,8437],{"class":104,"line":1631},[102,8438,8439],{"class":171},"    \u002F\u002F通过指针指向结构体变量\n",[102,8441,8442,8444,8446,8448,8450,8452],{"class":104,"line":1636},[102,8443,7885],{"class":108},[102,8445,7888],{"class":1952},[102,8447,6508],{"class":108},[102,8449,19],{"class":112},[102,8451,6329],{"class":108},[102,8453,8454],{"class":112},"s\n",[102,8456,8457],{"class":104,"line":1642},[102,8458,8459],{"class":171},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[102,8461,8462,8464,8466,8469,8471,8474,8476,8479,8481],{"class":104,"line":1663},[102,8463,1540],{"class":112},[102,8465,1157],{"class":108},[102,8467,8468],{"class":112},"p->name",[102,8470,1157],{"class":108},[102,8472,8473],{"class":112},"p->age",[102,8475,1157],{"class":108},[102,8477,8478],{"class":112},"p->score",[102,8480,1157],{"class":108},[102,8482,1180],{"class":112},[102,8484,8485],{"class":104,"line":1668},[102,8486,1554],{"class":112},[14,8488,8490],{"id":8489},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8492,8493],{},"作用：结构体中的成员可以是另一个结构体",[19,8495,8496],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[93,8498,8500],{"className":95,"code":8499,"language":97,"meta":23,"style":23},"#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",[99,8501,8502,8508,8518,8524,8529,8537,8541,8545,8551,8557,8561,8566,8573,8577,8584,8588,8594,8599,8603,8611,8615,8620,8625,8630,8641,8653,8664,8677,8688,8699],{"__ignoreMap":23},[102,8503,8504,8506],{"class":104,"line":105},[102,8505,1938],{"class":108},[102,8507,1941],{"class":217},[102,8509,8510,8512,8514,8516],{"class":104,"line":24},[102,8511,1946],{"class":108},[102,8513,1949],{"class":108},[102,8515,1953],{"class":1952},[102,8517,1279],{"class":112},[102,8519,8520,8522],{"class":104,"line":1168},[102,8521,1938],{"class":108},[102,8523,7739],{"class":217},[102,8525,8526],{"class":104,"line":1183},[102,8527,8528],{"class":171},"\u002F\u002F定义学生结构体\n",[102,8530,8531,8533,8535],{"class":104,"line":1189},[102,8532,7749],{"class":108},[102,8534,7888],{"class":1952},[102,8536,2663],{"class":112},[102,8538,8539],{"class":104,"line":1203},[102,8540,1535],{"class":112},[102,8542,8543],{"class":104,"line":1209},[102,8544,7775],{"class":112},[102,8546,8547,8549],{"class":104,"line":1300},[102,8548,1974],{"class":108},[102,8550,7787],{"class":112},[102,8552,8553,8555],{"class":104,"line":1306},[102,8554,1974],{"class":108},[102,8556,7799],{"class":112},[102,8558,8559],{"class":104,"line":1318},[102,8560,1554],{"class":112},[102,8562,8563],{"class":104,"line":1601},[102,8564,8565],{"class":171},"\u002F\u002F定义老师结构体\n",[102,8567,8568,8570],{"class":104,"line":1606},[102,8569,7749],{"class":108},[102,8571,8572],{"class":1952}," Teacher\n",[102,8574,8575],{"class":104,"line":1612},[102,8576,1535],{"class":112},[102,8578,8579,8581],{"class":104,"line":1617},[102,8580,1974],{"class":108},[102,8582,8583],{"class":112}," id;\n",[102,8585,8586],{"class":104,"line":1631},[102,8587,7775],{"class":112},[102,8589,8590,8592],{"class":104,"line":1636},[102,8591,1974],{"class":108},[102,8593,7787],{"class":112},[102,8595,8596],{"class":104,"line":1642},[102,8597,8598],{"class":112},"    Student stu;\n",[102,8600,8601],{"class":104,"line":1663},[102,8602,1554],{"class":112},[102,8604,8605,8607,8609],{"class":104,"line":1668},[102,8606,116],{"class":108},[102,8608,1962],{"class":1952},[102,8610,5968],{"class":112},[102,8612,8613],{"class":104,"line":1682},[102,8614,1535],{"class":112},[102,8616,8617],{"class":104,"line":1687},[102,8618,8619],{"class":171},"    \u002F\u002F结构体嵌套结构体\n",[102,8621,8622],{"class":104,"line":1716},[102,8623,8624],{"class":171},"    \u002F\u002F创建老师\n",[102,8626,8627],{"class":104,"line":1721},[102,8628,8629],{"class":112},"    Teacher t;\n",[102,8631,8632,8635,8637,8639],{"class":104,"line":1738},[102,8633,8634],{"class":112},"    t.id",[102,8636,158],{"class":108},[102,8638,424],{"class":161},[102,8640,1279],{"class":112},[102,8642,8643,8646,8648,8651],{"class":104,"line":1743},[102,8644,8645],{"class":112},"    t.name",[102,8647,158],{"class":108},[102,8649,8650],{"class":217},"\"老王\"",[102,8652,1279],{"class":112},[102,8654,8655,8658,8660,8662],{"class":104,"line":1748},[102,8656,8657],{"class":112},"    t.age",[102,8659,158],{"class":108},[102,8661,763],{"class":161},[102,8663,1279],{"class":112},[102,8665,8666,8669,8671,8674],{"class":104,"line":1753},[102,8667,8668],{"class":112},"    t.stu.name",[102,8670,158],{"class":108},[102,8672,8673],{"class":217},"\"小王\"",[102,8675,8676],{"class":112},"；\n",[102,8678,8679,8682,8684,8686],{"class":104,"line":1767},[102,8680,8681],{"class":112},"    t.stu.age",[102,8683,158],{"class":108},[102,8685,813],{"class":161},[102,8687,1279],{"class":112},[102,8689,8690,8693,8695,8697],{"class":104,"line":1772},[102,8691,8692],{"class":112},"    t.stu.score",[102,8694,158],{"class":108},[102,8696,457],{"class":161},[102,8698,1279],{"class":112},[102,8700,8701],{"class":104,"line":2566},[102,8702,1554],{"class":112},[14,8704,8706],{"id":8705},"_45结构体做函数参数","4.5结构体做函数参数",[19,8708,8709],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[93,8711,8713],{"className":95,"code":8712,"language":97,"meta":23,"style":23},"#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",[99,8714,8715,8721,8731,8737,8743,8747,8751,8757,8763,8767,8772,8777,8794,8798,8831,8835,8840,8859,8863,8894,8898,8906,8910,8919,8931,8943,8955,8968,8976,8989,9001,9009],{"__ignoreMap":23},[102,8716,8717,8719],{"class":104,"line":105},[102,8718,1938],{"class":108},[102,8720,1941],{"class":217},[102,8722,8723,8725,8727,8729],{"class":104,"line":24},[102,8724,1946],{"class":108},[102,8726,1949],{"class":108},[102,8728,1953],{"class":1952},[102,8730,1279],{"class":112},[102,8732,8733,8735],{"class":104,"line":1168},[102,8734,1938],{"class":108},[102,8736,7739],{"class":217},[102,8738,8739,8741],{"class":104,"line":1183},[102,8740,7749],{"class":108},[102,8742,7752],{"class":1952},[102,8744,8745],{"class":104,"line":1189},[102,8746,1535],{"class":112},[102,8748,8749],{"class":104,"line":1203},[102,8750,7775],{"class":112},[102,8752,8753,8755],{"class":104,"line":1209},[102,8754,1974],{"class":108},[102,8756,7787],{"class":112},[102,8758,8759,8761],{"class":104,"line":1300},[102,8760,1974],{"class":108},[102,8762,7799],{"class":112},[102,8764,8765],{"class":104,"line":1306},[102,8766,3984],{"class":112},[102,8768,8769],{"class":104,"line":1318},[102,8770,8771],{"class":171},"\u002F\u002F打印学生信息的函数\n",[102,8773,8774],{"class":104,"line":1601},[102,8775,8776],{"class":171},"\u002F\u002F值传递\n",[102,8778,8779,8781,8784,8786,8788,8790,8792],{"class":104,"line":1606},[102,8780,5354],{"class":108},[102,8782,8783],{"class":1952}," printStudent1",[102,8785,113],{"class":112},[102,8787,7749],{"class":108},[102,8789,7888],{"class":1952},[102,8791,8418],{"class":5206},[102,8793,119],{"class":112},[102,8795,8796],{"class":104,"line":1612},[102,8797,1535],{"class":112},[102,8799,8800,8802,8804,8807,8809,8812,8814,8817,8819,8821,8823,8826,8828],{"class":104,"line":1617},[102,8801,6519],{"class":112},[102,8803,1157],{"class":108},[102,8805,8806],{"class":112}," s.name ",[102,8808,1157],{"class":108},[102,8810,8811],{"class":217}," \" \"",[102,8813,1433],{"class":108},[102,8815,8816],{"class":112}," s.age ",[102,8818,1157],{"class":108},[102,8820,8811],{"class":217},[102,8822,1433],{"class":108},[102,8824,8825],{"class":112}," s.score ",[102,8827,1157],{"class":108},[102,8829,8830],{"class":112}," endl;\n",[102,8832,8833],{"class":104,"line":1631},[102,8834,1554],{"class":112},[102,8836,8837],{"class":104,"line":1636},[102,8838,8839],{"class":171},"\u002F\u002F地址传递\n",[102,8841,8842,8844,8847,8849,8851,8853,8855,8857],{"class":104,"line":1642},[102,8843,5354],{"class":108},[102,8845,8846],{"class":1952}," printStudent2",[102,8848,113],{"class":112},[102,8850,7749],{"class":108},[102,8852,7888],{"class":1952},[102,8854,6508],{"class":108},[102,8856,808],{"class":5206},[102,8858,119],{"class":112},[102,8860,8861],{"class":104,"line":1663},[102,8862,1535],{"class":112},[102,8864,8865,8867,8869,8872,8874,8876,8878,8881,8883,8885,8887,8890,8892],{"class":104,"line":1668},[102,8866,6519],{"class":112},[102,8868,1157],{"class":108},[102,8870,8871],{"class":112}," s->name ",[102,8873,1157],{"class":108},[102,8875,8811],{"class":217},[102,8877,1433],{"class":108},[102,8879,8880],{"class":112}," s->age ",[102,8882,1157],{"class":108},[102,8884,8811],{"class":217},[102,8886,1433],{"class":108},[102,8888,8889],{"class":112}," s->score ",[102,8891,1157],{"class":108},[102,8893,8830],{"class":112},[102,8895,8896],{"class":104,"line":1682},[102,8897,1554],{"class":112},[102,8899,8900,8902,8904],{"class":104,"line":1687},[102,8901,116],{"class":108},[102,8903,1962],{"class":1952},[102,8905,1965],{"class":112},[102,8907,8908],{"class":104,"line":1716},[102,8909,1535],{"class":112},[102,8911,8912,8914,8916],{"class":104,"line":1721},[102,8913,7885],{"class":108},[102,8915,7888],{"class":1952},[102,8917,8918],{"class":112}," s;\n",[102,8920,8921,8924,8926,8929],{"class":104,"line":1738},[102,8922,8923],{"class":112},"    s.name ",[102,8925,158],{"class":108},[102,8927,8928],{"class":217}," \"张三\"",[102,8930,1279],{"class":112},[102,8932,8933,8936,8938,8941],{"class":104,"line":1743},[102,8934,8935],{"class":112},"    s.age ",[102,8937,158],{"class":108},[102,8939,8940],{"class":161}," 20",[102,8942,1279],{"class":112},[102,8944,8945,8948,8950,8953],{"class":104,"line":1748},[102,8946,8947],{"class":112},"    s.score ",[102,8949,158],{"class":108},[102,8951,8952],{"class":161}," 85",[102,8954,1279],{"class":112},[102,8956,8957,8959,8961,8964,8966],{"class":104,"line":1753},[102,8958,1540],{"class":112},[102,8960,1157],{"class":108},[102,8962,8963],{"class":217},"\"值传递:\"",[102,8965,1157],{"class":108},[102,8967,1180],{"class":112},[102,8969,8970,8973],{"class":104,"line":1767},[102,8971,8972],{"class":1952},"    printStudent1",[102,8974,8975],{"class":112},"(s);\n",[102,8977,8978,8980,8982,8985,8987],{"class":104,"line":1772},[102,8979,1540],{"class":112},[102,8981,1157],{"class":108},[102,8983,8984],{"class":217},"\"地址传递:\"",[102,8986,1157],{"class":108},[102,8988,1180],{"class":112},[102,8990,8991,8994,8996,8998],{"class":104,"line":2566},[102,8992,8993],{"class":1952},"    printStudent2",[102,8995,113],{"class":112},[102,8997,466],{"class":108},[102,8999,9000],{"class":112},"s); \n",[102,9002,9003,9005,9007],{"class":104,"line":2580},[102,9004,4079],{"class":108},[102,9006,4082],{"class":161},[102,9008,1279],{"class":112},[102,9010,9011],{"class":104,"line":2588},[102,9012,1554],{"class":112},[19,9014,9015],{},"注意：",[1120,9017,9018,9021],{},[59,9019,9020],{},"1.先定义结构体，不要在函数中写结构体的定义",[59,9022,9023],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9025,9027],{"id":9026},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9029,9030],{},"用const防止误操作",[93,9032,9034],{"className":95,"code":9033,"language":97,"meta":23,"style":23},"#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",[99,9035,9036,9042,9052,9058,9063,9067,9071,9077,9083,9087,9103,9107,9130,9134,9142,9146,9167,9174,9178],{"__ignoreMap":23},[102,9037,9038,9040],{"class":104,"line":105},[102,9039,1938],{"class":108},[102,9041,1941],{"class":217},[102,9043,9044,9046,9048,9050],{"class":104,"line":24},[102,9045,1946],{"class":108},[102,9047,1949],{"class":108},[102,9049,1953],{"class":1952},[102,9051,1279],{"class":112},[102,9053,9054,9056],{"class":104,"line":1168},[102,9055,1938],{"class":108},[102,9057,7739],{"class":217},[102,9059,9060],{"class":104,"line":1183},[102,9061,9062],{"class":112},"sctuct Student\n",[102,9064,9065],{"class":104,"line":1189},[102,9066,1535],{"class":112},[102,9068,9069],{"class":104,"line":1203},[102,9070,7775],{"class":112},[102,9072,9073,9075],{"class":104,"line":1209},[102,9074,1974],{"class":108},[102,9076,7787],{"class":112},[102,9078,9079,9081],{"class":104,"line":1300},[102,9080,1974],{"class":108},[102,9082,7799],{"class":112},[102,9084,9085],{"class":104,"line":1306},[102,9086,3984],{"class":112},[102,9088,9089,9091,9094,9096,9099,9101],{"class":104,"line":1318},[102,9090,5354],{"class":108},[102,9092,9093],{"class":1952}," printStudents",[102,9095,113],{"class":112},[102,9097,9098],{"class":1952},"student",[102,9100,8418],{"class":5206},[102,9102,119],{"class":112},[102,9104,9105],{"class":104,"line":1601},[102,9106,1535],{"class":112},[102,9108,9109,9111,9113,9116,9118,9121,9123,9126,9128],{"class":104,"line":1606},[102,9110,1540],{"class":112},[102,9112,1157],{"class":108},[102,9114,9115],{"class":112},"s.name",[102,9117,1157],{"class":108},[102,9119,9120],{"class":112},"s.age",[102,9122,1157],{"class":108},[102,9124,9125],{"class":112},"s.score",[102,9127,1157],{"class":108},[102,9129,1180],{"class":112},[102,9131,9132],{"class":104,"line":1612},[102,9133,1554],{"class":112},[102,9135,9136,9138,9140],{"class":104,"line":1617},[102,9137,116],{"class":108},[102,9139,1962],{"class":1952},[102,9141,5968],{"class":112},[102,9143,9144],{"class":104,"line":1631},[102,9145,1535],{"class":112},[102,9147,9148,9151,9153,9155,9157,9159,9161,9163,9165],{"class":104,"line":1636},[102,9149,9150],{"class":112},"    Student s",[102,9152,158],{"class":108},[102,9154,1009],{"class":112},[102,9156,7906],{"class":217},[102,9158,491],{"class":112},[102,9160,763],{"class":161},[102,9162,491],{"class":112},[102,9164,763],{"class":161},[102,9166,3984],{"class":112},[102,9168,9169,9172],{"class":104,"line":1642},[102,9170,9171],{"class":1952},"    printStudent",[102,9173,8975],{"class":112},[102,9175,9176],{"class":104,"line":1663},[102,9177,2389],{"emptyLinePlaceholder":30},[102,9179,9180],{"class":104,"line":1668},[102,9181,1554],{"class":112},[19,9183,9015],{},[1120,9185,9186,9189,9192],{},[59,9187,9188],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[59,9190,9191],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[59,9193,9194],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[93,9196,9198],{"className":95,"code":9197,"language":97,"meta":23,"style":23},"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",[99,9199,9200,9219,9223,9228,9248],{"__ignoreMap":23},[102,9201,9202,9204,9206,9208,9210,9213,9215,9217],{"class":104,"line":105},[102,9203,5354],{"class":108},[102,9205,9093],{"class":1952},[102,9207,113],{"class":112},[102,9209,6782],{"class":108},[102,9211,9212],{"class":1952}," student",[102,9214,6508],{"class":108},[102,9216,808],{"class":5206},[102,9218,119],{"class":112},[102,9220,9221],{"class":104,"line":24},[102,9222,1535],{"class":112},[102,9224,9225],{"class":104,"line":1168},[102,9226,9227],{"class":171},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[102,9229,9230,9232,9234,9236,9238,9240,9242,9244,9246],{"class":104,"line":1183},[102,9231,1540],{"class":112},[102,9233,1157],{"class":108},[102,9235,9115],{"class":112},[102,9237,1157],{"class":108},[102,9239,9120],{"class":112},[102,9241,1157],{"class":108},[102,9243,9125],{"class":112},[102,9245,1157],{"class":108},[102,9247,1180],{"class":112},[102,9249,9250],{"class":104,"line":1189},[102,9251,1554],{"class":112},[14,9253,9255],{"id":9254},"_47案例","4.7案例",[56,9257,9258],{},[59,9259,9260],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[93,9262,9264],{"className":95,"code":9263,"language":97,"meta":23,"style":23},"#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",[99,9265,9266,9272,9282,9288,9295,9299,9305,9309,9314,9320,9326,9330,9334,9340,9344,9349,9354,9367,9371,9376,9402,9406,9418,9445,9449,9461,9471,9475,9480,9509,9513,9525,9534,9561,9572,9582,9586,9590,9594,9599,9623,9627,9651,9655,9674,9700,9704,9729,9752,9776,9781,9786,9791,9800,9805,9811,9832,9838,9852,9858,9885,9894,9900,9908,9913],{"__ignoreMap":23},[102,9267,9268,9270],{"class":104,"line":105},[102,9269,1938],{"class":108},[102,9271,1941],{"class":217},[102,9273,9274,9276,9278,9280],{"class":104,"line":24},[102,9275,1946],{"class":108},[102,9277,1949],{"class":108},[102,9279,1953],{"class":1952},[102,9281,1279],{"class":112},[102,9283,9284,9286],{"class":104,"line":1168},[102,9285,1938],{"class":108},[102,9287,7739],{"class":217},[102,9289,9290,9292],{"class":104,"line":1183},[102,9291,1938],{"class":108},[102,9293,9294],{"class":217},"\u003Cctime>\n",[102,9296,9297],{"class":104,"line":1189},[102,9298,8528],{"class":171},[102,9300,9301,9303],{"class":104,"line":1203},[102,9302,7749],{"class":108},[102,9304,7752],{"class":1952},[102,9306,9307],{"class":104,"line":1209},[102,9308,1535],{"class":112},[102,9310,9311],{"class":104,"line":1300},[102,9312,9313],{"class":112},"    string sName;\n",[102,9315,9316,9318],{"class":104,"line":1306},[102,9317,1974],{"class":108},[102,9319,7787],{"class":112},[102,9321,9322,9324],{"class":104,"line":1318},[102,9323,1974],{"class":108},[102,9325,7799],{"class":112},[102,9327,9328],{"class":104,"line":1601},[102,9329,3984],{"class":112},[102,9331,9332],{"class":104,"line":1606},[102,9333,8565],{"class":171},[102,9335,9336,9338],{"class":104,"line":1612},[102,9337,7749],{"class":108},[102,9339,8572],{"class":1952},[102,9341,9342],{"class":104,"line":1617},[102,9343,1535],{"class":112},[102,9345,9346],{"class":104,"line":1631},[102,9347,9348],{"class":112},"    string tName;\n",[102,9350,9351],{"class":104,"line":1636},[102,9352,9353],{"class":171},"    \u002F\u002F学生数组\n",[102,9355,9356,9358,9360,9363,9365],{"class":104,"line":1642},[102,9357,7885],{"class":108},[102,9359,7888],{"class":1952},[102,9361,9362],{"class":112}," sArray[",[102,9364,432],{"class":161},[102,9366,4679],{"class":112},[102,9368,9369],{"class":104,"line":1663},[102,9370,3984],{"class":112},[102,9372,9373],{"class":104,"line":1668},[102,9374,9375],{"class":171},"\u002F\u002F给老师和学生赋值的函数\n",[102,9377,9378,9380,9383,9385,9387,9390,9393,9396,9398,9400],{"class":104,"line":1682},[102,9379,5354],{"class":108},[102,9381,9382],{"class":1952}," allocateSpace",[102,9384,113],{"class":112},[102,9386,7749],{"class":108},[102,9388,9389],{"class":1952}," Teacher",[102,9391,9392],{"class":5206}," tArray",[102,9394,9395],{"class":112},"[],",[102,9397,116],{"class":108},[102,9399,7321],{"class":5206},[102,9401,119],{"class":112},[102,9403,9404],{"class":104,"line":1687},[102,9405,1535],{"class":112},[102,9407,9408,9411,9413,9416],{"class":104,"line":1716},[102,9409,9410],{"class":112},"    string nameSeed",[102,9412,158],{"class":108},[102,9414,9415],{"class":217},"\"ABCDE\"",[102,9417,1279],{"class":112},[102,9419,9420,9422,9424,9426,9429,9431,9433,9436,9438,9441,9443],{"class":104,"line":1721},[102,9421,3190],{"class":108},[102,9423,1647],{"class":112},[102,9425,116],{"class":108},[102,9427,9428],{"class":112}," i ",[102,9430,158],{"class":108},[102,9432,4082],{"class":161},[102,9434,9435],{"class":112},"; i ",[102,9437,1023],{"class":108},[102,9439,9440],{"class":112}," len; i",[102,9442,2281],{"class":108},[102,9444,119],{"class":112},[102,9446,9447],{"class":104,"line":1738},[102,9448,2019],{"class":112},[102,9450,9451,9454,9456,9459],{"class":104,"line":1743},[102,9452,9453],{"class":112},"        tArray[i].tName ",[102,9455,158],{"class":108},[102,9457,9458],{"class":217}," \"Teacher_\"",[102,9460,1279],{"class":112},[102,9462,9463,9465,9468],{"class":104,"line":1748},[102,9464,9453],{"class":112},[102,9466,9467],{"class":108},"+=",[102,9469,9470],{"class":112},"nameSeed[i];\n",[102,9472,9473],{"class":104,"line":1753},[102,9474,2389],{"emptyLinePlaceholder":30},[102,9476,9477],{"class":104,"line":1767},[102,9478,9479],{"class":171},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[102,9481,9482,9484,9486,9488,9491,9493,9495,9498,9500,9502,9505,9507],{"class":104,"line":1772},[102,9483,3392],{"class":108},[102,9485,1647],{"class":112},[102,9487,116],{"class":108},[102,9489,9490],{"class":112}," j ",[102,9492,158],{"class":108},[102,9494,4082],{"class":161},[102,9496,9497],{"class":112},"; j ",[102,9499,1023],{"class":108},[102,9501,2137],{"class":161},[102,9503,9504],{"class":112},"; j",[102,9506,2281],{"class":108},[102,9508,119],{"class":112},[102,9510,9511],{"class":104,"line":2566},[102,9512,2499],{"class":112},[102,9514,9515,9518,9520,9523],{"class":104,"line":2580},[102,9516,9517],{"class":112},"            tArray[i].sArray[j].sName ",[102,9519,158],{"class":108},[102,9521,9522],{"class":217}," \"Student_\"",[102,9524,1279],{"class":112},[102,9526,9527,9529,9531],{"class":104,"line":2588},[102,9528,9517],{"class":112},[102,9530,9467],{"class":108},[102,9532,9533],{"class":112}," nameSeed[j];\n",[102,9535,9536,9539,9542,9544,9546,9548,9550,9552,9554,9556,9558],{"class":104,"line":2593},[102,9537,9538],{"class":108},"            int",[102,9540,9541],{"class":112}," random",[102,9543,158],{"class":108},[102,9545,2413],{"class":1952},[102,9547,2416],{"class":112},[102,9549,441],{"class":108},[102,9551,1020],{"class":161},[102,9553,594],{"class":108},[102,9555,514],{"class":161},[102,9557,168],{"class":112},[102,9559,9560],{"class":171},"\u002F\u002F40~99\n",[102,9562,9563,9566,9568,9570],{"class":104,"line":2599},[102,9564,9565],{"class":112},"            tArray[i].sArray[j].age ",[102,9567,158],{"class":108},[102,9569,8940],{"class":161},[102,9571,1279],{"class":112},[102,9573,9574,9577,9579],{"class":104,"line":2605},[102,9575,9576],{"class":112},"            tArray[i].sArray[j].score ",[102,9578,158],{"class":108},[102,9580,9581],{"class":112}," random;\n",[102,9583,9584],{"class":104,"line":2610},[102,9585,2518],{"class":112},[102,9587,9588],{"class":104,"line":7938},[102,9589,2176],{"class":112},[102,9591,9592],{"class":104,"line":7962},[102,9593,1554],{"class":112},[102,9595,9596],{"class":104,"line":7967},[102,9597,9598],{"class":171},"\u002F\u002F打印所有信息的函数\n",[102,9600,9601,9603,9606,9608,9610,9612,9614,9617,9619,9621],{"class":104,"line":7973},[102,9602,5354],{"class":108},[102,9604,9605],{"class":1952}," printInfo",[102,9607,113],{"class":112},[102,9609,7749],{"class":108},[102,9611,9389],{"class":1952},[102,9613,9392],{"class":5206},[102,9615,9616],{"class":112},"[], ",[102,9618,116],{"class":108},[102,9620,7321],{"class":5206},[102,9622,119],{"class":112},[102,9624,9625],{"class":104,"line":8000},[102,9626,1535],{"class":112},[102,9628,9629,9631,9633,9635,9637,9639,9641,9643,9645,9647,9649],{"class":104,"line":8005},[102,9630,3190],{"class":108},[102,9632,1647],{"class":112},[102,9634,116],{"class":108},[102,9636,9428],{"class":112},[102,9638,158],{"class":108},[102,9640,4082],{"class":161},[102,9642,9435],{"class":112},[102,9644,1023],{"class":108},[102,9646,9440],{"class":112},[102,9648,2281],{"class":108},[102,9650,119],{"class":112},[102,9652,9653],{"class":104,"line":8011},[102,9654,2019],{"class":112},[102,9656,9657,9660,9662,9665,9667,9670,9672],{"class":104,"line":8023},[102,9658,9659],{"class":112},"        cout ",[102,9661,1157],{"class":108},[102,9663,9664],{"class":217}," \"Teacher: \"",[102,9666,1433],{"class":108},[102,9668,9669],{"class":112}," tArray[i].tName ",[102,9671,1157],{"class":108},[102,9673,8830],{"class":112},[102,9675,9676,9678,9680,9682,9684,9686,9688,9690,9692,9694,9696,9698],{"class":104,"line":8035},[102,9677,3392],{"class":108},[102,9679,1647],{"class":112},[102,9681,116],{"class":108},[102,9683,9490],{"class":112},[102,9685,158],{"class":108},[102,9687,4082],{"class":161},[102,9689,9497],{"class":112},[102,9691,1023],{"class":108},[102,9693,2137],{"class":161},[102,9695,9504],{"class":112},[102,9697,2281],{"class":108},[102,9699,119],{"class":112},[102,9701,9702],{"class":104,"line":8047},[102,9703,2499],{"class":112},[102,9705,9707,9710,9712,9715,9717,9720,9722,9725,9727],{"class":104,"line":9706},47,[102,9708,9709],{"class":112},"            cout ",[102,9711,1157],{"class":108},[102,9713,9714],{"class":217}," \"",[102,9716,1219],{"class":161},[102,9718,9719],{"class":217},"Student: \"",[102,9721,1433],{"class":108},[102,9723,9724],{"class":112}," tArray[i].sArray[j].sName",[102,9726,1157],{"class":108},[102,9728,1180],{"class":112},[102,9730,9732,9734,9736,9738,9740,9743,9745,9748,9750],{"class":104,"line":9731},48,[102,9733,9709],{"class":112},[102,9735,1157],{"class":108},[102,9737,9714],{"class":217},[102,9739,1219],{"class":161},[102,9741,9742],{"class":217},"Age: \"",[102,9744,1433],{"class":108},[102,9746,9747],{"class":112}," tArray[i].sArray[j].age ",[102,9749,1157],{"class":108},[102,9751,8830],{"class":112},[102,9753,9755,9757,9759,9761,9763,9766,9768,9771,9773],{"class":104,"line":9754},49,[102,9756,9709],{"class":112},[102,9758,1157],{"class":108},[102,9760,9714],{"class":217},[102,9762,1219],{"class":161},[102,9764,9765],{"class":217},"Score: \"",[102,9767,1433],{"class":108},[102,9769,9770],{"class":112}," tArray[i].sArray[j].score ",[102,9772,1157],{"class":108},[102,9774,9775],{"class":112}," endl;   \n",[102,9777,9779],{"class":104,"line":9778},50,[102,9780,2518],{"class":112},[102,9782,9784],{"class":104,"line":9783},51,[102,9785,2176],{"class":112},[102,9787,9789],{"class":104,"line":9788},52,[102,9790,1554],{"class":112},[102,9792,9794,9796,9798],{"class":104,"line":9793},53,[102,9795,116],{"class":108},[102,9797,1962],{"class":1952},[102,9799,1965],{"class":112},[102,9801,9803],{"class":104,"line":9802},54,[102,9804,1535],{"class":112},[102,9806,9808],{"class":104,"line":9807},55,[102,9809,9810],{"class":171},"    \u002F\u002F随机数种子\n",[102,9812,9814,9816,9818,9820,9822,9824,9826,9828,9830],{"class":104,"line":9813},56,[102,9815,2362],{"class":1952},[102,9817,2365],{"class":112},[102,9819,2368],{"class":108},[102,9821,2371],{"class":108},[102,9823,542],{"class":112},[102,9825,2376],{"class":1952},[102,9827,113],{"class":112},[102,9829,2381],{"class":161},[102,9831,2384],{"class":112},[102,9833,9835],{"class":104,"line":9834},57,[102,9836,9837],{"class":171},"    \u002F\u002F1.创建3名老师的数组\n",[102,9839,9841,9843,9845,9848,9850],{"class":104,"line":9840},58,[102,9842,7885],{"class":108},[102,9844,9389],{"class":1952},[102,9846,9847],{"class":112}," tArray[",[102,9849,184],{"class":161},[102,9851,4679],{"class":112},[102,9853,9855],{"class":104,"line":9854},59,[102,9856,9857],{"class":171},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[102,9859,9861,9863,9866,9868,9871,9874,9876,9878,9881,9883],{"class":104,"line":9860},60,[102,9862,1974],{"class":108},[102,9864,9865],{"class":112}," len ",[102,9867,158],{"class":108},[102,9869,9870],{"class":108}," sizeof",[102,9872,9873],{"class":112},"(tArray) ",[102,9875,697],{"class":108},[102,9877,9870],{"class":108},[102,9879,9880],{"class":112},"(tArray[",[102,9882,304],{"class":161},[102,9884,3845],{"class":112},[102,9886,9888,9891],{"class":104,"line":9887},61,[102,9889,9890],{"class":1952},"    allocateSpace",[102,9892,9893],{"class":112},"(tArray, len);\n",[102,9895,9897],{"class":104,"line":9896},62,[102,9898,9899],{"class":171},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[102,9901,9903,9906],{"class":104,"line":9902},63,[102,9904,9905],{"class":1952},"    printInfo",[102,9907,9893],{"class":112},[102,9909,9911],{"class":104,"line":9910},64,[102,9912,2389],{"emptyLinePlaceholder":30},[102,9914,9916],{"class":104,"line":9915},65,[102,9917,1554],{"class":112},[56,9919,9920],{"start":24},[59,9921,9922,9925],{},[262,9923,9924],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,9927,9928],{},"五名英雄信息如下：",[93,9930,9934],{"className":9931,"code":9932,"language":9933,"meta":23,"style":23},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[99,9935,9936,9954,9971,9988,10005],{"__ignoreMap":23},[102,9937,9938,9940,9943,9945,9947,9949,9952],{"class":104,"line":105},[102,9939,4906],{"class":112},[102,9941,9942],{"class":217},"\"刘备\"",[102,9944,491],{"class":112},[102,9946,888],{"class":161},[102,9948,491],{"class":112},[102,9950,9951],{"class":217},"\"男\"",[102,9953,4919],{"class":112},[102,9955,9956,9958,9961,9963,9965,9967,9969],{"class":104,"line":24},[102,9957,4906],{"class":112},[102,9959,9960],{"class":217},"\"关羽\"",[102,9962,491],{"class":112},[102,9964,863],{"class":161},[102,9966,491],{"class":112},[102,9968,9951],{"class":217},[102,9970,4919],{"class":112},[102,9972,9973,9975,9978,9980,9982,9984,9986],{"class":104,"line":1168},[102,9974,4906],{"class":112},[102,9976,9977],{"class":217},"\"张飞\"",[102,9979,491],{"class":112},[102,9981,813],{"class":161},[102,9983,491],{"class":112},[102,9985,9951],{"class":217},[102,9987,4919],{"class":112},[102,9989,9990,9992,9995,9997,9999,10001,10003],{"class":104,"line":1183},[102,9991,4906],{"class":112},[102,9993,9994],{"class":217},"\"赵云\"",[102,9996,491],{"class":112},[102,9998,838],{"class":161},[102,10000,491],{"class":112},[102,10002,9951],{"class":217},[102,10004,4919],{"class":112},[102,10006,10007,10009,10012,10014,10016,10018,10021],{"class":104,"line":1189},[102,10008,4906],{"class":112},[102,10010,10011],{"class":217},"\"貂蝉\"",[102,10013,491],{"class":112},[102,10015,788],{"class":161},[102,10017,491],{"class":112},[102,10019,10020],{"class":217},"\"女\"",[102,10022,4919],{"class":112},[19,10024,10025],{},"代码：",[93,10027,10029],{"className":95,"code":10028,"language":97,"meta":23,"style":23},"#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",[99,10030,10031,10037,10047,10053,10060,10064,10068,10074,10079,10083,10088,10111,10115,10140,10144,10177,10182,10211,10216,10231,10257,10277,10282,10287,10291,10295,10300,10322,10326,10350,10354,10416,10420,10424,10432,10436,10441,10452,10456,10472,10488,10504,10520,10536,10540,10560,10582,10587,10600,10607,10612,10618,10623,10636,10642],{"__ignoreMap":23},[102,10032,10033,10035],{"class":104,"line":105},[102,10034,1938],{"class":108},[102,10036,1941],{"class":217},[102,10038,10039,10041,10043,10045],{"class":104,"line":24},[102,10040,1946],{"class":108},[102,10042,1949],{"class":108},[102,10044,1953],{"class":1952},[102,10046,1279],{"class":112},[102,10048,10049,10051],{"class":104,"line":1168},[102,10050,1938],{"class":108},[102,10052,7739],{"class":217},[102,10054,10055,10057],{"class":104,"line":1183},[102,10056,7749],{"class":108},[102,10058,10059],{"class":1952}," Sanguo\n",[102,10061,10062],{"class":104,"line":1189},[102,10063,1535],{"class":112},[102,10065,10066],{"class":104,"line":1203},[102,10067,7775],{"class":112},[102,10069,10070,10072],{"class":104,"line":1209},[102,10071,1974],{"class":108},[102,10073,7787],{"class":112},[102,10075,10076],{"class":104,"line":1300},[102,10077,10078],{"class":112},"    string gender;\n",[102,10080,10081],{"class":104,"line":1306},[102,10082,3984],{"class":112},[102,10084,10085],{"class":104,"line":1318},[102,10086,10087],{"class":171},"\u002F\u002F定义排序函数\n",[102,10089,10090,10092,10094,10096,10099,10101,10103,10105,10107,10109],{"class":104,"line":1601},[102,10091,5354],{"class":108},[102,10093,7306],{"class":1952},[102,10095,113],{"class":112},[102,10097,10098],{"class":1952},"Sanguo",[102,10100,6508],{"class":108},[102,10102,808],{"class":5206},[102,10104,491],{"class":112},[102,10106,116],{"class":108},[102,10108,7321],{"class":5206},[102,10110,119],{"class":112},[102,10112,10113],{"class":104,"line":1606},[102,10114,1535],{"class":112},[102,10116,10117,10119,10121,10123,10125,10127,10129,10131,10133,10136,10138],{"class":104,"line":1612},[102,10118,3190],{"class":108},[102,10120,113],{"class":112},[102,10122,116],{"class":108},[102,10124,3021],{"class":112},[102,10126,158],{"class":108},[102,10128,304],{"class":161},[102,10130,3028],{"class":112},[102,10132,1023],{"class":108},[102,10134,10135],{"class":112},"len;i",[102,10137,2281],{"class":108},[102,10139,119],{"class":112},[102,10141,10142],{"class":104,"line":1617},[102,10143,2019],{"class":112},[102,10145,10146,10149,10151,10153,10155,10157,10159,10161,10163,10165,10167,10169,10171,10173,10175],{"class":104,"line":1631},[102,10147,10148],{"class":108},"     for",[102,10150,1647],{"class":112},[102,10152,116],{"class":108},[102,10154,3399],{"class":112},[102,10156,158],{"class":108},[102,10158,304],{"class":161},[102,10160,3406],{"class":112},[102,10162,1023],{"class":108},[102,10164,7348],{"class":112},[102,10166,645],{"class":108},[102,10168,330],{"class":161},[102,10170,645],{"class":108},[102,10172,3539],{"class":112},[102,10174,2281],{"class":108},[102,10176,119],{"class":112},[102,10178,10179],{"class":104,"line":1636},[102,10180,10181],{"class":112},"     {\n",[102,10183,10184,10187,10190,10192,10195,10197,10200,10202,10204,10206,10208],{"class":104,"line":1642},[102,10185,10186],{"class":108},"         if",[102,10188,10189],{"class":112}," ((s",[102,10191,594],{"class":108},[102,10193,10194],{"class":112},"j)->age ",[102,10196,1073],{"class":108},[102,10198,10199],{"class":112}," (s",[102,10201,594],{"class":108},[102,10203,580],{"class":112},[102,10205,594],{"class":108},[102,10207,330],{"class":161},[102,10209,10210],{"class":112},")->age)\n",[102,10212,10213],{"class":104,"line":1663},[102,10214,10215],{"class":112},"         {\n",[102,10217,10218,10221,10223,10226,10228],{"class":104,"line":1668},[102,10219,10220],{"class":112},"             Sanguo temp",[102,10222,7143],{"class":108},[102,10224,10225],{"class":112},"(s",[102,10227,594],{"class":108},[102,10229,10230],{"class":112},"j);\n",[102,10232,10233,10236,10238,10240,10243,10245,10247,10249,10251,10253,10255],{"class":104,"line":1682},[102,10234,10235],{"class":108},"             *",[102,10237,10225],{"class":112},[102,10239,594],{"class":108},[102,10241,10242],{"class":112},"j)",[102,10244,7143],{"class":108},[102,10246,10225],{"class":112},[102,10248,594],{"class":108},[102,10250,580],{"class":112},[102,10252,594],{"class":108},[102,10254,330],{"class":161},[102,10256,2708],{"class":112},[102,10258,10259,10261,10263,10265,10267,10269,10271,10273,10275],{"class":104,"line":1687},[102,10260,10235],{"class":108},[102,10262,10225],{"class":112},[102,10264,594],{"class":108},[102,10266,580],{"class":112},[102,10268,594],{"class":108},[102,10270,330],{"class":161},[102,10272,542],{"class":112},[102,10274,158],{"class":108},[102,10276,4269],{"class":112},[102,10278,10279],{"class":104,"line":1716},[102,10280,10281],{"class":112},"         }\n",[102,10283,10284],{"class":104,"line":1721},[102,10285,10286],{"class":112},"     }\n",[102,10288,10289],{"class":104,"line":1738},[102,10290,2176],{"class":112},[102,10292,10293],{"class":104,"line":1743},[102,10294,1554],{"class":112},[102,10296,10297],{"class":104,"line":1748},[102,10298,10299],{"class":171},"\u002F\u002F定义打印函数\n",[102,10301,10302,10304,10306,10308,10310,10312,10314,10316,10318,10320],{"class":104,"line":1753},[102,10303,5354],{"class":108},[102,10305,9605],{"class":1952},[102,10307,113],{"class":112},[102,10309,10098],{"class":1952},[102,10311,6508],{"class":108},[102,10313,808],{"class":5206},[102,10315,491],{"class":112},[102,10317,116],{"class":108},[102,10319,7321],{"class":5206},[102,10321,119],{"class":112},[102,10323,10324],{"class":104,"line":1767},[102,10325,1535],{"class":112},[102,10327,10328,10330,10332,10334,10336,10338,10340,10342,10344,10346,10348],{"class":104,"line":1772},[102,10329,3190],{"class":108},[102,10331,1647],{"class":112},[102,10333,116],{"class":108},[102,10335,3021],{"class":112},[102,10337,158],{"class":108},[102,10339,304],{"class":161},[102,10341,3028],{"class":112},[102,10343,1023],{"class":108},[102,10345,10135],{"class":112},[102,10347,2281],{"class":108},[102,10349,119],{"class":112},[102,10351,10352],{"class":104,"line":2566},[102,10353,2019],{"class":112},[102,10355,10356,10358,10360,10362,10364,10367,10369,10371,10373,10376,10378,10380,10382,10385,10387,10389,10391,10394,10396,10398,10400,10403,10405,10407,10409,10412,10414],{"class":104,"line":2580},[102,10357,3440],{"class":112},[102,10359,1157],{"class":108},[102,10361,364],{"class":217},[102,10363,1219],{"class":161},[102,10365,10366],{"class":217},"姓名：\"",[102,10368,1157],{"class":108},[102,10370,10225],{"class":112},[102,10372,594],{"class":108},[102,10374,10375],{"class":112},"i)->name",[102,10377,1157],{"class":108},[102,10379,364],{"class":217},[102,10381,1219],{"class":161},[102,10383,10384],{"class":217},"年龄：\"",[102,10386,1157],{"class":108},[102,10388,10225],{"class":112},[102,10390,594],{"class":108},[102,10392,10393],{"class":112},"i)->age",[102,10395,1157],{"class":108},[102,10397,364],{"class":217},[102,10399,1219],{"class":161},[102,10401,10402],{"class":217},"性别：\"",[102,10404,1157],{"class":108},[102,10406,10225],{"class":112},[102,10408,594],{"class":108},[102,10410,10411],{"class":112},"i)->gender",[102,10413,1157],{"class":108},[102,10415,1180],{"class":112},[102,10417,10418],{"class":104,"line":2588},[102,10419,2176],{"class":112},[102,10421,10422],{"class":104,"line":2593},[102,10423,1554],{"class":112},[102,10425,10426,10428,10430],{"class":104,"line":2599},[102,10427,116],{"class":108},[102,10429,1962],{"class":1952},[102,10431,1965],{"class":112},[102,10433,10434],{"class":104,"line":2605},[102,10435,1535],{"class":112},[102,10437,10438],{"class":104,"line":2610},[102,10439,10440],{"class":171},"    \u002F\u002F定义结构体变量\n",[102,10442,10443,10446,10448,10450],{"class":104,"line":7938},[102,10444,10445],{"class":112},"    Sanguo s1[",[102,10447,432],{"class":161},[102,10449,1053],{"class":112},[102,10451,4897],{"class":108},[102,10453,10454],{"class":104,"line":7962},[102,10455,2019],{"class":112},[102,10457,10458,10460,10462,10464,10466,10468,10470],{"class":104,"line":7967},[102,10459,4906],{"class":112},[102,10461,9942],{"class":217},[102,10463,491],{"class":112},[102,10465,888],{"class":161},[102,10467,491],{"class":112},[102,10469,9951],{"class":217},[102,10471,4919],{"class":112},[102,10473,10474,10476,10478,10480,10482,10484,10486],{"class":104,"line":7973},[102,10475,4906],{"class":112},[102,10477,9960],{"class":217},[102,10479,491],{"class":112},[102,10481,863],{"class":161},[102,10483,491],{"class":112},[102,10485,9951],{"class":217},[102,10487,4919],{"class":112},[102,10489,10490,10492,10494,10496,10498,10500,10502],{"class":104,"line":8000},[102,10491,4906],{"class":112},[102,10493,9977],{"class":217},[102,10495,491],{"class":112},[102,10497,813],{"class":161},[102,10499,491],{"class":112},[102,10501,9951],{"class":217},[102,10503,4919],{"class":112},[102,10505,10506,10508,10510,10512,10514,10516,10518],{"class":104,"line":8005},[102,10507,4906],{"class":112},[102,10509,9994],{"class":217},[102,10511,491],{"class":112},[102,10513,838],{"class":161},[102,10515,491],{"class":112},[102,10517,9951],{"class":217},[102,10519,4919],{"class":112},[102,10521,10522,10524,10526,10528,10530,10532,10534],{"class":104,"line":8011},[102,10523,4906],{"class":112},[102,10525,10011],{"class":217},[102,10527,491],{"class":112},[102,10529,788],{"class":161},[102,10531,491],{"class":112},[102,10533,10020],{"class":217},[102,10535,4919],{"class":112},[102,10537,10538],{"class":104,"line":8023},[102,10539,4940],{"class":112},[102,10541,10542,10544,10546,10548,10551,10553,10556,10558],{"class":104,"line":8035},[102,10543,1974],{"class":108},[102,10545,7321],{"class":112},[102,10547,4192],{"class":108},[102,10549,10550],{"class":112},"(s1)",[102,10552,4198],{"class":108},[102,10554,10555],{"class":112},"(s1[",[102,10557,304],{"class":161},[102,10559,3845],{"class":112},[102,10561,10562,10565,10567,10570,10572,10575,10578,10580],{"class":104,"line":8047},[102,10563,10564],{"class":112},"    Sanguo ",[102,10566,568],{"class":108},[102,10568,10569],{"class":112},"s ",[102,10571,158],{"class":108},[102,10573,10574],{"class":108}," &",[102,10576,10577],{"class":112},"s1[",[102,10579,304],{"class":161},[102,10581,4679],{"class":112},[102,10583,10584],{"class":104,"line":9706},[102,10585,10586],{"class":171},"    \u002F\u002F排序前：\n",[102,10588,10589,10591,10593,10596,10598],{"class":104,"line":9731},[102,10590,6519],{"class":112},[102,10592,1157],{"class":108},[102,10594,10595],{"class":217}," \"排序前：\"",[102,10597,1433],{"class":108},[102,10599,8830],{"class":112},[102,10601,10602,10604],{"class":104,"line":9754},[102,10603,9905],{"class":1952},[102,10605,10606],{"class":112},"(s,len);\n",[102,10608,10609],{"class":104,"line":9778},[102,10610,10611],{"class":171},"    \u002F\u002F调用排序函数\n",[102,10613,10614,10616],{"class":104,"line":9783},[102,10615,7588],{"class":1952},[102,10617,10606],{"class":112},[102,10619,10620],{"class":104,"line":9788},[102,10621,10622],{"class":171},"    \u002F\u002F排序后\n",[102,10624,10625,10627,10629,10632,10634],{"class":104,"line":9793},[102,10626,6519],{"class":112},[102,10628,1157],{"class":108},[102,10630,10631],{"class":217}," \"排序后：\"",[102,10633,1433],{"class":108},[102,10635,8830],{"class":112},[102,10637,10638,10640],{"class":104,"line":9802},[102,10639,9905],{"class":1952},[102,10641,10606],{"class":112},[102,10643,10644],{"class":104,"line":9807},[102,10645,1554],{"class":112},[19,10647,10648,10649,10651],{},"注意：使用指针时直接用传首地址**&s",[102,10650,304],{},"**",[5116,10653,10654],{},"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":23,"searchDepth":24,"depth":24,"links":10656},[10657,10658,10659,10660,10661,10662,10663],{"id":7693,"depth":24,"text":7694},{"id":8055,"depth":24,"text":8056},{"id":8324,"depth":24,"text":8325},{"id":8489,"depth":24,"text":8490},{"id":8705,"depth":24,"text":8706},{"id":9026,"depth":24,"text":9027},{"id":9254,"depth":24,"text":9255},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7682,"description":7690},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10670,"title":10671,"body":10672,"description":23,"extension":28,"meta":12015,"navigation":30,"path":12016,"seo":12017,"stem":12018,"__hash__":12019},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10673,"toc":12009},[10674,10677,10681,10687,10701,10706,10709,10713,10720,10726,10729,10736,10742,10747,10750,10753,10756,11320,11323,11337,11341,11346,11362,11502,11505,11511,11514,11519,11527,11635,11638,11643,11646,11651,11654,11660,11663,12006],[10,10675,10671],{"id":10676},"_5程序内存模型",[14,10678,10680],{"id":10679},"_51内存分区模型","5.1内存分区模型",[19,10682,10683,10684],{},"C++程序在执行时，将内存大方向划分为",[262,10685,10686],{},"4个区域",[1120,10688,10689,10692,10695,10698],{},[59,10690,10691],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[59,10693,10694],{},"全局区：存放全局变量和静态变量以及常量",[59,10696,10697],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[59,10699,10700],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10702,10703],{},[262,10704,10705],{},"内存四区意义：",[19,10707,10708],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[73,10710,10712],{"id":10711},"_511程序运行前","5.1.1程序运行前",[19,10714,10715,10716,10719],{},"​\t在程序编译后，生成了exe可执行程序，",[262,10717,10718],{},"未执行该程序前","分为两个区域",[19,10721,10722,10723],{},"​\t",[262,10724,10725],{},"代码区：",[19,10727,10728],{},"​\t\t存放 CPU 执行的机器指令",[19,10730,10731,10732,10735],{},"​\t\t代码区是",[262,10733,10734],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,10737,10731,10738,10741],{},[262,10739,10740],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,10743,10722,10744],{},[262,10745,10746],{},"全局区：",[19,10748,10749],{},"​\t\t全局变量和静态变量存放在此.",[19,10751,10752],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,10754,10755],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[93,10757,10759],{"className":95,"code":10758,"language":97,"meta":23,"style":23},"\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",[99,10760,10761,10766,10779,10792,10796,10801,10816,10831,10835,10844,10848,10853,10866,10879,10883,10888,10914,10940,10944,10971,10997,11001,11006,11022,11037,11041,11067,11093,11097,11122,11147,11151,11177,11203,11207,11223,11238,11264,11290,11294,11304,11308,11316],{"__ignoreMap":23},[102,10762,10763],{"class":104,"line":105},[102,10764,10765],{"class":171},"\u002F\u002F全局变量\n",[102,10767,10768,10770,10773,10775,10777],{"class":104,"line":24},[102,10769,116],{"class":108},[102,10771,10772],{"class":112}," g_a ",[102,10774,158],{"class":108},[102,10776,2027],{"class":161},[102,10778,1279],{"class":112},[102,10780,10781,10783,10786,10788,10790],{"class":104,"line":1168},[102,10782,116],{"class":108},[102,10784,10785],{"class":112}," g_b ",[102,10787,158],{"class":108},[102,10789,2027],{"class":161},[102,10791,1279],{"class":112},[102,10793,10794],{"class":104,"line":1183},[102,10795,2389],{"emptyLinePlaceholder":30},[102,10797,10798],{"class":104,"line":1189},[102,10799,10800],{"class":171},"\u002F\u002F全局常量\n",[102,10802,10803,10805,10807,10810,10812,10814],{"class":104,"line":1203},[102,10804,6782],{"class":108},[102,10806,2371],{"class":108},[102,10808,10809],{"class":112}," c_g_a ",[102,10811,158],{"class":108},[102,10813,2027],{"class":161},[102,10815,1279],{"class":112},[102,10817,10818,10820,10822,10825,10827,10829],{"class":104,"line":1209},[102,10819,6782],{"class":108},[102,10821,2371],{"class":108},[102,10823,10824],{"class":112}," c_g_b ",[102,10826,158],{"class":108},[102,10828,2027],{"class":161},[102,10830,1279],{"class":112},[102,10832,10833],{"class":104,"line":1300},[102,10834,2389],{"emptyLinePlaceholder":30},[102,10836,10837,10839,10841],{"class":104,"line":1306},[102,10838,116],{"class":108},[102,10840,1962],{"class":1952},[102,10842,10843],{"class":112},"() {\n",[102,10845,10846],{"class":104,"line":1318},[102,10847,2389],{"emptyLinePlaceholder":30},[102,10849,10850],{"class":104,"line":1601},[102,10851,10852],{"class":171},"    \u002F\u002F局部变量\n",[102,10854,10855,10857,10860,10862,10864],{"class":104,"line":1606},[102,10856,1974],{"class":108},[102,10858,10859],{"class":112}," a ",[102,10861,158],{"class":108},[102,10863,2027],{"class":161},[102,10865,1279],{"class":112},[102,10867,10868,10870,10873,10875,10877],{"class":104,"line":1612},[102,10869,1974],{"class":108},[102,10871,10872],{"class":112}," b ",[102,10874,158],{"class":108},[102,10876,2027],{"class":161},[102,10878,1279],{"class":112},[102,10880,10881],{"class":104,"line":1617},[102,10882,2389],{"emptyLinePlaceholder":30},[102,10884,10885],{"class":104,"line":1631},[102,10886,10887],{"class":171},"    \u002F\u002F打印地址\n",[102,10889,10890,10892,10894,10897,10899,10901,10903,10905,10907,10910,10912],{"class":104,"line":1636},[102,10891,6519],{"class":112},[102,10893,1157],{"class":108},[102,10895,10896],{"class":217}," \"局部变量a地址为： \"",[102,10898,1433],{"class":108},[102,10900,1647],{"class":112},[102,10902,116],{"class":108},[102,10904,542],{"class":112},[102,10906,466],{"class":108},[102,10908,10909],{"class":112},"a ",[102,10911,1157],{"class":108},[102,10913,8830],{"class":112},[102,10915,10916,10918,10920,10923,10925,10927,10929,10931,10933,10936,10938],{"class":104,"line":1642},[102,10917,6519],{"class":112},[102,10919,1157],{"class":108},[102,10921,10922],{"class":217}," \"局部变量b地址为： \"",[102,10924,1433],{"class":108},[102,10926,1647],{"class":112},[102,10928,116],{"class":108},[102,10930,542],{"class":112},[102,10932,466],{"class":108},[102,10934,10935],{"class":112},"b ",[102,10937,1157],{"class":108},[102,10939,8830],{"class":112},[102,10941,10942],{"class":104,"line":1663},[102,10943,2389],{"emptyLinePlaceholder":30},[102,10945,10946,10948,10950,10953,10955,10958,10960,10962,10964,10967,10969],{"class":104,"line":1668},[102,10947,6519],{"class":112},[102,10949,1157],{"class":108},[102,10951,10952],{"class":217}," \"全局变量g_a地址为： \"",[102,10954,1433],{"class":108},[102,10956,10957],{"class":112},"  (",[102,10959,116],{"class":108},[102,10961,542],{"class":112},[102,10963,466],{"class":108},[102,10965,10966],{"class":112},"g_a ",[102,10968,1157],{"class":108},[102,10970,8830],{"class":112},[102,10972,10973,10975,10977,10980,10982,10984,10986,10988,10990,10993,10995],{"class":104,"line":1682},[102,10974,6519],{"class":112},[102,10976,1157],{"class":108},[102,10978,10979],{"class":217}," \"全局变量g_b地址为： \"",[102,10981,1433],{"class":108},[102,10983,10957],{"class":112},[102,10985,116],{"class":108},[102,10987,542],{"class":112},[102,10989,466],{"class":108},[102,10991,10992],{"class":112},"g_b ",[102,10994,1157],{"class":108},[102,10996,8830],{"class":112},[102,10998,10999],{"class":104,"line":1687},[102,11000,2389],{"emptyLinePlaceholder":30},[102,11002,11003],{"class":104,"line":1716},[102,11004,11005],{"class":171},"    \u002F\u002F静态变量\n",[102,11007,11008,11011,11013,11016,11018,11020],{"class":104,"line":1721},[102,11009,11010],{"class":108},"    static",[102,11012,2371],{"class":108},[102,11014,11015],{"class":112}," s_a ",[102,11017,158],{"class":108},[102,11019,2027],{"class":161},[102,11021,1279],{"class":112},[102,11023,11024,11026,11028,11031,11033,11035],{"class":104,"line":1738},[102,11025,11010],{"class":108},[102,11027,2371],{"class":108},[102,11029,11030],{"class":112}," s_b ",[102,11032,158],{"class":108},[102,11034,2027],{"class":161},[102,11036,1279],{"class":112},[102,11038,11039],{"class":104,"line":1743},[102,11040,2389],{"emptyLinePlaceholder":30},[102,11042,11043,11045,11047,11050,11052,11054,11056,11058,11060,11063,11065],{"class":104,"line":1748},[102,11044,6519],{"class":112},[102,11046,1157],{"class":108},[102,11048,11049],{"class":217}," \"静态变量s_a地址为： \"",[102,11051,1433],{"class":108},[102,11053,1647],{"class":112},[102,11055,116],{"class":108},[102,11057,542],{"class":112},[102,11059,466],{"class":108},[102,11061,11062],{"class":112},"s_a ",[102,11064,1157],{"class":108},[102,11066,8830],{"class":112},[102,11068,11069,11071,11073,11076,11078,11080,11082,11084,11086,11089,11091],{"class":104,"line":1753},[102,11070,6519],{"class":112},[102,11072,1157],{"class":108},[102,11074,11075],{"class":217}," \"静态变量s_b地址为： \"",[102,11077,1433],{"class":108},[102,11079,1647],{"class":112},[102,11081,116],{"class":108},[102,11083,542],{"class":112},[102,11085,466],{"class":108},[102,11087,11088],{"class":112},"s_b ",[102,11090,1157],{"class":108},[102,11092,8830],{"class":112},[102,11094,11095],{"class":104,"line":1767},[102,11096,2389],{"emptyLinePlaceholder":30},[102,11098,11099,11101,11103,11106,11108,11110,11112,11114,11116,11118,11120],{"class":104,"line":1772},[102,11100,6519],{"class":112},[102,11102,1157],{"class":108},[102,11104,11105],{"class":217}," \"字符串常量地址为： \"",[102,11107,1433],{"class":108},[102,11109,1647],{"class":112},[102,11111,116],{"class":108},[102,11113,542],{"class":112},[102,11115,466],{"class":108},[102,11117,1175],{"class":217},[102,11119,1433],{"class":108},[102,11121,8830],{"class":112},[102,11123,11124,11126,11128,11130,11132,11134,11136,11138,11140,11143,11145],{"class":104,"line":2566},[102,11125,6519],{"class":112},[102,11127,1157],{"class":108},[102,11129,11105],{"class":217},[102,11131,1433],{"class":108},[102,11133,1647],{"class":112},[102,11135,116],{"class":108},[102,11137,542],{"class":112},[102,11139,466],{"class":108},[102,11141,11142],{"class":217},"\"hello world1\"",[102,11144,1433],{"class":108},[102,11146,8830],{"class":112},[102,11148,11149],{"class":104,"line":2580},[102,11150,2389],{"emptyLinePlaceholder":30},[102,11152,11153,11155,11157,11160,11162,11164,11166,11168,11170,11173,11175],{"class":104,"line":2588},[102,11154,6519],{"class":112},[102,11156,1157],{"class":108},[102,11158,11159],{"class":217}," \"全局常量c_g_a地址为： \"",[102,11161,1433],{"class":108},[102,11163,1647],{"class":112},[102,11165,116],{"class":108},[102,11167,542],{"class":112},[102,11169,466],{"class":108},[102,11171,11172],{"class":112},"c_g_a ",[102,11174,1157],{"class":108},[102,11176,8830],{"class":112},[102,11178,11179,11181,11183,11186,11188,11190,11192,11194,11196,11199,11201],{"class":104,"line":2593},[102,11180,6519],{"class":112},[102,11182,1157],{"class":108},[102,11184,11185],{"class":217}," \"全局常量c_g_b地址为： \"",[102,11187,1433],{"class":108},[102,11189,1647],{"class":112},[102,11191,116],{"class":108},[102,11193,542],{"class":112},[102,11195,466],{"class":108},[102,11197,11198],{"class":112},"c_g_b ",[102,11200,1157],{"class":108},[102,11202,8830],{"class":112},[102,11204,11205],{"class":104,"line":2599},[102,11206,2389],{"emptyLinePlaceholder":30},[102,11208,11209,11212,11214,11217,11219,11221],{"class":104,"line":2605},[102,11210,11211],{"class":108},"    const",[102,11213,2371],{"class":108},[102,11215,11216],{"class":112}," c_l_a ",[102,11218,158],{"class":108},[102,11220,2027],{"class":161},[102,11222,1279],{"class":112},[102,11224,11225,11227,11229,11232,11234,11236],{"class":104,"line":2610},[102,11226,11211],{"class":108},[102,11228,2371],{"class":108},[102,11230,11231],{"class":112}," c_l_b ",[102,11233,158],{"class":108},[102,11235,2027],{"class":161},[102,11237,1279],{"class":112},[102,11239,11240,11242,11244,11247,11249,11251,11253,11255,11257,11260,11262],{"class":104,"line":7938},[102,11241,6519],{"class":112},[102,11243,1157],{"class":108},[102,11245,11246],{"class":217}," \"局部常量c_l_a地址为： \"",[102,11248,1433],{"class":108},[102,11250,1647],{"class":112},[102,11252,116],{"class":108},[102,11254,542],{"class":112},[102,11256,466],{"class":108},[102,11258,11259],{"class":112},"c_l_a ",[102,11261,1157],{"class":108},[102,11263,8830],{"class":112},[102,11265,11266,11268,11270,11273,11275,11277,11279,11281,11283,11286,11288],{"class":104,"line":7962},[102,11267,6519],{"class":112},[102,11269,1157],{"class":108},[102,11271,11272],{"class":217}," \"局部常量c_l_b地址为： \"",[102,11274,1433],{"class":108},[102,11276,1647],{"class":112},[102,11278,116],{"class":108},[102,11280,542],{"class":112},[102,11282,466],{"class":108},[102,11284,11285],{"class":112},"c_l_b ",[102,11287,1157],{"class":108},[102,11289,8830],{"class":112},[102,11291,11292],{"class":104,"line":7967},[102,11293,2389],{"emptyLinePlaceholder":30},[102,11295,11296,11298,11300,11302],{"class":104,"line":7973},[102,11297,2292],{"class":1952},[102,11299,113],{"class":112},[102,11301,2297],{"class":217},[102,11303,2708],{"class":112},[102,11305,11306],{"class":104,"line":8000},[102,11307,2389],{"emptyLinePlaceholder":30},[102,11309,11310,11312,11314],{"class":104,"line":8005},[102,11311,4079],{"class":108},[102,11313,4082],{"class":161},[102,11315,1279],{"class":112},[102,11317,11318],{"class":104,"line":8011},[102,11319,1554],{"class":112},[19,11321,11322],{},"总结：",[1120,11324,11325,11328,11331,11334],{},[59,11326,11327],{},"c++中程序运行前分为全局区和代码区",[59,11329,11330],{},"代码区特点是共享和只读",[59,11332,11333],{},"全局区中存放全局变量、静态变量、常量",[59,11335,11336],{},"常量区中存放const修饰的全局常量和字符串常量",[73,11338,11340],{"id":11339},"_512程序运行后","5.1.2程序运行后",[56,11342,11343],{},[59,11344,11345],{},"栈区：",[1120,11347,11348,11355],{},[59,11349,11350,11351,11354],{},"由编译器自动分配释放, 存放",[262,11352,11353],{},"函数的参数值,局部变量","等",[59,11356,11357,11358,11361],{},"注意事项：",[262,11359,11360],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[93,11363,11365],{"className":95,"code":11364,"language":97,"meta":23,"style":23},"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",[99,11366,11367,11378,11382,11397,11409,11413,11417,11425,11430,11445,11463,11480,11490,11498],{"__ignoreMap":23},[102,11368,11369,11371,11373,11376],{"class":104,"line":105},[102,11370,116],{"class":108},[102,11372,6508],{"class":108},[102,11374,11375],{"class":1952}," func",[102,11377,1965],{"class":112},[102,11379,11380],{"class":104,"line":24},[102,11381,1535],{"class":112},[102,11383,11384,11386,11388,11390,11392,11394],{"class":104,"line":1168},[102,11385,1974],{"class":108},[102,11387,10859],{"class":112},[102,11389,158],{"class":108},[102,11391,2027],{"class":161},[102,11393,168],{"class":112},[102,11395,11396],{"class":171}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[102,11398,11399,11401,11403,11406],{"class":104,"line":1183},[102,11400,4079],{"class":108},[102,11402,10574],{"class":108},[102,11404,11405],{"class":112},"a;",[102,11407,11408],{"class":171}," \u002F\u002F放回局部变量的地址\n",[102,11410,11411],{"class":104,"line":1189},[102,11412,1554],{"class":112},[102,11414,11415],{"class":104,"line":1203},[102,11416,2389],{"emptyLinePlaceholder":30},[102,11418,11419,11421,11423],{"class":104,"line":1209},[102,11420,116],{"class":108},[102,11422,1962],{"class":1952},[102,11424,10843],{"class":112},[102,11426,11427],{"class":104,"line":1300},[102,11428,11429],{"class":171},"    \u002F\u002F接受func的返回值\n",[102,11431,11432,11434,11436,11439,11441,11443],{"class":104,"line":1306},[102,11433,1974],{"class":108},[102,11435,6508],{"class":108},[102,11437,11438],{"class":112},"p ",[102,11440,158],{"class":108},[102,11442,11375],{"class":1952},[102,11444,5626],{"class":112},[102,11446,11447,11449,11451,11453,11455,11457,11460],{"class":104,"line":1318},[102,11448,6519],{"class":112},[102,11450,1157],{"class":108},[102,11452,6508],{"class":108},[102,11454,11438],{"class":112},[102,11456,1157],{"class":108},[102,11458,11459],{"class":112}," endl;",[102,11461,11462],{"class":171}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[102,11464,11465,11467,11469,11471,11473,11475,11477],{"class":104,"line":1601},[102,11466,6519],{"class":112},[102,11468,1157],{"class":108},[102,11470,6508],{"class":108},[102,11472,11438],{"class":112},[102,11474,1157],{"class":108},[102,11476,11459],{"class":112},[102,11478,11479],{"class":171}," \u002F\u002F第二次这个数据不再保留\n",[102,11481,11482,11484,11486,11488],{"class":104,"line":1606},[102,11483,2292],{"class":1952},[102,11485,113],{"class":112},[102,11487,2297],{"class":217},[102,11489,2708],{"class":112},[102,11491,11492,11494,11496],{"class":104,"line":1612},[102,11493,4079],{"class":108},[102,11495,4082],{"class":161},[102,11497,1279],{"class":112},[102,11499,11500],{"class":104,"line":1617},[102,11501,1554],{"class":112},[19,11503,11504],{},"输出结果：",[19,11506,11507],{},[1451,11508],{"alt":11509,"src":11510},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11512,11513],{},"总结：不要返回局部变量的地址",[56,11515,11516],{"start":24},[59,11517,11518],{},"堆区",[1120,11520,11521,11524],{},[59,11522,11523],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[59,11525,11526],{},"在c++中主要利用new在堆区开辟内存",[93,11528,11530],{"className":95,"code":11529,"language":97,"meta":23,"style":23},"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",[99,11531,11532,11547,11551,11556,11577,11584,11588,11596,11600,11605,11619,11631],{"__ignoreMap":23},[102,11533,11534,11536,11539,11542,11544],{"class":104,"line":105},[102,11535,116],{"class":108},[102,11537,11538],{"class":108},"  *",[102,11540,11541],{"class":1952},"func",[102,11543,2416],{"class":112},[102,11545,11546],{"class":171},"  \u002F\u002F函数返回指针\n",[102,11548,11549],{"class":104,"line":24},[102,11550,1535],{"class":112},[102,11552,11553],{"class":104,"line":1168},[102,11554,11555],{"class":171},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[102,11557,11558,11560,11562,11564,11566,11569,11571,11573,11575],{"class":104,"line":1183},[102,11559,4136],{"class":108},[102,11561,6508],{"class":108},[102,11563,19],{"class":112},[102,11565,158],{"class":108},[102,11567,11568],{"class":108}," new",[102,11570,2371],{"class":108},[102,11572,113],{"class":112},[102,11574,559],{"class":161},[102,11576,2708],{"class":112},[102,11578,11579,11581],{"class":104,"line":1189},[102,11580,4370],{"class":108},[102,11582,11583],{"class":112}," p;\n",[102,11585,11586],{"class":104,"line":1203},[102,11587,1554],{"class":112},[102,11589,11590,11592,11594],{"class":104,"line":1209},[102,11591,116],{"class":108},[102,11593,1962],{"class":1952},[102,11595,1965],{"class":112},[102,11597,11598],{"class":104,"line":1300},[102,11599,1535],{"class":112},[102,11601,11602],{"class":104,"line":1306},[102,11603,11604],{"class":171},"    \u002F\u002F在堆区开辟数据\n",[102,11606,11607,11609,11611,11613,11615,11617],{"class":104,"line":1318},[102,11608,1974],{"class":108},[102,11610,6508],{"class":108},[102,11612,19],{"class":112},[102,11614,158],{"class":108},[102,11616,11541],{"class":1952},[102,11618,5626],{"class":112},[102,11620,11621,11623,11625,11627,11629],{"class":104,"line":1601},[102,11622,1540],{"class":112},[102,11624,6409],{"class":108},[102,11626,19],{"class":112},[102,11628,1157],{"class":108},[102,11630,1180],{"class":112},[102,11632,11633],{"class":104,"line":1606},[102,11634,1554],{"class":112},[19,11636,11637],{},"图片展示：",[19,11639,11640],{},[1451,11641],{"alt":11509,"src":11642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11644,11645],{},"堆区内存由程序员管生死！！！",[56,11647,11648],{"start":1168},[59,11649,11650],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11652,11653],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11655,11656,11657],{},"​语法：",[99,11658,11659],{}," new 数据类型",[19,11661,11662],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[93,11664,11666],{"className":95,"code":11665,"language":97,"meta":23,"style":23},"\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",[99,11667,11668,11673,11683,11687,11692,11697,11719,11723,11731,11735,11749,11761,11773,11785,11790,11795,11806,11810,11815,11823,11827,11832,11854,11880,11884,11902,11906,11932,11936,11948,11952,11957,11962,11970,11974,11978,11986,11990,11996,12002],{"__ignoreMap":23},[102,11669,11670],{"class":104,"line":105},[102,11671,11672],{"class":171},"\u002F\u002F1.new的基本语法\n",[102,11674,11675,11677,11679,11681],{"class":104,"line":24},[102,11676,116],{"class":108},[102,11678,6508],{"class":108},[102,11680,11541],{"class":1952},[102,11682,1965],{"class":112},[102,11684,11685],{"class":104,"line":1168},[102,11686,1535],{"class":112},[102,11688,11689],{"class":104,"line":1183},[102,11690,11691],{"class":171},"    \u002F\u002F在堆区创建整型数据\n",[102,11693,11694],{"class":104,"line":1189},[102,11695,11696],{"class":171},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[102,11698,11699,11701,11703,11705,11708,11710,11712,11714,11716],{"class":104,"line":1203},[102,11700,1974],{"class":108},[102,11702,6508],{"class":108},[102,11704,19],{"class":112},[102,11706,11707],{"class":108},"=new",[102,11709,2371],{"class":108},[102,11711,113],{"class":112},[102,11713,559],{"class":161},[102,11715,5956],{"class":112},[102,11717,11718],{"class":171},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[102,11720,11721],{"class":104,"line":1209},[102,11722,1554],{"class":112},[102,11724,11725,11727,11729],{"class":104,"line":1300},[102,11726,5354],{"class":108},[102,11728,5578],{"class":1952},[102,11730,1965],{"class":112},[102,11732,11733],{"class":104,"line":1306},[102,11734,1535],{"class":112},[102,11736,11737,11739,11741,11743,11745,11747],{"class":104,"line":1318},[102,11738,1974],{"class":108},[102,11740,6508],{"class":108},[102,11742,19],{"class":112},[102,11744,158],{"class":108},[102,11746,11541],{"class":1952},[102,11748,5626],{"class":112},[102,11750,11751,11753,11755,11757,11759],{"class":104,"line":1601},[102,11752,1540],{"class":112},[102,11754,6409],{"class":108},[102,11756,19],{"class":112},[102,11758,1157],{"class":108},[102,11760,1180],{"class":112},[102,11762,11763,11765,11767,11769,11771],{"class":104,"line":1606},[102,11764,1540],{"class":112},[102,11766,6409],{"class":108},[102,11768,19],{"class":112},[102,11770,1157],{"class":108},[102,11772,1180],{"class":112},[102,11774,11775,11777,11779,11781,11783],{"class":104,"line":1612},[102,11776,1540],{"class":112},[102,11778,6409],{"class":108},[102,11780,19],{"class":112},[102,11782,1157],{"class":108},[102,11784,1180],{"class":112},[102,11786,11787],{"class":104,"line":1617},[102,11788,11789],{"class":171},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[102,11791,11792],{"class":104,"line":1631},[102,11793,11794],{"class":171},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[102,11796,11797,11800,11803],{"class":104,"line":1636},[102,11798,11799],{"class":108},"    delete",[102,11801,11802],{"class":112}," p;",[102,11804,11805],{"class":171},"\u002F\u002F删除这块地址\n",[102,11807,11808],{"class":104,"line":1642},[102,11809,1554],{"class":112},[102,11811,11812],{"class":104,"line":1663},[102,11813,11814],{"class":171},"\u002F\u002F2.在堆区利用new开辟数组\n",[102,11816,11817,11819,11821],{"class":104,"line":1668},[102,11818,5354],{"class":108},[102,11820,5647],{"class":1952},[102,11822,1965],{"class":112},[102,11824,11825],{"class":104,"line":1682},[102,11826,1535],{"class":112},[102,11828,11829],{"class":104,"line":1687},[102,11830,11831],{"class":171},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[102,11833,11834,11836,11838,11840,11842,11844,11846,11848,11851],{"class":104,"line":1716},[102,11835,1974],{"class":108},[102,11837,6508],{"class":108},[102,11839,3869],{"class":112},[102,11841,11707],{"class":108},[102,11843,2371],{"class":108},[102,11845,1003],{"class":112},[102,11847,559],{"class":161},[102,11849,11850],{"class":112},"];",[102,11852,11853],{"class":171},"\u002F\u002F10代表数组有10个元素\n",[102,11855,11856,11858,11860,11862,11864,11866,11868,11870,11872,11874,11876,11878],{"class":104,"line":1721},[102,11857,3190],{"class":108},[102,11859,1647],{"class":112},[102,11861,116],{"class":108},[102,11863,3021],{"class":112},[102,11865,158],{"class":108},[102,11867,304],{"class":161},[102,11869,3028],{"class":112},[102,11871,1023],{"class":108},[102,11873,559],{"class":161},[102,11875,3028],{"class":112},[102,11877,2281],{"class":108},[102,11879,119],{"class":112},[102,11881,11882],{"class":104,"line":1738},[102,11883,2019],{"class":112},[102,11885,11886,11889,11891,11893,11895,11897,11899],{"class":104,"line":1743},[102,11887,11888],{"class":112},"        arr[i]",[102,11890,158],{"class":108},[102,11892,554],{"class":112},[102,11894,594],{"class":108},[102,11896,424],{"class":161},[102,11898,168],{"class":112},[102,11900,11901],{"class":171},"\u002F\u002F给10个元素赋值100～109\n",[102,11903,11904],{"class":104,"line":1748},[102,11905,2176],{"class":112},[102,11907,11908,11910,11912,11914,11916,11918,11920,11922,11924,11926,11928,11930],{"class":104,"line":1753},[102,11909,3190],{"class":108},[102,11911,1647],{"class":112},[102,11913,116],{"class":108},[102,11915,3021],{"class":112},[102,11917,158],{"class":108},[102,11919,304],{"class":161},[102,11921,3028],{"class":112},[102,11923,1023],{"class":108},[102,11925,559],{"class":161},[102,11927,3028],{"class":112},[102,11929,2281],{"class":108},[102,11931,119],{"class":112},[102,11933,11934],{"class":104,"line":1767},[102,11935,2019],{"class":112},[102,11937,11938,11940,11942,11944,11946],{"class":104,"line":1772},[102,11939,3440],{"class":112},[102,11941,1157],{"class":108},[102,11943,4343],{"class":112},[102,11945,1157],{"class":108},[102,11947,1180],{"class":112},[102,11949,11950],{"class":104,"line":2566},[102,11951,2176],{"class":112},[102,11953,11954],{"class":104,"line":2580},[102,11955,11956],{"class":171},"    \u002F\u002F释放堆区数组\n",[102,11958,11959],{"class":104,"line":2588},[102,11960,11961],{"class":171},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[102,11963,11964,11967],{"class":104,"line":2593},[102,11965,11966],{"class":108},"    delete[]",[102,11968,11969],{"class":112}," arr;\n",[102,11971,11972],{"class":104,"line":2599},[102,11973,1554],{"class":112},[102,11975,11976],{"class":104,"line":2605},[102,11977,2389],{"emptyLinePlaceholder":30},[102,11979,11980,11982,11984],{"class":104,"line":2610},[102,11981,116],{"class":108},[102,11983,1962],{"class":1952},[102,11985,1965],{"class":112},[102,11987,11988],{"class":104,"line":7938},[102,11989,1535],{"class":112},[102,11991,11992,11994],{"class":104,"line":7962},[102,11993,5623],{"class":1952},[102,11995,5626],{"class":112},[102,11997,11998,12000],{"class":104,"line":7967},[102,11999,5692],{"class":1952},[102,12001,5626],{"class":112},[102,12003,12004],{"class":104,"line":7973},[102,12005,1554],{"class":112},[5116,12007,12008],{},"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":23,"searchDepth":24,"depth":24,"links":12010},[12011],{"id":10679,"depth":24,"text":10680,"children":12012},[12013,12014],{"id":10711,"depth":1168,"text":10712},{"id":11339,"depth":1168,"text":11340},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10671,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12021,"title":12022,"body":12023,"description":23,"extension":28,"meta":13504,"navigation":30,"path":13505,"seo":13506,"stem":13507,"__hash__":13508},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12024,"toc":13496},[12025,12028,12032,12035,12038,12207,12211,12216,12233,12238,12390,12394,12397,12400,12794,12798,12801,12806,12809,13121,13125,13131,13291,13293,13301,13305,13308,13315,13493],[10,12026,12022],{"id":12027},"_6引用",[14,12029,12031],{"id":12030},"_61引用基本用法","6.1引用基本用法",[19,12033,12034],{},"引用的本质：给变量起别名",[19,12036,12037],{},"语法：数据类型 &别名=原名",[93,12039,12041],{"className":95,"code":12040,"language":97,"meta":23,"style":23},"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",[99,12042,12043,12051,12055,12067,12079,12083,12102,12121,12125,12136,12140,12159,12177,12181,12191,12195,12203],{"__ignoreMap":23},[102,12044,12045,12047,12049],{"class":104,"line":105},[102,12046,116],{"class":108},[102,12048,1962],{"class":1952},[102,12050,10843],{"class":112},[102,12052,12053],{"class":104,"line":24},[102,12054,2389],{"emptyLinePlaceholder":30},[102,12056,12057,12059,12061,12063,12065],{"class":104,"line":1168},[102,12058,1974],{"class":108},[102,12060,10859],{"class":112},[102,12062,158],{"class":108},[102,12064,2027],{"class":161},[102,12066,1279],{"class":112},[102,12068,12069,12071,12073,12075,12077],{"class":104,"line":1183},[102,12070,1974],{"class":108},[102,12072,10574],{"class":108},[102,12074,10935],{"class":112},[102,12076,158],{"class":108},[102,12078,1421],{"class":112},[102,12080,12081],{"class":104,"line":1189},[102,12082,2389],{"emptyLinePlaceholder":30},[102,12084,12085,12087,12089,12092,12094,12096,12098,12100],{"class":104,"line":1203},[102,12086,6519],{"class":112},[102,12088,1157],{"class":108},[102,12090,12091],{"class":217}," \"a = \"",[102,12093,1433],{"class":108},[102,12095,10859],{"class":112},[102,12097,1157],{"class":108},[102,12099,11459],{"class":112},[102,12101,7258],{"class":171},[102,12103,12104,12106,12108,12111,12113,12115,12117,12119],{"class":104,"line":1209},[102,12105,6519],{"class":112},[102,12107,1157],{"class":108},[102,12109,12110],{"class":217}," \"b = \"",[102,12112,1433],{"class":108},[102,12114,10872],{"class":112},[102,12116,1157],{"class":108},[102,12118,11459],{"class":112},[102,12120,7258],{"class":171},[102,12122,12123],{"class":104,"line":1300},[102,12124,2389],{"emptyLinePlaceholder":30},[102,12126,12127,12130,12132,12134],{"class":104,"line":1306},[102,12128,12129],{"class":112},"    b ",[102,12131,158],{"class":108},[102,12133,5744],{"class":161},[102,12135,1279],{"class":112},[102,12137,12138],{"class":104,"line":1318},[102,12139,2389],{"emptyLinePlaceholder":30},[102,12141,12142,12144,12146,12148,12150,12152,12154,12156],{"class":104,"line":1601},[102,12143,6519],{"class":112},[102,12145,1157],{"class":108},[102,12147,12091],{"class":217},[102,12149,1433],{"class":108},[102,12151,10859],{"class":112},[102,12153,1157],{"class":108},[102,12155,11459],{"class":112},[102,12157,12158],{"class":171},"\u002F\u002F100\n",[102,12160,12161,12163,12165,12167,12169,12171,12173,12175],{"class":104,"line":1606},[102,12162,6519],{"class":112},[102,12164,1157],{"class":108},[102,12166,12110],{"class":217},[102,12168,1433],{"class":108},[102,12170,10872],{"class":112},[102,12172,1157],{"class":108},[102,12174,11459],{"class":112},[102,12176,12158],{"class":171},[102,12178,12179],{"class":104,"line":1612},[102,12180,2389],{"emptyLinePlaceholder":30},[102,12182,12183,12185,12187,12189],{"class":104,"line":1617},[102,12184,2292],{"class":1952},[102,12186,113],{"class":112},[102,12188,2297],{"class":217},[102,12190,2708],{"class":112},[102,12192,12193],{"class":104,"line":1631},[102,12194,2389],{"emptyLinePlaceholder":30},[102,12196,12197,12199,12201],{"class":104,"line":1636},[102,12198,4079],{"class":108},[102,12200,4082],{"class":161},[102,12202,1279],{"class":112},[102,12204,12205],{"class":104,"line":1642},[102,12206,1554],{"class":112},[14,12208,12210],{"id":12209},"_62引用的注意事项","6.2引用的注意事项",[56,12212,12213],{},[59,12214,12215],{},"引用必须要初始化",[93,12217,12219],{"className":95,"code":12218,"language":97,"meta":23,"style":23},"int &b;\u002F\u002F非常错误！\n",[99,12220,12221],{"__ignoreMap":23},[102,12222,12223,12225,12227,12230],{"class":104,"line":105},[102,12224,116],{"class":108},[102,12226,10574],{"class":108},[102,12228,12229],{"class":112},"b;",[102,12231,12232],{"class":171},"\u002F\u002F非常错误！\n",[56,12234,12235],{"start":24},[59,12236,12237],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[93,12239,12241],{"className":95,"code":12240,"language":97,"meta":23,"style":23},"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",[99,12242,12243,12251,12263,12275,12283,12299,12312,12330,12348,12368,12378,12386],{"__ignoreMap":23},[102,12244,12245,12247,12249],{"class":104,"line":105},[102,12246,116],{"class":108},[102,12248,1962],{"class":1952},[102,12250,10843],{"class":112},[102,12252,12253,12255,12257,12259,12261],{"class":104,"line":24},[102,12254,1974],{"class":108},[102,12256,10859],{"class":112},[102,12258,158],{"class":108},[102,12260,2027],{"class":161},[102,12262,1279],{"class":112},[102,12264,12265,12267,12269,12271,12273],{"class":104,"line":1168},[102,12266,1974],{"class":108},[102,12268,10872],{"class":112},[102,12270,158],{"class":108},[102,12272,8940],{"class":161},[102,12274,1279],{"class":112},[102,12276,12277,12280],{"class":104,"line":1183},[102,12278,12279],{"class":171},"    \u002F\u002Fint &c;",[102,12281,12282],{"class":171}," \u002F\u002F错误，引用必须初始化\n",[102,12284,12285,12287,12289,12291,12293,12296],{"class":104,"line":1189},[102,12286,1974],{"class":108},[102,12288,10574],{"class":108},[102,12290,2935],{"class":112},[102,12292,158],{"class":108},[102,12294,12295],{"class":112}," a;",[102,12297,12298],{"class":171}," \u002F\u002F一旦初始化后，就不可以更改\n",[102,12300,12301,12304,12306,12309],{"class":104,"line":1203},[102,12302,12303],{"class":112},"    c ",[102,12305,158],{"class":108},[102,12307,12308],{"class":112}," b;",[102,12310,12311],{"class":171}," \u002F\u002F这是赋值操作，不是更改引用\n",[102,12313,12314,12316,12318,12320,12322,12324,12326,12328],{"class":104,"line":1209},[102,12315,6519],{"class":112},[102,12317,1157],{"class":108},[102,12319,12091],{"class":217},[102,12321,1433],{"class":108},[102,12323,10859],{"class":112},[102,12325,1157],{"class":108},[102,12327,11459],{"class":112},[102,12329,7243],{"class":171},[102,12331,12332,12334,12336,12338,12340,12342,12344,12346],{"class":104,"line":1300},[102,12333,6519],{"class":112},[102,12335,1157],{"class":108},[102,12337,12110],{"class":217},[102,12339,1433],{"class":108},[102,12341,10872],{"class":112},[102,12343,1157],{"class":108},[102,12345,11459],{"class":112},[102,12347,7243],{"class":171},[102,12349,12350,12352,12354,12357,12359,12362,12364,12366],{"class":104,"line":1306},[102,12351,6519],{"class":112},[102,12353,1157],{"class":108},[102,12355,12356],{"class":217}," \"c = \"",[102,12358,1433],{"class":108},[102,12360,12361],{"class":112}," c ",[102,12363,1157],{"class":108},[102,12365,11459],{"class":112},[102,12367,7243],{"class":171},[102,12369,12370,12372,12374,12376],{"class":104,"line":1318},[102,12371,2292],{"class":1952},[102,12373,113],{"class":112},[102,12375,2297],{"class":217},[102,12377,2708],{"class":112},[102,12379,12380,12382,12384],{"class":104,"line":1601},[102,12381,4079],{"class":108},[102,12383,4082],{"class":161},[102,12385,1279],{"class":112},[102,12387,12388],{"class":104,"line":1606},[102,12389,1554],{"class":112},[14,12391,12393],{"id":12392},"_63引用做函数参数","6.3引用做函数参数",[19,12395,12396],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12398,12399],{},"优点：可以简化指针修改实参",[93,12401,12403],{"className":95,"code":12402,"language":97,"meta":23,"style":23},"\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",[99,12404,12405,12410,12433,12444,12454,12463,12467,12471,12476,12498,12510,12522,12532,12536,12540,12545,12567,12577,12585,12593,12597,12601,12609,12613,12625,12637,12641,12652,12678,12682,12702,12726,12730,12740,12764,12768,12778,12782,12790],{"__ignoreMap":23},[102,12406,12407],{"class":104,"line":105},[102,12408,12409],{"class":171},"\u002F\u002F1. 值传递\n",[102,12411,12412,12414,12417,12419,12421,12423,12426,12428,12430],{"class":104,"line":24},[102,12413,5354],{"class":108},[102,12415,12416],{"class":1952}," mySwap01",[102,12418,113],{"class":112},[102,12420,116],{"class":108},[102,12422,1387],{"class":5206},[102,12424,12425],{"class":112},", ",[102,12427,116],{"class":108},[102,12429,2822],{"class":5206},[102,12431,12432],{"class":112},") {\n",[102,12434,12435,12437,12440,12442],{"class":104,"line":1168},[102,12436,1974],{"class":108},[102,12438,12439],{"class":112}," temp ",[102,12441,158],{"class":108},[102,12443,1421],{"class":112},[102,12445,12446,12449,12451],{"class":104,"line":1183},[102,12447,12448],{"class":112},"    a ",[102,12450,158],{"class":108},[102,12452,12453],{"class":112}," b;\n",[102,12455,12456,12458,12460],{"class":104,"line":1189},[102,12457,12129],{"class":112},[102,12459,158],{"class":108},[102,12461,12462],{"class":112}," temp;\n",[102,12464,12465],{"class":104,"line":1203},[102,12466,1554],{"class":112},[102,12468,12469],{"class":104,"line":1209},[102,12470,2389],{"emptyLinePlaceholder":30},[102,12472,12473],{"class":104,"line":1300},[102,12474,12475],{"class":171},"\u002F\u002F2. 地址传递\n",[102,12477,12478,12480,12483,12485,12488,12490,12492,12494,12496],{"class":104,"line":1306},[102,12479,5354],{"class":108},[102,12481,12482],{"class":1952}," mySwap02",[102,12484,113],{"class":112},[102,12486,12487],{"class":108},"int*",[102,12489,1387],{"class":5206},[102,12491,12425],{"class":112},[102,12493,12487],{"class":108},[102,12495,2822],{"class":5206},[102,12497,12432],{"class":112},[102,12499,12500,12502,12504,12506,12508],{"class":104,"line":1318},[102,12501,1974],{"class":108},[102,12503,12439],{"class":112},[102,12505,158],{"class":108},[102,12507,6508],{"class":108},[102,12509,6187],{"class":112},[102,12511,12512,12514,12516,12518,12520],{"class":104,"line":1601},[102,12513,6393],{"class":108},[102,12515,10909],{"class":112},[102,12517,158],{"class":108},[102,12519,6508],{"class":108},[102,12521,6059],{"class":112},[102,12523,12524,12526,12528,12530],{"class":104,"line":1606},[102,12525,6393],{"class":108},[102,12527,10935],{"class":112},[102,12529,158],{"class":108},[102,12531,12462],{"class":112},[102,12533,12534],{"class":104,"line":1612},[102,12535,1554],{"class":112},[102,12537,12538],{"class":104,"line":1617},[102,12539,2389],{"emptyLinePlaceholder":30},[102,12541,12542],{"class":104,"line":1631},[102,12543,12544],{"class":171},"\u002F\u002F3. 引用传递\n",[102,12546,12547,12549,12552,12554,12557,12559,12561,12563,12565],{"class":104,"line":1636},[102,12548,5354],{"class":108},[102,12550,12551],{"class":1952}," mySwap03",[102,12553,113],{"class":112},[102,12555,12556],{"class":108},"int&",[102,12558,1387],{"class":5206},[102,12560,12425],{"class":112},[102,12562,12556],{"class":108},[102,12564,2822],{"class":5206},[102,12566,12432],{"class":112},[102,12568,12569,12571,12573,12575],{"class":104,"line":1642},[102,12570,1974],{"class":108},[102,12572,12439],{"class":112},[102,12574,158],{"class":108},[102,12576,1421],{"class":112},[102,12578,12579,12581,12583],{"class":104,"line":1663},[102,12580,12448],{"class":112},[102,12582,158],{"class":108},[102,12584,12453],{"class":112},[102,12586,12587,12589,12591],{"class":104,"line":1668},[102,12588,12129],{"class":112},[102,12590,158],{"class":108},[102,12592,12462],{"class":112},[102,12594,12595],{"class":104,"line":1682},[102,12596,1554],{"class":112},[102,12598,12599],{"class":104,"line":1687},[102,12600,2389],{"emptyLinePlaceholder":30},[102,12602,12603,12605,12607],{"class":104,"line":1716},[102,12604,116],{"class":108},[102,12606,1962],{"class":1952},[102,12608,10843],{"class":112},[102,12610,12611],{"class":104,"line":1721},[102,12612,2389],{"emptyLinePlaceholder":30},[102,12614,12615,12617,12619,12621,12623],{"class":104,"line":1738},[102,12616,1974],{"class":108},[102,12618,10859],{"class":112},[102,12620,158],{"class":108},[102,12622,2027],{"class":161},[102,12624,1279],{"class":112},[102,12626,12627,12629,12631,12633,12635],{"class":104,"line":1743},[102,12628,1974],{"class":108},[102,12630,10872],{"class":112},[102,12632,158],{"class":108},[102,12634,8940],{"class":161},[102,12636,1279],{"class":112},[102,12638,12639],{"class":104,"line":1748},[102,12640,2389],{"emptyLinePlaceholder":30},[102,12642,12643,12646,12649],{"class":104,"line":1753},[102,12644,12645],{"class":1952},"    mySwap01",[102,12647,12648],{"class":112},"(a, b);",[102,12650,12651],{"class":171},"\u002F\u002F值传递，形参不会修饰实参\n",[102,12653,12654,12656,12658,12661,12663,12665,12667,12670,12672,12674,12676],{"class":104,"line":1767},[102,12655,6519],{"class":112},[102,12657,1157],{"class":108},[102,12659,12660],{"class":217}," \"a:\"",[102,12662,1433],{"class":108},[102,12664,10859],{"class":112},[102,12666,1157],{"class":108},[102,12668,12669],{"class":217}," \" b:\"",[102,12671,1433],{"class":108},[102,12673,10872],{"class":112},[102,12675,1157],{"class":108},[102,12677,8830],{"class":112},[102,12679,12680],{"class":104,"line":1772},[102,12681,2389],{"emptyLinePlaceholder":30},[102,12683,12684,12687,12689,12691,12694,12696,12699],{"class":104,"line":2566},[102,12685,12686],{"class":1952},"    mySwap02",[102,12688,113],{"class":112},[102,12690,466],{"class":108},[102,12692,12693],{"class":112},"a, ",[102,12695,466],{"class":108},[102,12697,12698],{"class":112},"b);",[102,12700,12701],{"class":171},"\u002F\u002F地址传递，形参会修饰实参\n",[102,12703,12704,12706,12708,12710,12712,12714,12716,12718,12720,12722,12724],{"class":104,"line":2580},[102,12705,6519],{"class":112},[102,12707,1157],{"class":108},[102,12709,12660],{"class":217},[102,12711,1433],{"class":108},[102,12713,10859],{"class":112},[102,12715,1157],{"class":108},[102,12717,12669],{"class":217},[102,12719,1433],{"class":108},[102,12721,10872],{"class":112},[102,12723,1157],{"class":108},[102,12725,8830],{"class":112},[102,12727,12728],{"class":104,"line":2588},[102,12729,2389],{"emptyLinePlaceholder":30},[102,12731,12732,12735,12737],{"class":104,"line":2593},[102,12733,12734],{"class":1952},"    mySwap03",[102,12736,12648],{"class":112},[102,12738,12739],{"class":171},"\u002F\u002F引用传递，形参会修饰实参\n",[102,12741,12742,12744,12746,12748,12750,12752,12754,12756,12758,12760,12762],{"class":104,"line":2599},[102,12743,6519],{"class":112},[102,12745,1157],{"class":108},[102,12747,12660],{"class":217},[102,12749,1433],{"class":108},[102,12751,10859],{"class":112},[102,12753,1157],{"class":108},[102,12755,12669],{"class":217},[102,12757,1433],{"class":108},[102,12759,10872],{"class":112},[102,12761,1157],{"class":108},[102,12763,8830],{"class":112},[102,12765,12766],{"class":104,"line":2605},[102,12767,2389],{"emptyLinePlaceholder":30},[102,12769,12770,12772,12774,12776],{"class":104,"line":2610},[102,12771,2292],{"class":1952},[102,12773,113],{"class":112},[102,12775,2297],{"class":217},[102,12777,2708],{"class":112},[102,12779,12780],{"class":104,"line":7938},[102,12781,2389],{"emptyLinePlaceholder":30},[102,12783,12784,12786,12788],{"class":104,"line":7962},[102,12785,4079],{"class":108},[102,12787,4082],{"class":161},[102,12789,1279],{"class":112},[102,12791,12792],{"class":104,"line":7967},[102,12793,1554],{"class":112},[14,12795,12797],{"id":12796},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,12799,12800],{},"作用：引用是可以作为函数的返回值存在的",[19,12802,9015,12803],{},[262,12804,12805],{},"不要返回局部变量引用",[19,12807,12808],{},"用法：函数调用作为左值",[93,12810,12812],{"className":9931,"code":12811,"language":9933,"meta":23,"style":23},"\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",[99,12813,12814,12819,12827,12842,12848,12852,12856,12861,12869,12886,12892,12896,12900,12908,12912,12917,12931,12951,12970,12974,12979,12992,13012,13030,13034,13050,13054,13073,13091,13095,13105,13109,13117],{"__ignoreMap":23},[102,12815,12816],{"class":104,"line":105},[102,12817,12818],{"class":171},"\u002F\u002F返回局部变量引用\n",[102,12820,12821,12823,12825],{"class":104,"line":24},[102,12822,12556],{"class":108},[102,12824,5578],{"class":1952},[102,12826,10843],{"class":112},[102,12828,12829,12831,12833,12835,12837,12839],{"class":104,"line":1168},[102,12830,1974],{"class":108},[102,12832,10859],{"class":112},[102,12834,158],{"class":108},[102,12836,2027],{"class":161},[102,12838,168],{"class":112},[102,12840,12841],{"class":171}," \u002F\u002F局部变量\n",[102,12843,12844,12846],{"class":104,"line":1183},[102,12845,4079],{"class":108},[102,12847,1421],{"class":112},[102,12849,12850],{"class":104,"line":1189},[102,12851,1554],{"class":112},[102,12853,12854],{"class":104,"line":1203},[102,12855,2389],{"emptyLinePlaceholder":30},[102,12857,12858],{"class":104,"line":1209},[102,12859,12860],{"class":171},"\u002F\u002F返回静态变量引用\n",[102,12862,12863,12865,12867],{"class":104,"line":1300},[102,12864,12556],{"class":108},[102,12866,5647],{"class":1952},[102,12868,10843],{"class":112},[102,12870,12871,12873,12875,12877,12879,12881,12883],{"class":104,"line":1306},[102,12872,11010],{"class":108},[102,12874,2371],{"class":108},[102,12876,10859],{"class":112},[102,12878,158],{"class":108},[102,12880,8940],{"class":161},[102,12882,168],{"class":112},[102,12884,12885],{"class":171},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[102,12887,12888,12890],{"class":104,"line":1318},[102,12889,4079],{"class":108},[102,12891,1421],{"class":112},[102,12893,12894],{"class":104,"line":1601},[102,12895,1554],{"class":112},[102,12897,12898],{"class":104,"line":1606},[102,12899,2389],{"emptyLinePlaceholder":30},[102,12901,12902,12904,12906],{"class":104,"line":1612},[102,12903,116],{"class":108},[102,12905,1962],{"class":1952},[102,12907,10843],{"class":112},[102,12909,12910],{"class":104,"line":1617},[102,12911,2389],{"emptyLinePlaceholder":30},[102,12913,12914],{"class":104,"line":1631},[102,12915,12916],{"class":171},"    \u002F\u002F不能返回局部变量的引用\n",[102,12918,12919,12922,12925,12927,12929],{"class":104,"line":1636},[102,12920,12921],{"class":108},"    int&",[102,12923,12924],{"class":112}," ref ",[102,12926,158],{"class":108},[102,12928,5578],{"class":1952},[102,12930,5626],{"class":112},[102,12932,12933,12935,12937,12940,12942,12944,12946,12948],{"class":104,"line":1642},[102,12934,6519],{"class":112},[102,12936,1157],{"class":108},[102,12938,12939],{"class":217}," \"ref = \"",[102,12941,1433],{"class":108},[102,12943,12924],{"class":112},[102,12945,1157],{"class":108},[102,12947,11459],{"class":112},[102,12949,12950],{"class":171},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[102,12952,12953,12955,12957,12959,12961,12963,12965,12967],{"class":104,"line":1663},[102,12954,6519],{"class":112},[102,12956,1157],{"class":108},[102,12958,12939],{"class":217},[102,12960,1433],{"class":108},[102,12962,12924],{"class":112},[102,12964,1157],{"class":108},[102,12966,11459],{"class":112},[102,12968,12969],{"class":171},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[102,12971,12972],{"class":104,"line":1668},[102,12973,2389],{"emptyLinePlaceholder":30},[102,12975,12976],{"class":104,"line":1682},[102,12977,12978],{"class":171},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[102,12980,12981,12983,12986,12988,12990],{"class":104,"line":1687},[102,12982,12921],{"class":108},[102,12984,12985],{"class":112}," ref2 ",[102,12987,158],{"class":108},[102,12989,5647],{"class":1952},[102,12991,5626],{"class":112},[102,12993,12994,12996,12998,13001,13003,13005,13007,13009],{"class":104,"line":1716},[102,12995,6519],{"class":112},[102,12997,1157],{"class":108},[102,12999,13000],{"class":217}," \"ref2 = \"",[102,13002,1433],{"class":108},[102,13004,12985],{"class":112},[102,13006,1157],{"class":108},[102,13008,11459],{"class":112},[102,13010,13011],{"class":171}," \u002F\u002F20\n",[102,13013,13014,13016,13018,13020,13022,13024,13026,13028],{"class":104,"line":1721},[102,13015,6519],{"class":112},[102,13017,1157],{"class":108},[102,13019,13000],{"class":217},[102,13021,1433],{"class":108},[102,13023,12985],{"class":112},[102,13025,1157],{"class":108},[102,13027,11459],{"class":112},[102,13029,13011],{"class":171},[102,13031,13032],{"class":104,"line":1738},[102,13033,2389],{"emptyLinePlaceholder":30},[102,13035,13036,13038,13041,13043,13045,13047],{"class":104,"line":1743},[102,13037,5692],{"class":1952},[102,13039,13040],{"class":112},"() ",[102,13042,158],{"class":108},[102,13044,2988],{"class":161},[102,13046,168],{"class":112},[102,13048,13049],{"class":171},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[102,13051,13052],{"class":104,"line":1748},[102,13053,2389],{"emptyLinePlaceholder":30},[102,13055,13056,13058,13060,13062,13064,13066,13068,13070],{"class":104,"line":1753},[102,13057,6519],{"class":112},[102,13059,1157],{"class":108},[102,13061,13000],{"class":217},[102,13063,1433],{"class":108},[102,13065,12985],{"class":112},[102,13067,1157],{"class":108},[102,13069,11459],{"class":112},[102,13071,13072],{"class":171}," \u002F\u002F1000\n",[102,13074,13075,13077,13079,13081,13083,13085,13087,13089],{"class":104,"line":1767},[102,13076,6519],{"class":112},[102,13078,1157],{"class":108},[102,13080,13000],{"class":217},[102,13082,1433],{"class":108},[102,13084,12985],{"class":112},[102,13086,1157],{"class":108},[102,13088,11459],{"class":112},[102,13090,13072],{"class":171},[102,13092,13093],{"class":104,"line":1772},[102,13094,2389],{"emptyLinePlaceholder":30},[102,13096,13097,13099,13101,13103],{"class":104,"line":2566},[102,13098,2292],{"class":1952},[102,13100,113],{"class":112},[102,13102,2297],{"class":217},[102,13104,2708],{"class":112},[102,13106,13107],{"class":104,"line":2580},[102,13108,2389],{"emptyLinePlaceholder":30},[102,13110,13111,13113,13115],{"class":104,"line":2588},[102,13112,4079],{"class":108},[102,13114,4082],{"class":161},[102,13116,1279],{"class":112},[102,13118,13119],{"class":104,"line":2593},[102,13120,1554],{"class":112},[14,13122,13124],{"id":13123},"_65引用的本质","6.5引用的本质",[19,13126,13127,13128],{},"本质：",[262,13129,13130],{},"引用的本质在c++内部实现是一个指针常量.",[93,13132,13134],{"className":95,"code":13133,"language":97,"meta":23,"style":23},"\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",[99,13135,13136,13141,13157,13171,13175,13184,13196,13201,13206,13217,13230,13234,13250,13267,13271,13279,13287],{"__ignoreMap":23},[102,13137,13138],{"class":104,"line":105},[102,13139,13140],{"class":171},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[102,13142,13143,13145,13147,13149,13151,13154],{"class":104,"line":24},[102,13144,5354],{"class":108},[102,13146,11375],{"class":1952},[102,13148,113],{"class":112},[102,13150,12556],{"class":108},[102,13152,13153],{"class":5206}," ref",[102,13155,13156],{"class":112},"){\n",[102,13158,13159,13162,13164,13166,13168],{"class":104,"line":1168},[102,13160,13161],{"class":112},"    ref ",[102,13163,158],{"class":108},[102,13165,5744],{"class":161},[102,13167,168],{"class":112},[102,13169,13170],{"class":171}," \u002F\u002F ref是引用，转换为*ref = 100\n",[102,13172,13173],{"class":104,"line":1183},[102,13174,1554],{"class":112},[102,13176,13177,13179,13181],{"class":104,"line":1189},[102,13178,116],{"class":108},[102,13180,1962],{"class":1952},[102,13182,13183],{"class":112},"(){\n",[102,13185,13186,13188,13190,13192,13194],{"class":104,"line":1203},[102,13187,1974],{"class":108},[102,13189,10859],{"class":112},[102,13191,158],{"class":108},[102,13193,2027],{"class":161},[102,13195,1279],{"class":112},[102,13197,13198],{"class":104,"line":1209},[102,13199,13200],{"class":112},"    \n",[102,13202,13203],{"class":104,"line":1300},[102,13204,13205],{"class":171},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[102,13207,13208,13210,13212,13214],{"class":104,"line":1306},[102,13209,12921],{"class":108},[102,13211,12924],{"class":112},[102,13213,158],{"class":108},[102,13215,13216],{"class":112}," a; \n",[102,13218,13219,13221,13223,13225,13227],{"class":104,"line":1318},[102,13220,13161],{"class":112},[102,13222,158],{"class":108},[102,13224,8940],{"class":161},[102,13226,168],{"class":112},[102,13228,13229],{"class":171}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[102,13231,13232],{"class":104,"line":1601},[102,13233,13200],{"class":112},[102,13235,13236,13238,13240,13242,13244,13246,13248],{"class":104,"line":1606},[102,13237,6519],{"class":112},[102,13239,1157],{"class":108},[102,13241,12660],{"class":217},[102,13243,1433],{"class":108},[102,13245,10859],{"class":112},[102,13247,1157],{"class":108},[102,13249,8830],{"class":112},[102,13251,13252,13254,13256,13259,13261,13263,13265],{"class":104,"line":1612},[102,13253,6519],{"class":112},[102,13255,1157],{"class":108},[102,13257,13258],{"class":217}," \"ref:\"",[102,13260,1433],{"class":108},[102,13262,12924],{"class":112},[102,13264,1157],{"class":108},[102,13266,8830],{"class":112},[102,13268,13269],{"class":104,"line":1617},[102,13270,13200],{"class":112},[102,13272,13273,13276],{"class":104,"line":1631},[102,13274,13275],{"class":1952},"    func",[102,13277,13278],{"class":112},"(a);\n",[102,13280,13281,13283,13285],{"class":104,"line":1636},[102,13282,4079],{"class":108},[102,13284,4082],{"class":161},[102,13286,1279],{"class":112},[102,13288,13289],{"class":104,"line":1642},[102,13290,1554],{"class":112},[19,13292,11322],{},[56,13294,13295,13298],{},[59,13296,13297],{},"引用的本质，就是一个指针常量",[59,13299,13300],{},"引用一旦初始化，就不可以发生改变",[14,13302,13304],{"id":13303},"_66常量引用","6.6常量引用",[19,13306,13307],{},"作用：常量引用主要用来修饰形参",[19,13309,13310,13311,13314],{},"在函数形参列表中，可以加",[262,13312,13313],{},"const修饰形参","，防止形参改变实参",[93,13316,13318],{"className":95,"code":13317,"language":97,"meta":23,"style":23},"\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",[99,13319,13320,13325,13330,13349,13354,13367,13371,13375,13383,13387,13392,13397,13411,13415,13423,13435,13439,13444,13456,13463,13467,13477,13481,13489],{"__ignoreMap":23},[102,13321,13322],{"class":104,"line":105},[102,13323,13324],{"class":171},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[102,13326,13327],{"class":104,"line":24},[102,13328,13329],{"class":171},"\u002F\u002F加上const就不能修改实参的\n",[102,13331,13332,13334,13337,13339,13341,13344,13347],{"class":104,"line":1168},[102,13333,5354],{"class":108},[102,13335,13336],{"class":1952}," showValue",[102,13338,113],{"class":112},[102,13340,6782],{"class":108},[102,13342,13343],{"class":108}," int&",[102,13345,13346],{"class":5206}," v",[102,13348,12432],{"class":112},[102,13350,13351],{"class":104,"line":1183},[102,13352,13353],{"class":171},"    \u002F\u002Fv += 100;\n",[102,13355,13356,13358,13360,13363,13365],{"class":104,"line":1189},[102,13357,6519],{"class":112},[102,13359,1157],{"class":108},[102,13361,13362],{"class":112}," v ",[102,13364,1157],{"class":108},[102,13366,8830],{"class":112},[102,13368,13369],{"class":104,"line":1203},[102,13370,1554],{"class":112},[102,13372,13373],{"class":104,"line":1209},[102,13374,2389],{"emptyLinePlaceholder":30},[102,13376,13377,13379,13381],{"class":104,"line":1300},[102,13378,116],{"class":108},[102,13380,1962],{"class":1952},[102,13382,10843],{"class":112},[102,13384,13385],{"class":104,"line":1306},[102,13386,2389],{"emptyLinePlaceholder":30},[102,13388,13389],{"class":104,"line":1318},[102,13390,13391],{"class":171},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[102,13393,13394],{"class":104,"line":1601},[102,13395,13396],{"class":171},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[102,13398,13399,13401,13403,13405,13407,13409],{"class":104,"line":1606},[102,13400,11211],{"class":108},[102,13402,13343],{"class":108},[102,13404,12924],{"class":112},[102,13406,158],{"class":108},[102,13408,2027],{"class":161},[102,13410,1279],{"class":112},[102,13412,13413],{"class":104,"line":1612},[102,13414,2389],{"emptyLinePlaceholder":30},[102,13416,13417,13420],{"class":104,"line":1617},[102,13418,13419],{"class":171},"    \u002F\u002Fref = 100;",[102,13421,13422],{"class":171},"  \u002F\u002F加入const后不可以修改变量\n",[102,13424,13425,13427,13429,13431,13433],{"class":104,"line":1631},[102,13426,6519],{"class":112},[102,13428,1157],{"class":108},[102,13430,12924],{"class":112},[102,13432,1157],{"class":108},[102,13434,8830],{"class":112},[102,13436,13437],{"class":104,"line":1636},[102,13438,2389],{"emptyLinePlaceholder":30},[102,13440,13441],{"class":104,"line":1642},[102,13442,13443],{"class":171},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[102,13445,13446,13448,13450,13452,13454],{"class":104,"line":1663},[102,13447,1974],{"class":108},[102,13449,10859],{"class":112},[102,13451,158],{"class":108},[102,13453,2027],{"class":161},[102,13455,1279],{"class":112},[102,13457,13458,13461],{"class":104,"line":1668},[102,13459,13460],{"class":1952},"    showValue",[102,13462,13278],{"class":112},[102,13464,13465],{"class":104,"line":1682},[102,13466,2389],{"emptyLinePlaceholder":30},[102,13468,13469,13471,13473,13475],{"class":104,"line":1687},[102,13470,2292],{"class":1952},[102,13472,113],{"class":112},[102,13474,2297],{"class":217},[102,13476,2708],{"class":112},[102,13478,13479],{"class":104,"line":1716},[102,13480,2389],{"emptyLinePlaceholder":30},[102,13482,13483,13485,13487],{"class":104,"line":1721},[102,13484,4079],{"class":108},[102,13486,4082],{"class":161},[102,13488,1279],{"class":112},[102,13490,13491],{"class":104,"line":1738},[102,13492,1554],{"class":112},[5116,13494,13495],{},"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":23,"searchDepth":24,"depth":24,"links":13497},[13498,13499,13500,13501,13502,13503],{"id":12030,"depth":24,"text":12031},{"id":12209,"depth":24,"text":12210},{"id":12392,"depth":24,"text":12393},{"id":12796,"depth":24,"text":12797},{"id":13123,"depth":24,"text":13124},{"id":13303,"depth":24,"text":13304},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12022,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13510,"title":13511,"body":13512,"description":23,"extension":28,"meta":14593,"navigation":30,"path":14594,"seo":14595,"stem":14596,"__hash__":14597},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13513,"toc":14585},[13514,13517,13521,13524,13529,13761,13763,13774,13778,13781,13789,13893,13896,13900,13903,13907,13910,13915,13937,13943,14270,14273,14277,14285,14582],[10,13515,13511],{"id":13516},"_7函数高级部分",[14,13518,13520],{"id":13519},"_71函数默认参数","7.1函数默认参数",[19,13522,13523],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13525,5171,13526],{},[99,13527,13528],{}," 返回值类型  函数名 （参数= 默认值）{}",[93,13530,13532],{"className":95,"code":13531,"language":97,"meta":23,"style":23},"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",[99,13533,13534,13569,13584,13588,13592,13597,13602,13631,13651,13661,13665,13669,13677,13681,13709,13731,13735,13745,13749,13757],{"__ignoreMap":23},[102,13535,13536,13538,13540,13542,13544,13546,13548,13550,13552,13555,13557,13559,13561,13563,13565,13567],{"class":104,"line":105},[102,13537,116],{"class":108},[102,13539,11375],{"class":1952},[102,13541,113],{"class":112},[102,13543,116],{"class":108},[102,13545,1387],{"class":5206},[102,13547,12425],{"class":112},[102,13549,116],{"class":108},[102,13551,2822],{"class":5206},[102,13553,13554],{"class":108}," =",[102,13556,2027],{"class":161},[102,13558,12425],{"class":112},[102,13560,116],{"class":108},[102,13562,2838],{"class":5206},[102,13564,13554],{"class":108},[102,13566,2027],{"class":161},[102,13568,12432],{"class":112},[102,13570,13571,13573,13575,13577,13579,13581],{"class":104,"line":24},[102,13572,4079],{"class":108},[102,13574,10859],{"class":112},[102,13576,594],{"class":108},[102,13578,10872],{"class":112},[102,13580,594],{"class":108},[102,13582,13583],{"class":112}," c;\n",[102,13585,13586],{"class":104,"line":1168},[102,13587,1554],{"class":112},[102,13589,13590],{"class":104,"line":1183},[102,13591,2389],{"emptyLinePlaceholder":30},[102,13593,13594],{"class":104,"line":1189},[102,13595,13596],{"class":171},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[102,13598,13599],{"class":104,"line":1203},[102,13600,13601],{"class":171},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[102,13603,13604,13606,13609,13611,13613,13615,13617,13619,13621,13623,13625,13627,13629],{"class":104,"line":1209},[102,13605,116],{"class":108},[102,13607,13608],{"class":1952}," func2",[102,13610,113],{"class":112},[102,13612,116],{"class":108},[102,13614,1387],{"class":5206},[102,13616,13554],{"class":108},[102,13618,2027],{"class":161},[102,13620,12425],{"class":112},[102,13622,116],{"class":108},[102,13624,2822],{"class":5206},[102,13626,13554],{"class":108},[102,13628,2027],{"class":161},[102,13630,2708],{"class":112},[102,13632,13633,13635,13637,13639,13641,13643,13645,13647,13649],{"class":104,"line":1300},[102,13634,116],{"class":108},[102,13636,13608],{"class":1952},[102,13638,113],{"class":112},[102,13640,116],{"class":108},[102,13642,1387],{"class":5206},[102,13644,12425],{"class":112},[102,13646,116],{"class":108},[102,13648,2822],{"class":5206},[102,13650,12432],{"class":112},[102,13652,13653,13655,13657,13659],{"class":104,"line":1306},[102,13654,4079],{"class":108},[102,13656,10859],{"class":112},[102,13658,594],{"class":108},[102,13660,12453],{"class":112},[102,13662,13663],{"class":104,"line":1318},[102,13664,1554],{"class":112},[102,13666,13667],{"class":104,"line":1601},[102,13668,2389],{"emptyLinePlaceholder":30},[102,13670,13671,13673,13675],{"class":104,"line":1606},[102,13672,116],{"class":108},[102,13674,1962],{"class":1952},[102,13676,10843],{"class":112},[102,13678,13679],{"class":104,"line":1612},[102,13680,2389],{"emptyLinePlaceholder":30},[102,13682,13683,13685,13687,13690,13692,13694,13696,13698,13700,13702,13705,13707],{"class":104,"line":1617},[102,13684,6519],{"class":112},[102,13686,1157],{"class":108},[102,13688,13689],{"class":217}," \"ret = \"",[102,13691,1433],{"class":108},[102,13693,11375],{"class":1952},[102,13695,113],{"class":112},[102,13697,813],{"class":161},[102,13699,12425],{"class":112},[102,13701,813],{"class":161},[102,13703,13704],{"class":112},") ",[102,13706,1157],{"class":108},[102,13708,8830],{"class":112},[102,13710,13711,13713,13715,13717,13719,13721,13723,13725,13727,13729],{"class":104,"line":1631},[102,13712,6519],{"class":112},[102,13714,1157],{"class":108},[102,13716,13689],{"class":217},[102,13718,1433],{"class":108},[102,13720,11375],{"class":1952},[102,13722,113],{"class":112},[102,13724,424],{"class":161},[102,13726,13704],{"class":112},[102,13728,1157],{"class":108},[102,13730,8830],{"class":112},[102,13732,13733],{"class":104,"line":1636},[102,13734,2389],{"emptyLinePlaceholder":30},[102,13736,13737,13739,13741,13743],{"class":104,"line":1642},[102,13738,2292],{"class":1952},[102,13740,113],{"class":112},[102,13742,2297],{"class":217},[102,13744,2708],{"class":112},[102,13746,13747],{"class":104,"line":1663},[102,13748,2389],{"emptyLinePlaceholder":30},[102,13750,13751,13753,13755],{"class":104,"line":1668},[102,13752,4079],{"class":108},[102,13754,4082],{"class":161},[102,13756,1279],{"class":112},[102,13758,13759],{"class":104,"line":1682},[102,13760,1554],{"class":112},[19,13762,11322],{},[56,13764,13765,13768,13771],{},[59,13766,13767],{},"我传就用我；没传就用你",[59,13769,13770],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[59,13772,13773],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13775,13777],{"id":13776},"_72函数的占位参数","7.2函数的占位参数",[19,13779,13780],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,13782,13783,13785,13786],{},[262,13784,5171],{}," ",[99,13787,13788],{},"返回值类型 函数名 (数据类型){}",[93,13790,13792],{"className":95,"code":13791,"language":97,"meta":23,"style":23},"\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",[99,13793,13794,13799,13817,13830,13834,13842,13846,13863,13867,13877,13881,13889],{"__ignoreMap":23},[102,13795,13796],{"class":104,"line":105},[102,13797,13798],{"class":171},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[102,13800,13801,13803,13805,13807,13809,13811,13813,13815],{"class":104,"line":24},[102,13802,5354],{"class":108},[102,13804,11375],{"class":1952},[102,13806,113],{"class":112},[102,13808,116],{"class":108},[102,13810,1387],{"class":5206},[102,13812,12425],{"class":112},[102,13814,116],{"class":108},[102,13816,12432],{"class":112},[102,13818,13819,13821,13823,13826,13828],{"class":104,"line":1168},[102,13820,6519],{"class":112},[102,13822,1157],{"class":108},[102,13824,13825],{"class":217}," \"this is func\"",[102,13827,1433],{"class":108},[102,13829,8830],{"class":112},[102,13831,13832],{"class":104,"line":1183},[102,13833,1554],{"class":112},[102,13835,13836,13838,13840],{"class":104,"line":1189},[102,13837,116],{"class":108},[102,13839,1962],{"class":1952},[102,13841,10843],{"class":112},[102,13843,13844],{"class":104,"line":1203},[102,13845,2389],{"emptyLinePlaceholder":30},[102,13847,13848,13850,13852,13854,13856,13858,13860],{"class":104,"line":1209},[102,13849,13275],{"class":1952},[102,13851,113],{"class":112},[102,13853,559],{"class":161},[102,13855,491],{"class":112},[102,13857,559],{"class":161},[102,13859,5956],{"class":112},[102,13861,13862],{"class":171}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[102,13864,13865],{"class":104,"line":1300},[102,13866,2389],{"emptyLinePlaceholder":30},[102,13868,13869,13871,13873,13875],{"class":104,"line":1306},[102,13870,2292],{"class":1952},[102,13872,113],{"class":112},[102,13874,2297],{"class":217},[102,13876,2708],{"class":112},[102,13878,13879],{"class":104,"line":1318},[102,13880,2389],{"emptyLinePlaceholder":30},[102,13882,13883,13885,13887],{"class":104,"line":1601},[102,13884,4079],{"class":108},[102,13886,4082],{"class":161},[102,13888,1279],{"class":112},[102,13890,13891],{"class":104,"line":1606},[102,13892,1554],{"class":112},[19,13894,13895],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,13897,13899],{"id":13898},"_73函数重载","7.3函数重载",[19,13901,13902],{},"意思是函数名是可以相同的",[73,13904,13906],{"id":13905},"_731基本语法","7.3.1基本语法",[19,13908,13909],{},"作用：函数名可以相同，提高复用性",[19,13911,13912],{},[262,13913,13914],{},"函数重载满足条件：",[1120,13916,13917,13920,13923],{},[59,13918,13919],{},"同一个作用域下",[59,13921,13922],{},"函数名称相同",[59,13924,13925,13926,13929,13930,13933,13934],{},"函数参数",[262,13927,13928],{},"类型不同","  或者 ",[262,13931,13932],{},"个数不同"," 或者 ",[262,13935,13936],{},"顺序不同",[19,13938,13939,13942],{},[262,13940,13941],{},"注意:","  函数的返回值不可以作为函数重载的条件",[93,13944,13946],{"className":9931,"code":13945,"language":9933,"meta":23,"style":23},"\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",[99,13947,13948,13953,13961,13965,13978,13982,13996,14000,14013,14017,14032,14036,14049,14053,14074,14078,14091,14095,14115,14119,14132,14136,14140,14145,14150,14155,14160,14165,14169,14173,14181,14185,14191,14201,14211,14225,14240,14244,14254,14258,14266],{"__ignoreMap":23},[102,13949,13950],{"class":104,"line":105},[102,13951,13952],{"class":171},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[102,13954,13955,13957,13959],{"class":104,"line":24},[102,13956,5354],{"class":108},[102,13958,11375],{"class":1952},[102,13960,1965],{"class":112},[102,13962,13963],{"class":104,"line":1168},[102,13964,1535],{"class":112},[102,13966,13967,13969,13971,13974,13976],{"class":104,"line":1183},[102,13968,6519],{"class":112},[102,13970,1157],{"class":108},[102,13972,13973],{"class":217}," \"func 的调用！\"",[102,13975,1433],{"class":108},[102,13977,8830],{"class":112},[102,13979,13980],{"class":104,"line":1189},[102,13981,1554],{"class":112},[102,13983,13984,13986,13988,13990,13992,13994],{"class":104,"line":1203},[102,13985,5354],{"class":108},[102,13987,11375],{"class":1952},[102,13989,113],{"class":112},[102,13991,116],{"class":108},[102,13993,1387],{"class":5206},[102,13995,119],{"class":112},[102,13997,13998],{"class":104,"line":1209},[102,13999,1535],{"class":112},[102,14001,14002,14004,14006,14009,14011],{"class":104,"line":1300},[102,14003,6519],{"class":112},[102,14005,1157],{"class":108},[102,14007,14008],{"class":217}," \"func (int a) 的调用！\"",[102,14010,1433],{"class":108},[102,14012,8830],{"class":112},[102,14014,14015],{"class":104,"line":1306},[102,14016,1554],{"class":112},[102,14018,14019,14021,14023,14025,14028,14030],{"class":104,"line":1318},[102,14020,5354],{"class":108},[102,14022,11375],{"class":1952},[102,14024,113],{"class":112},[102,14026,14027],{"class":108},"double",[102,14029,1387],{"class":5206},[102,14031,119],{"class":112},[102,14033,14034],{"class":104,"line":1601},[102,14035,1535],{"class":112},[102,14037,14038,14040,14042,14045,14047],{"class":104,"line":1606},[102,14039,6519],{"class":112},[102,14041,1157],{"class":108},[102,14043,14044],{"class":217}," \"func (double a)的调用！\"",[102,14046,1433],{"class":108},[102,14048,8830],{"class":112},[102,14050,14051],{"class":104,"line":1612},[102,14052,1554],{"class":112},[102,14054,14055,14057,14059,14061,14063,14065,14068,14070,14072],{"class":104,"line":1617},[102,14056,5354],{"class":108},[102,14058,11375],{"class":1952},[102,14060,113],{"class":112},[102,14062,116],{"class":108},[102,14064,1387],{"class":5206},[102,14066,14067],{"class":112}," ,",[102,14069,14027],{"class":108},[102,14071,2822],{"class":5206},[102,14073,119],{"class":112},[102,14075,14076],{"class":104,"line":1631},[102,14077,1535],{"class":112},[102,14079,14080,14082,14084,14087,14089],{"class":104,"line":1636},[102,14081,6519],{"class":112},[102,14083,1157],{"class":108},[102,14085,14086],{"class":217}," \"func (int a ,double b) 的调用！\"",[102,14088,1433],{"class":108},[102,14090,8830],{"class":112},[102,14092,14093],{"class":104,"line":1642},[102,14094,1554],{"class":112},[102,14096,14097,14099,14101,14103,14105,14107,14109,14111,14113],{"class":104,"line":1663},[102,14098,5354],{"class":108},[102,14100,11375],{"class":1952},[102,14102,113],{"class":112},[102,14104,14027],{"class":108},[102,14106,1387],{"class":5206},[102,14108,14067],{"class":112},[102,14110,116],{"class":108},[102,14112,2822],{"class":5206},[102,14114,119],{"class":112},[102,14116,14117],{"class":104,"line":1668},[102,14118,1535],{"class":112},[102,14120,14121,14123,14125,14128,14130],{"class":104,"line":1682},[102,14122,6519],{"class":112},[102,14124,1157],{"class":108},[102,14126,14127],{"class":217}," \"func (double a ,int b)的调用！\"",[102,14129,1433],{"class":108},[102,14131,8830],{"class":112},[102,14133,14134],{"class":104,"line":1687},[102,14135,1554],{"class":112},[102,14137,14138],{"class":104,"line":1716},[102,14139,2389],{"emptyLinePlaceholder":30},[102,14141,14142],{"class":104,"line":1721},[102,14143,14144],{"class":171},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[102,14146,14147],{"class":104,"line":1738},[102,14148,14149],{"class":171},"\u002F\u002Fint func(double a, int b)\n",[102,14151,14152],{"class":104,"line":1743},[102,14153,14154],{"class":171},"\u002F\u002F{\n",[102,14156,14157],{"class":104,"line":1748},[102,14158,14159],{"class":171},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[102,14161,14162],{"class":104,"line":1753},[102,14163,14164],{"class":171},"\u002F\u002F}\n",[102,14166,14167],{"class":104,"line":1767},[102,14168,2389],{"emptyLinePlaceholder":30},[102,14170,14171],{"class":104,"line":1772},[102,14172,2389],{"emptyLinePlaceholder":30},[102,14174,14175,14177,14179],{"class":104,"line":2566},[102,14176,116],{"class":108},[102,14178,1962],{"class":1952},[102,14180,10843],{"class":112},[102,14182,14183],{"class":104,"line":2580},[102,14184,2389],{"emptyLinePlaceholder":30},[102,14186,14187,14189],{"class":104,"line":2588},[102,14188,13275],{"class":1952},[102,14190,5626],{"class":112},[102,14192,14193,14195,14197,14199],{"class":104,"line":2593},[102,14194,13275],{"class":1952},[102,14196,113],{"class":112},[102,14198,559],{"class":161},[102,14200,2708],{"class":112},[102,14202,14203,14205,14207,14209],{"class":104,"line":2599},[102,14204,13275],{"class":1952},[102,14206,113],{"class":112},[102,14208,162],{"class":161},[102,14210,2708],{"class":112},[102,14212,14213,14215,14217,14219,14221,14223],{"class":104,"line":2605},[102,14214,13275],{"class":1952},[102,14216,113],{"class":112},[102,14218,559],{"class":161},[102,14220,491],{"class":112},[102,14222,162],{"class":161},[102,14224,2708],{"class":112},[102,14226,14227,14229,14231,14233,14236,14238],{"class":104,"line":2610},[102,14228,13275],{"class":1952},[102,14230,113],{"class":112},[102,14232,162],{"class":161},[102,14234,14235],{"class":112}," , ",[102,14237,559],{"class":161},[102,14239,2708],{"class":112},[102,14241,14242],{"class":104,"line":7938},[102,14243,13200],{"class":112},[102,14245,14246,14248,14250,14252],{"class":104,"line":7962},[102,14247,2292],{"class":1952},[102,14249,113],{"class":112},[102,14251,2297],{"class":217},[102,14253,2708],{"class":112},[102,14255,14256],{"class":104,"line":7967},[102,14257,2389],{"emptyLinePlaceholder":30},[102,14259,14260,14262,14264],{"class":104,"line":7973},[102,14261,4079],{"class":108},[102,14263,4082],{"class":161},[102,14265,1279],{"class":112},[102,14267,14268],{"class":104,"line":8000},[102,14269,1554],{"class":112},[19,14271,14272],{},"重点：函数返回值不可以作为函数重载条件！",[73,14274,14276],{"id":14275},"_732注意事项","7.3.2注意事项",[1120,14278,14279,14282],{},[59,14280,14281],{},"引用作为重载条件!!!",[59,14283,14284],{},"函数重载碰到函数默认参数",[93,14286,14288],{"className":95,"code":14287,"language":97,"meta":23,"style":23},"\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",[99,14289,14290,14295,14300,14304,14320,14324,14337,14341,14345,14363,14367,14380,14384,14388,14392,14397,14401,14425,14429,14442,14446,14450,14464,14468,14481,14485,14489,14497,14501,14513,14523,14536,14540,14544,14552,14556,14566,14570,14578],{"__ignoreMap":23},[102,14291,14292],{"class":104,"line":105},[102,14293,14294],{"class":171},"\u002F\u002F函数重载注意事项\n",[102,14296,14297],{"class":104,"line":24},[102,14298,14299],{"class":171},"\u002F\u002F1、引用作为重载条件\n",[102,14301,14302],{"class":104,"line":1168},[102,14303,2389],{"emptyLinePlaceholder":30},[102,14305,14306,14308,14310,14312,14314,14316,14318],{"class":104,"line":1183},[102,14307,5354],{"class":108},[102,14309,11375],{"class":1952},[102,14311,113],{"class":112},[102,14313,116],{"class":108},[102,14315,10574],{"class":108},[102,14317,351],{"class":5206},[102,14319,119],{"class":112},[102,14321,14322],{"class":104,"line":1189},[102,14323,1535],{"class":112},[102,14325,14326,14328,14330,14333,14335],{"class":104,"line":1203},[102,14327,6519],{"class":112},[102,14329,1157],{"class":108},[102,14331,14332],{"class":217}," \"func (int &a) 调用 \"",[102,14334,1433],{"class":108},[102,14336,8830],{"class":112},[102,14338,14339],{"class":104,"line":1209},[102,14340,1554],{"class":112},[102,14342,14343],{"class":104,"line":1300},[102,14344,2389],{"emptyLinePlaceholder":30},[102,14346,14347,14349,14351,14353,14355,14357,14359,14361],{"class":104,"line":1306},[102,14348,5354],{"class":108},[102,14350,11375],{"class":1952},[102,14352,113],{"class":112},[102,14354,6782],{"class":108},[102,14356,2371],{"class":108},[102,14358,10574],{"class":108},[102,14360,351],{"class":5206},[102,14362,119],{"class":112},[102,14364,14365],{"class":104,"line":1318},[102,14366,1535],{"class":112},[102,14368,14369,14371,14373,14376,14378],{"class":104,"line":1601},[102,14370,6519],{"class":112},[102,14372,1157],{"class":108},[102,14374,14375],{"class":217}," \"func (const int &a) 调用 \"",[102,14377,1433],{"class":108},[102,14379,8830],{"class":112},[102,14381,14382],{"class":104,"line":1606},[102,14383,1554],{"class":112},[102,14385,14386],{"class":104,"line":1612},[102,14387,2389],{"emptyLinePlaceholder":30},[102,14389,14390],{"class":104,"line":1617},[102,14391,2389],{"emptyLinePlaceholder":30},[102,14393,14394],{"class":104,"line":1631},[102,14395,14396],{"class":171},"\u002F\u002F2、函数重载碰到函数默认参数\n",[102,14398,14399],{"class":104,"line":1636},[102,14400,2389],{"emptyLinePlaceholder":30},[102,14402,14403,14405,14407,14409,14411,14413,14415,14417,14419,14421,14423],{"class":104,"line":1642},[102,14404,5354],{"class":108},[102,14406,13608],{"class":1952},[102,14408,113],{"class":112},[102,14410,116],{"class":108},[102,14412,1387],{"class":5206},[102,14414,12425],{"class":112},[102,14416,116],{"class":108},[102,14418,2822],{"class":5206},[102,14420,13554],{"class":108},[102,14422,2027],{"class":161},[102,14424,119],{"class":112},[102,14426,14427],{"class":104,"line":1663},[102,14428,1535],{"class":112},[102,14430,14431,14433,14435,14438,14440],{"class":104,"line":1668},[102,14432,6519],{"class":112},[102,14434,1157],{"class":108},[102,14436,14437],{"class":217}," \"func2(int a, int b = 10) 调用\"",[102,14439,1433],{"class":108},[102,14441,8830],{"class":112},[102,14443,14444],{"class":104,"line":1682},[102,14445,1554],{"class":112},[102,14447,14448],{"class":104,"line":1687},[102,14449,2389],{"emptyLinePlaceholder":30},[102,14451,14452,14454,14456,14458,14460,14462],{"class":104,"line":1716},[102,14453,5354],{"class":108},[102,14455,13608],{"class":1952},[102,14457,113],{"class":112},[102,14459,116],{"class":108},[102,14461,1387],{"class":5206},[102,14463,119],{"class":112},[102,14465,14466],{"class":104,"line":1721},[102,14467,1535],{"class":112},[102,14469,14470,14472,14474,14477,14479],{"class":104,"line":1738},[102,14471,6519],{"class":112},[102,14473,1157],{"class":108},[102,14475,14476],{"class":217}," \"func2(int a) 调用\"",[102,14478,1433],{"class":108},[102,14480,8830],{"class":112},[102,14482,14483],{"class":104,"line":1743},[102,14484,1554],{"class":112},[102,14486,14487],{"class":104,"line":1748},[102,14488,2389],{"emptyLinePlaceholder":30},[102,14490,14491,14493,14495],{"class":104,"line":1753},[102,14492,116],{"class":108},[102,14494,1962],{"class":1952},[102,14496,10843],{"class":112},[102,14498,14499],{"class":104,"line":1767},[102,14500,13200],{"class":112},[102,14502,14503,14505,14507,14509,14511],{"class":104,"line":1772},[102,14504,1974],{"class":108},[102,14506,10859],{"class":112},[102,14508,158],{"class":108},[102,14510,2027],{"class":161},[102,14512,1279],{"class":112},[102,14514,14515,14517,14520],{"class":104,"line":2566},[102,14516,13275],{"class":1952},[102,14518,14519],{"class":112},"(a);",[102,14521,14522],{"class":171}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[102,14524,14525,14527,14529,14531,14533],{"class":104,"line":2580},[102,14526,13275],{"class":1952},[102,14528,113],{"class":112},[102,14530,559],{"class":161},[102,14532,5956],{"class":112},[102,14534,14535],{"class":171},"\u002F\u002F调用有const   10是个常量\n",[102,14537,14538],{"class":104,"line":2588},[102,14539,2389],{"emptyLinePlaceholder":30},[102,14541,14542],{"class":104,"line":2593},[102,14543,2389],{"emptyLinePlaceholder":30},[102,14545,14546,14549],{"class":104,"line":2599},[102,14547,14548],{"class":171},"    \u002F\u002Ffunc2(10);",[102,14550,14551],{"class":171}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[102,14553,14554],{"class":104,"line":2605},[102,14555,2389],{"emptyLinePlaceholder":30},[102,14557,14558,14560,14562,14564],{"class":104,"line":2610},[102,14559,2292],{"class":1952},[102,14561,113],{"class":112},[102,14563,2297],{"class":217},[102,14565,2708],{"class":112},[102,14567,14568],{"class":104,"line":7938},[102,14569,2389],{"emptyLinePlaceholder":30},[102,14571,14572,14574,14576],{"class":104,"line":7962},[102,14573,4079],{"class":108},[102,14575,4082],{"class":161},[102,14577,1279],{"class":112},[102,14579,14580],{"class":104,"line":7967},[102,14581,1554],{"class":112},[5116,14583,14584],{},"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":23,"searchDepth":24,"depth":24,"links":14586},[14587,14588,14589],{"id":13519,"depth":24,"text":13520},{"id":13776,"depth":24,"text":13777},{"id":13898,"depth":24,"text":13899,"children":14590},[14591,14592],{"id":13905,"depth":1168,"text":13906},{"id":14275,"depth":1168,"text":14276},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13511,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14599,"title":14600,"body":14601,"description":23355,"extension":28,"meta":23356,"navigation":30,"path":23357,"seo":23358,"stem":23359,"__hash__":23360},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14602,"toc":23336},[14603,14606,14612,14619,14624,14627,14630,14633,14637,14641,14644,14647,14655,14660,14663,14670,14675,14834,14837,15090,15093,15096,15099,15104,15107,15110,15121,15126,15362,15366,15376,15379,15387,15534,15538,15541,15544,15548,15993,15997,16005,16013,16925,16932,16937,17565,17568,17571,17574,17693,17696,17783,17786,17912,17915,18009,18012,18365,18369,18377,18381,18388,18391,18394,18405,18411,18416,18428,18436,18456,18464,18481,18667,18670,18674,18677,18680,18683,18686,18689,18692,18695,19155,19161,19165,19168,19179,19766,19769,20258,20262,20265,20268,20271,20274,20277,20285,20681,20685,20688,20691,21138,21141,21144,21149,21152,21157,21160,21164,21167,21169,21175,21178,21484,21494,21535,21539,21542,21544,21577,21580,21887,21889,21904,21907,21930,21939,21945,21948,21952,21955,21958,21963,21974,21979,21987,21992,22122,22125,22128,22303,22308,22520,22524,22527,22641,22646,22885,22889,22893,22896,22899,22904,23009,23012,23015,23018,23022,23133,23136,23139,23144,23196,23199,23202,23207,23253,23256,23261,23329,23331,23334],[10,14604,14600],{"id":14605},"_8类和对象",[19,14607,14608,14609],{},"C++面向对象的三大特性为",[262,14610,14611],{},"封装、继承、多态",[19,14613,14614,14615,14618],{},"C++认为",[262,14616,14617],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14620,14621],{},[262,14622,14623],{},"例如：",[19,14625,14626],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14628,14629],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14631,14632],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14634,14636],{"id":14635},"_81封装","8.1封装",[73,14638,14640],{"id":14639},"_811封装的意义","8.1.1封装的意义",[19,14642,14643],{},"封装是C++面向对象三大特性之一",[19,14645,14646],{},"封装的意义：",[1120,14648,14649,14652],{},[59,14650,14651],{},"将属性和行为作为一个整体，表现生活中的事物",[59,14653,14654],{},"将属性和行为加以权限控制",[19,14656,14657],{},[262,14658,14659],{},"封装意义一：",[19,14661,14662],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14664,14665,13785,14667],{},[262,14666,5171],{},[99,14668,14669],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[56,14671,14672],{},[59,14673,14674],{},"**示例1：**设计一个圆类，求圆的周长",[93,14676,14678],{"className":95,"code":14677,"language":97,"meta":23,"style":23},"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",[99,14679,14680,14688,14692,14697,14702,14707,14712,14719,14724,14734,14738,14756,14760,14764,14772,14776,14781,14786,14791,14796,14807,14830],{"__ignoreMap":23},[102,14681,14682,14685],{"class":104,"line":105},[102,14683,14684],{"class":108},"class",[102,14686,14687],{"class":1952}," Circle\n",[102,14689,14690],{"class":104,"line":24},[102,14691,1535],{"class":112},[102,14693,14694],{"class":104,"line":1168},[102,14695,14696],{"class":171},"    \u002F\u002F访问权限\n",[102,14698,14699],{"class":104,"line":1183},[102,14700,14701],{"class":171},"    \u002F\u002F公共权限\n",[102,14703,14704],{"class":104,"line":1189},[102,14705,14706],{"class":108},"public:\n",[102,14708,14709],{"class":104,"line":1203},[102,14710,14711],{"class":171},"    \u002F\u002F属性\n",[102,14713,14714,14716],{"class":104,"line":1209},[102,14715,1974],{"class":108},[102,14717,14718],{"class":112}," m_r;\n",[102,14720,14721],{"class":104,"line":1300},[102,14722,14723],{"class":171},"    \u002F\u002F行为\n",[102,14725,14726,14729,14732],{"class":104,"line":1306},[102,14727,14728],{"class":108},"    double",[102,14730,14731],{"class":1952}," calculateZC",[102,14733,1965],{"class":112},[102,14735,14736],{"class":104,"line":1318},[102,14737,2019],{"class":112},[102,14739,14740,14743,14746,14748,14751,14753],{"class":104,"line":1601},[102,14741,14742],{"class":108},"        return",[102,14744,14745],{"class":161}," 2",[102,14747,568],{"class":108},[102,14749,14750],{"class":112},"PI",[102,14752,568],{"class":108},[102,14754,14755],{"class":112},"m_r;\n",[102,14757,14758],{"class":104,"line":1606},[102,14759,2176],{"class":112},[102,14761,14762],{"class":104,"line":1612},[102,14763,3984],{"class":112},[102,14765,14766,14768,14770],{"class":104,"line":1617},[102,14767,116],{"class":108},[102,14769,1962],{"class":1952},[102,14771,1965],{"class":112},[102,14773,14774],{"class":104,"line":1631},[102,14775,1535],{"class":112},[102,14777,14778],{"class":104,"line":1636},[102,14779,14780],{"class":171},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[102,14782,14783],{"class":104,"line":1642},[102,14784,14785],{"class":171},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[102,14787,14788],{"class":104,"line":1663},[102,14789,14790],{"class":112},"    Circle c1;\n",[102,14792,14793],{"class":104,"line":1668},[102,14794,14795],{"class":171},"    \u002F\u002F给圆对象 的属性进行赋值\n",[102,14797,14798,14801,14803,14805],{"class":104,"line":1682},[102,14799,14800],{"class":112},"    c1.m_r",[102,14802,158],{"class":108},[102,14804,559],{"class":161},[102,14806,1279],{"class":112},[102,14808,14809,14811,14813,14816,14818,14821,14824,14826,14828],{"class":104,"line":1687},[102,14810,1540],{"class":112},[102,14812,1157],{"class":108},[102,14814,14815],{"class":217},"\"圆的周长\"",[102,14817,1157],{"class":108},[102,14819,14820],{"class":112},"c1.",[102,14822,14823],{"class":1952},"calculateZC",[102,14825,2416],{"class":112},[102,14827,1157],{"class":108},[102,14829,1180],{"class":112},[102,14831,14832],{"class":104,"line":1716},[102,14833,1554],{"class":112},[19,14835,14836],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[93,14838,14840],{"className":95,"code":14839,"language":97,"meta":23,"style":23},"#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",[99,14841,14842,14848,14858,14864,14870,14874,14878,14883,14890,14895,14913,14917,14927,14931,14936,14952,14956,14966,14970,14975,14983,14987,15019,15023,15027,15035,15039,15044,15049,15063,15077,15086],{"__ignoreMap":23},[102,14843,14844,14846],{"class":104,"line":105},[102,14845,1938],{"class":108},[102,14847,1941],{"class":217},[102,14849,14850,14852,14854,14856],{"class":104,"line":24},[102,14851,1946],{"class":108},[102,14853,1949],{"class":108},[102,14855,1953],{"class":1952},[102,14857,1279],{"class":112},[102,14859,14860,14862],{"class":104,"line":1168},[102,14861,1938],{"class":108},[102,14863,7739],{"class":217},[102,14865,14866,14868],{"class":104,"line":1183},[102,14867,14684],{"class":108},[102,14869,7752],{"class":1952},[102,14871,14872],{"class":104,"line":1189},[102,14873,1535],{"class":112},[102,14875,14876],{"class":104,"line":1203},[102,14877,14706],{"class":108},[102,14879,14880],{"class":104,"line":1209},[102,14881,14882],{"class":112},"    string m_name;\n",[102,14884,14885,14887],{"class":104,"line":1300},[102,14886,1974],{"class":108},[102,14888,14889],{"class":112}," m_id;\n",[102,14891,14892],{"class":104,"line":1306},[102,14893,14894],{"class":171},"    \u002F\u002F赋值姓名\n",[102,14896,14897,14900,14903,14905,14908,14911],{"class":104,"line":1318},[102,14898,14899],{"class":108},"    void",[102,14901,14902],{"class":1952}," setName",[102,14904,113],{"class":112},[102,14906,14907],{"class":1952},"string",[102,14909,14910],{"class":5206}," name",[102,14912,119],{"class":112},[102,14914,14915],{"class":104,"line":1601},[102,14916,2019],{"class":112},[102,14918,14919,14922,14924],{"class":104,"line":1606},[102,14920,14921],{"class":112},"        m_name",[102,14923,158],{"class":108},[102,14925,14926],{"class":112},"name;\n",[102,14928,14929],{"class":104,"line":1612},[102,14930,2176],{"class":112},[102,14932,14933],{"class":104,"line":1617},[102,14934,14935],{"class":171},"    \u002F\u002F赋值学号\n",[102,14937,14938,14940,14943,14945,14947,14950],{"class":104,"line":1631},[102,14939,14899],{"class":108},[102,14941,14942],{"class":1952}," setId",[102,14944,113],{"class":112},[102,14946,116],{"class":108},[102,14948,14949],{"class":5206}," id",[102,14951,119],{"class":112},[102,14953,14954],{"class":104,"line":1636},[102,14955,2019],{"class":112},[102,14957,14958,14961,14963],{"class":104,"line":1642},[102,14959,14960],{"class":112},"        m_id",[102,14962,158],{"class":108},[102,14964,14965],{"class":112},"id;\n",[102,14967,14968],{"class":104,"line":1663},[102,14969,2176],{"class":112},[102,14971,14972],{"class":104,"line":1668},[102,14973,14974],{"class":171},"    \u002F\u002F打印学生信息\n",[102,14976,14977,14979,14981],{"class":104,"line":1682},[102,14978,14899],{"class":108},[102,14980,9605],{"class":1952},[102,14982,1965],{"class":112},[102,14984,14985],{"class":104,"line":1687},[102,14986,2019],{"class":112},[102,14988,14989,14991,14993,14996,14998,15001,15003,15005,15007,15010,15012,15015,15017],{"class":104,"line":1716},[102,14990,3440],{"class":112},[102,14992,1157],{"class":108},[102,14994,14995],{"class":217},"\"姓名：\"",[102,14997,1157],{"class":108},[102,14999,15000],{"class":112},"m_name",[102,15002,1157],{"class":108},[102,15004,4348],{"class":217},[102,15006,1157],{"class":108},[102,15008,15009],{"class":217},"\"学号：\"",[102,15011,1157],{"class":108},[102,15013,15014],{"class":112},"m_id",[102,15016,1157],{"class":108},[102,15018,1180],{"class":112},[102,15020,15021],{"class":104,"line":1721},[102,15022,2176],{"class":112},[102,15024,15025],{"class":104,"line":1738},[102,15026,3984],{"class":112},[102,15028,15029,15031,15033],{"class":104,"line":1743},[102,15030,116],{"class":108},[102,15032,1962],{"class":1952},[102,15034,1965],{"class":112},[102,15036,15037],{"class":104,"line":1748},[102,15038,1535],{"class":112},[102,15040,15041],{"class":104,"line":1753},[102,15042,15043],{"class":171},"    \u002F\u002F实例化\n",[102,15045,15046],{"class":104,"line":1767},[102,15047,15048],{"class":112},"    Student s1;\n",[102,15050,15051,15054,15057,15059,15061],{"class":104,"line":1772},[102,15052,15053],{"class":112},"    s1.",[102,15055,15056],{"class":1952},"setName",[102,15058,113],{"class":112},[102,15060,7906],{"class":217},[102,15062,2708],{"class":112},[102,15064,15065,15067,15070,15072,15075],{"class":104,"line":2566},[102,15066,15053],{"class":112},[102,15068,15069],{"class":1952},"setId",[102,15071,113],{"class":112},[102,15073,15074],{"class":161},"123456",[102,15076,2708],{"class":112},[102,15078,15079,15081,15084],{"class":104,"line":2580},[102,15080,15053],{"class":112},[102,15082,15083],{"class":1952},"printInfo",[102,15085,5626],{"class":112},[102,15087,15088],{"class":104,"line":2588},[102,15089,1554],{"class":112},[19,15091,15092],{},"类中的属性和行为统称为成员",[19,15094,15095],{},"属性：成员属性(成员变量)",[19,15097,15098],{},"方法：成员函数(成员方法)",[19,15100,15101],{},[262,15102,15103],{},"封装意义二：",[19,15105,15106],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15108,15109],{},"访问权限有三种：",[56,15111,15112,15115,15118],{},[59,15113,15114],{},"public        公共权限",[59,15116,15117],{},"protected 保护权限",[59,15119,15120],{},"private      私有权限",[19,15122,15123],{},[262,15124,15125],{},"示例：",[93,15127,15129],{"className":9931,"code":15128,"language":9933,"meta":23,"style":23},"\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",[99,15130,15131,15136,15141,15146,15151,15155,15162,15166,15171,15175,15180,15184,15189,15194,15199,15203,15208,15213,15220,15224,15228,15236,15240,15251,15263,15275,15279,15283,15287,15295,15299,15304,15316,15324,15332,15336,15346,15350,15358],{"__ignoreMap":23},[102,15132,15133],{"class":104,"line":105},[102,15134,15135],{"class":171},"\u002F\u002F三种权限\n",[102,15137,15138],{"class":104,"line":24},[102,15139,15140],{"class":171},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[102,15142,15143],{"class":104,"line":1168},[102,15144,15145],{"class":171},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[102,15147,15148],{"class":104,"line":1183},[102,15149,15150],{"class":171},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[102,15152,15153],{"class":104,"line":1189},[102,15154,2389],{"emptyLinePlaceholder":30},[102,15156,15157,15159],{"class":104,"line":1203},[102,15158,14684],{"class":108},[102,15160,15161],{"class":1952}," Person\n",[102,15163,15164],{"class":104,"line":1209},[102,15165,1535],{"class":112},[102,15167,15168],{"class":104,"line":1300},[102,15169,15170],{"class":171},"    \u002F\u002F姓名  公共权限\n",[102,15172,15173],{"class":104,"line":1306},[102,15174,14706],{"class":108},[102,15176,15177],{"class":104,"line":1318},[102,15178,15179],{"class":112},"    string m_Name;\n",[102,15181,15182],{"class":104,"line":1601},[102,15183,2389],{"emptyLinePlaceholder":30},[102,15185,15186],{"class":104,"line":1606},[102,15187,15188],{"class":171},"    \u002F\u002F汽车  保护权限\n",[102,15190,15191],{"class":104,"line":1612},[102,15192,15193],{"class":108},"protected:\n",[102,15195,15196],{"class":104,"line":1617},[102,15197,15198],{"class":112},"    string m_Car;\n",[102,15200,15201],{"class":104,"line":1631},[102,15202,2389],{"emptyLinePlaceholder":30},[102,15204,15205],{"class":104,"line":1636},[102,15206,15207],{"class":171},"    \u002F\u002F银行卡密码  私有权限\n",[102,15209,15210],{"class":104,"line":1642},[102,15211,15212],{"class":108},"private:\n",[102,15214,15215,15217],{"class":104,"line":1663},[102,15216,1974],{"class":108},[102,15218,15219],{"class":112}," m_Password;\n",[102,15221,15222],{"class":104,"line":1668},[102,15223,2389],{"emptyLinePlaceholder":30},[102,15225,15226],{"class":104,"line":1682},[102,15227,14706],{"class":108},[102,15229,15230,15232,15234],{"class":104,"line":1687},[102,15231,14899],{"class":108},[102,15233,11375],{"class":1952},[102,15235,1965],{"class":112},[102,15237,15238],{"class":104,"line":1716},[102,15239,2019],{"class":112},[102,15241,15242,15245,15247,15249],{"class":104,"line":1721},[102,15243,15244],{"class":112},"        m_Name ",[102,15246,158],{"class":108},[102,15248,8928],{"class":217},[102,15250,1279],{"class":112},[102,15252,15253,15256,15258,15261],{"class":104,"line":1738},[102,15254,15255],{"class":112},"        m_Car ",[102,15257,158],{"class":108},[102,15259,15260],{"class":217}," \"拖拉机\"",[102,15262,1279],{"class":112},[102,15264,15265,15268,15270,15273],{"class":104,"line":1743},[102,15266,15267],{"class":112},"        m_Password ",[102,15269,158],{"class":108},[102,15271,15272],{"class":161}," 123456",[102,15274,1279],{"class":112},[102,15276,15277],{"class":104,"line":1748},[102,15278,2176],{"class":112},[102,15280,15281],{"class":104,"line":1753},[102,15282,3984],{"class":112},[102,15284,15285],{"class":104,"line":1767},[102,15286,2389],{"emptyLinePlaceholder":30},[102,15288,15289,15291,15293],{"class":104,"line":1772},[102,15290,116],{"class":108},[102,15292,1962],{"class":1952},[102,15294,10843],{"class":112},[102,15296,15297],{"class":104,"line":2566},[102,15298,2389],{"emptyLinePlaceholder":30},[102,15300,15301],{"class":104,"line":2580},[102,15302,15303],{"class":112},"    Person p;\n",[102,15305,15306,15309,15311,15314],{"class":104,"line":2588},[102,15307,15308],{"class":112},"    p.m_Name ",[102,15310,158],{"class":108},[102,15312,15313],{"class":217}," \"李四\"",[102,15315,1279],{"class":112},[102,15317,15318,15321],{"class":104,"line":2593},[102,15319,15320],{"class":171},"    \u002F\u002Fp.m_Car = \"奔驰\";",[102,15322,15323],{"class":171},"  \u002F\u002F保护权限类外访问不到\n",[102,15325,15326,15329],{"class":104,"line":2599},[102,15327,15328],{"class":171},"    \u002F\u002Fp.m_Password = 123;",[102,15330,15331],{"class":171}," \u002F\u002F私有权限类外访问不到\n",[102,15333,15334],{"class":104,"line":2605},[102,15335,2389],{"emptyLinePlaceholder":30},[102,15337,15338,15340,15342,15344],{"class":104,"line":2610},[102,15339,2292],{"class":1952},[102,15341,113],{"class":112},[102,15343,2297],{"class":217},[102,15345,2708],{"class":112},[102,15347,15348],{"class":104,"line":7938},[102,15349,2389],{"emptyLinePlaceholder":30},[102,15351,15352,15354,15356],{"class":104,"line":7962},[102,15353,4079],{"class":108},[102,15355,4082],{"class":161},[102,15357,1279],{"class":112},[102,15359,15360],{"class":104,"line":7967},[102,15361,1554],{"class":112},[73,15363,15365],{"id":15364},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15367,15368,15369,15372,15373],{},"在C++中 struct和class唯一的",[262,15370,15371],{},"区别","就在于 ",[262,15374,15375],{},"默认的访问权限不同",[19,15377,15378],{},"区别：",[1120,15380,15381,15384],{},[59,15382,15383],{},"struct 默认权限为公共",[59,15385,15386],{},"class   默认权限为私有",[93,15388,15390],{"className":9931,"code":15389,"language":9933,"meta":23,"style":23},"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",[99,15391,15392,15399,15403,15413,15417,15421,15428,15432,15442,15446,15450,15458,15462,15467,15481,15485,15490,15504,15508,15518,15522,15530],{"__ignoreMap":23},[102,15393,15394,15396],{"class":104,"line":105},[102,15395,14684],{"class":108},[102,15397,15398],{"class":1952}," C1\n",[102,15400,15401],{"class":104,"line":24},[102,15402,1535],{"class":112},[102,15404,15405,15407,15410],{"class":104,"line":1168},[102,15406,1974],{"class":108},[102,15408,15409],{"class":112},"  m_A;",[102,15411,15412],{"class":171}," \u002F\u002F默认是私有权限\n",[102,15414,15415],{"class":104,"line":1183},[102,15416,3984],{"class":112},[102,15418,15419],{"class":104,"line":1189},[102,15420,2389],{"emptyLinePlaceholder":30},[102,15422,15423,15425],{"class":104,"line":1203},[102,15424,7749],{"class":108},[102,15426,15427],{"class":1952}," C2\n",[102,15429,15430],{"class":104,"line":1209},[102,15431,1535],{"class":112},[102,15433,15434,15436,15439],{"class":104,"line":1300},[102,15435,1974],{"class":108},[102,15437,15438],{"class":112}," m_A;",[102,15440,15441],{"class":171},"  \u002F\u002F默认是公共权限\n",[102,15443,15444],{"class":104,"line":1306},[102,15445,3984],{"class":112},[102,15447,15448],{"class":104,"line":1318},[102,15449,2389],{"emptyLinePlaceholder":30},[102,15451,15452,15454,15456],{"class":104,"line":1601},[102,15453,116],{"class":108},[102,15455,1962],{"class":1952},[102,15457,10843],{"class":112},[102,15459,15460],{"class":104,"line":1606},[102,15461,2389],{"emptyLinePlaceholder":30},[102,15463,15464],{"class":104,"line":1612},[102,15465,15466],{"class":112},"    C1 c1;\n",[102,15468,15469,15472,15474,15476,15478],{"class":104,"line":1617},[102,15470,15471],{"class":112},"    c1.m_A ",[102,15473,158],{"class":108},[102,15475,2027],{"class":161},[102,15477,168],{"class":112},[102,15479,15480],{"class":171}," \u002F\u002F错误，访问权限是私有\n",[102,15482,15483],{"class":104,"line":1631},[102,15484,2389],{"emptyLinePlaceholder":30},[102,15486,15487],{"class":104,"line":1636},[102,15488,15489],{"class":112},"    C2 c2;\n",[102,15491,15492,15495,15497,15499,15501],{"class":104,"line":1642},[102,15493,15494],{"class":112},"    c2.m_A ",[102,15496,158],{"class":108},[102,15498,2027],{"class":161},[102,15500,168],{"class":112},[102,15502,15503],{"class":171}," \u002F\u002F正确，访问权限是公共\n",[102,15505,15506],{"class":104,"line":1663},[102,15507,2389],{"emptyLinePlaceholder":30},[102,15509,15510,15512,15514,15516],{"class":104,"line":1668},[102,15511,2292],{"class":1952},[102,15513,113],{"class":112},[102,15515,2297],{"class":217},[102,15517,2708],{"class":112},[102,15519,15520],{"class":104,"line":1682},[102,15521,2389],{"emptyLinePlaceholder":30},[102,15523,15524,15526,15528],{"class":104,"line":1687},[102,15525,4079],{"class":108},[102,15527,4082],{"class":161},[102,15529,1279],{"class":112},[102,15531,15532],{"class":104,"line":1716},[102,15533,1554],{"class":112},[73,15535,15537],{"id":15536},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15539,15540],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15542,15543],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15545,15546],{},[262,15547,15125],{},[93,15549,15551],{"className":9931,"code":15550,"language":9933,"meta":23,"style":23},"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",[99,15552,15553,15563,15567,15571,15576,15590,15599,15603,15613,15617,15624,15628,15632,15636,15641,15650,15657,15661,15666,15682,15705,15718,15725,15729,15738,15742,15746,15751,15767,15777,15781,15785,15789,15797,15801,15811,15815,15823,15827,15831,15839,15843,15847,15852,15865,15888,15892,15897,15910,15932,15936,15941,15955,15963,15967,15977,15981,15989],{"__ignoreMap":23},[102,15554,15555,15557,15560],{"class":104,"line":105},[102,15556,14684],{"class":108},[102,15558,15559],{"class":1952}," Person",[102,15561,15562],{"class":112}," {\n",[102,15564,15565],{"class":104,"line":24},[102,15566,14706],{"class":108},[102,15568,15569],{"class":104,"line":1168},[102,15570,2389],{"emptyLinePlaceholder":30},[102,15572,15573],{"class":104,"line":1183},[102,15574,15575],{"class":171},"    \u002F\u002F姓名设置可读可写\n",[102,15577,15578,15580,15582,15584,15586,15588],{"class":104,"line":1189},[102,15579,14899],{"class":108},[102,15581,14902],{"class":1952},[102,15583,113],{"class":112},[102,15585,14907],{"class":1952},[102,15587,14910],{"class":5206},[102,15589,12432],{"class":112},[102,15591,15592,15594,15596],{"class":104,"line":1203},[102,15593,15244],{"class":112},[102,15595,158],{"class":108},[102,15597,15598],{"class":112}," name;\n",[102,15600,15601],{"class":104,"line":1209},[102,15602,2176],{"class":112},[102,15604,15605,15608,15611],{"class":104,"line":1300},[102,15606,15607],{"class":1952},"    string",[102,15609,15610],{"class":1952}," getName",[102,15612,1965],{"class":112},[102,15614,15615],{"class":104,"line":1306},[102,15616,2019],{"class":112},[102,15618,15619,15621],{"class":104,"line":1318},[102,15620,14742],{"class":108},[102,15622,15623],{"class":112}," m_Name;\n",[102,15625,15626],{"class":104,"line":1601},[102,15627,2176],{"class":112},[102,15629,15630],{"class":104,"line":1606},[102,15631,2389],{"emptyLinePlaceholder":30},[102,15633,15634],{"class":104,"line":1612},[102,15635,2389],{"emptyLinePlaceholder":30},[102,15637,15638],{"class":104,"line":1617},[102,15639,15640],{"class":171},"    \u002F\u002F获取年龄 \n",[102,15642,15643,15645,15648],{"class":104,"line":1631},[102,15644,1974],{"class":108},[102,15646,15647],{"class":1952}," getAge",[102,15649,10843],{"class":112},[102,15651,15652,15654],{"class":104,"line":1636},[102,15653,14742],{"class":108},[102,15655,15656],{"class":112}," m_Age;\n",[102,15658,15659],{"class":104,"line":1642},[102,15660,2176],{"class":112},[102,15662,15663],{"class":104,"line":1663},[102,15664,15665],{"class":171},"    \u002F\u002F设置年龄\n",[102,15667,15668,15670,15673,15675,15677,15680],{"class":104,"line":1668},[102,15669,14899],{"class":108},[102,15671,15672],{"class":1952}," setAge",[102,15674,113],{"class":112},[102,15676,116],{"class":108},[102,15678,15679],{"class":5206}," age",[102,15681,12432],{"class":112},[102,15683,15684,15686,15689,15691,15693,15695,15698,15700,15703],{"class":104,"line":1682},[102,15685,2486],{"class":108},[102,15687,15688],{"class":112}," (age ",[102,15690,1023],{"class":108},[102,15692,4082],{"class":161},[102,15694,3244],{"class":108},[102,15696,15697],{"class":112}," age ",[102,15699,1073],{"class":108},[102,15701,15702],{"class":161}," 150",[102,15704,12432],{"class":112},[102,15706,15707,15709,15711,15714,15716],{"class":104,"line":1687},[102,15708,9709],{"class":112},[102,15710,1157],{"class":108},[102,15712,15713],{"class":217}," \"你个老妖精!\"",[102,15715,1433],{"class":108},[102,15717,8830],{"class":112},[102,15719,15720,15723],{"class":104,"line":1716},[102,15721,15722],{"class":108},"            return",[102,15724,1279],{"class":112},[102,15726,15727],{"class":104,"line":1721},[102,15728,2518],{"class":112},[102,15730,15731,15734,15736],{"class":104,"line":1738},[102,15732,15733],{"class":112},"        m_Age ",[102,15735,158],{"class":108},[102,15737,7787],{"class":112},[102,15739,15740],{"class":104,"line":1743},[102,15741,2176],{"class":112},[102,15743,15744],{"class":104,"line":1748},[102,15745,2389],{"emptyLinePlaceholder":30},[102,15747,15748],{"class":104,"line":1753},[102,15749,15750],{"class":171},"    \u002F\u002F情人设置为只写\n",[102,15752,15753,15755,15758,15760,15762,15765],{"class":104,"line":1767},[102,15754,14899],{"class":108},[102,15756,15757],{"class":1952}," setLover",[102,15759,113],{"class":112},[102,15761,14907],{"class":1952},[102,15763,15764],{"class":5206}," lover",[102,15766,12432],{"class":112},[102,15768,15769,15772,15774],{"class":104,"line":1772},[102,15770,15771],{"class":112},"        m_Lover ",[102,15773,158],{"class":108},[102,15775,15776],{"class":112}," lover;\n",[102,15778,15779],{"class":104,"line":2566},[102,15780,2176],{"class":112},[102,15782,15783],{"class":104,"line":2580},[102,15784,2389],{"emptyLinePlaceholder":30},[102,15786,15787],{"class":104,"line":2588},[102,15788,15212],{"class":108},[102,15790,15791,15794],{"class":104,"line":2593},[102,15792,15793],{"class":112},"    string m_Name;",[102,15795,15796],{"class":171}," \u002F\u002F可读可写  姓名\n",[102,15798,15799],{"class":104,"line":2599},[102,15800,13200],{"class":112},[102,15802,15803,15805,15808],{"class":104,"line":2605},[102,15804,1974],{"class":108},[102,15806,15807],{"class":112}," m_Age;",[102,15809,15810],{"class":171}," \u002F\u002F只读  年龄\n",[102,15812,15813],{"class":104,"line":2610},[102,15814,2389],{"emptyLinePlaceholder":30},[102,15816,15817,15820],{"class":104,"line":7938},[102,15818,15819],{"class":112},"    string m_Lover;",[102,15821,15822],{"class":171}," \u002F\u002F只写  情人\n",[102,15824,15825],{"class":104,"line":7962},[102,15826,3984],{"class":112},[102,15828,15829],{"class":104,"line":7967},[102,15830,2389],{"emptyLinePlaceholder":30},[102,15832,15833,15835,15837],{"class":104,"line":7973},[102,15834,116],{"class":108},[102,15836,1962],{"class":1952},[102,15838,10843],{"class":112},[102,15840,15841],{"class":104,"line":8000},[102,15842,2389],{"emptyLinePlaceholder":30},[102,15844,15845],{"class":104,"line":8005},[102,15846,15303],{"class":112},[102,15848,15849],{"class":104,"line":8011},[102,15850,15851],{"class":171},"    \u002F\u002F姓名设置\n",[102,15853,15854,15857,15859,15861,15863],{"class":104,"line":8023},[102,15855,15856],{"class":112},"    p.",[102,15858,15056],{"class":1952},[102,15860,113],{"class":112},[102,15862,7906],{"class":217},[102,15864,2708],{"class":112},[102,15866,15867,15869,15871,15874,15876,15879,15882,15884,15886],{"class":104,"line":8035},[102,15868,6519],{"class":112},[102,15870,1157],{"class":108},[102,15872,15873],{"class":217}," \"姓名： \"",[102,15875,1433],{"class":108},[102,15877,15878],{"class":112}," p.",[102,15880,15881],{"class":1952},"getName",[102,15883,13040],{"class":112},[102,15885,1157],{"class":108},[102,15887,8830],{"class":112},[102,15889,15890],{"class":104,"line":8047},[102,15891,2389],{"emptyLinePlaceholder":30},[102,15893,15894],{"class":104,"line":9706},[102,15895,15896],{"class":171},"    \u002F\u002F年龄设置\n",[102,15898,15899,15901,15904,15906,15908],{"class":104,"line":9731},[102,15900,15856],{"class":112},[102,15902,15903],{"class":1952},"setAge",[102,15905,113],{"class":112},[102,15907,769],{"class":161},[102,15909,2708],{"class":112},[102,15911,15912,15914,15916,15919,15921,15923,15926,15928,15930],{"class":104,"line":9754},[102,15913,6519],{"class":112},[102,15915,1157],{"class":108},[102,15917,15918],{"class":217}," \"年龄： \"",[102,15920,1433],{"class":108},[102,15922,15878],{"class":112},[102,15924,15925],{"class":1952},"getAge",[102,15927,13040],{"class":112},[102,15929,1157],{"class":108},[102,15931,8830],{"class":112},[102,15933,15934],{"class":104,"line":9778},[102,15935,2389],{"emptyLinePlaceholder":30},[102,15937,15938],{"class":104,"line":9783},[102,15939,15940],{"class":171},"    \u002F\u002F情人设置\n",[102,15942,15943,15945,15948,15950,15953],{"class":104,"line":9788},[102,15944,15856],{"class":112},[102,15946,15947],{"class":1952},"setLover",[102,15949,113],{"class":112},[102,15951,15952],{"class":217},"\"苍井\"",[102,15954,2708],{"class":112},[102,15956,15957,15960],{"class":104,"line":9793},[102,15958,15959],{"class":171},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[102,15961,15962],{"class":171},"  \u002F\u002F只写属性，不可以读取\n",[102,15964,15965],{"class":104,"line":9802},[102,15966,2389],{"emptyLinePlaceholder":30},[102,15968,15969,15971,15973,15975],{"class":104,"line":9807},[102,15970,2292],{"class":1952},[102,15972,113],{"class":112},[102,15974,2297],{"class":217},[102,15976,2708],{"class":112},[102,15978,15979],{"class":104,"line":9813},[102,15980,2389],{"emptyLinePlaceholder":30},[102,15982,15983,15985,15987],{"class":104,"line":9834},[102,15984,4079],{"class":108},[102,15986,4082],{"class":161},[102,15988,1279],{"class":112},[102,15990,15991],{"class":104,"line":9840},[102,15992,1554],{"class":112},[73,15994,15996],{"id":15995},"_814封装案例","8.1.4封装案例",[56,15998,15999],{},[59,16000,16001,16004],{},[262,16002,16003],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1120,16006,16007,16010],{},[59,16008,16009],{},"求出立方体的面积和体积",[59,16011,16012],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[93,16014,16016],{"className":95,"code":16015,"language":97,"meta":23,"style":23},"#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",[99,16017,16018,16024,16034,16041,16045,16049,16054,16084,16088,16098,16108,16118,16122,16131,16135,16171,16175,16184,16188,16204,16208,16213,16222,16226,16233,16237,16246,16250,16257,16261,16270,16274,16281,16285,16290,16307,16311,16357,16361,16370,16374,16378,16382,16391,16395,16399,16404,16408,16414,16420,16426,16430,16434,16439,16461,16465,16519,16523,16531,16535,16540,16545,16558,16565,16581,16592,16598,16621,16627,16650,16664,16684,16690,16701,16724,16746,16751,16757,16771,16784,16789,16803,16808,16814,16819,16833,16838,16843,16857,16869,16874,16887,16892,16897,16902,16915,16920],{"__ignoreMap":23},[102,16019,16020,16022],{"class":104,"line":105},[102,16021,1938],{"class":108},[102,16023,1941],{"class":217},[102,16025,16026,16028,16030,16032],{"class":104,"line":24},[102,16027,1946],{"class":108},[102,16029,1949],{"class":108},[102,16031,1953],{"class":1952},[102,16033,1279],{"class":112},[102,16035,16036,16038],{"class":104,"line":1168},[102,16037,14684],{"class":108},[102,16039,16040],{"class":1952}," Cube\n",[102,16042,16043],{"class":104,"line":1183},[102,16044,1535],{"class":112},[102,16046,16047],{"class":104,"line":1189},[102,16048,14706],{"class":108},[102,16050,16051],{"class":104,"line":1203},[102,16052,16053],{"class":171},"    \u002F\u002F输入长宽高\n",[102,16055,16056,16058,16061,16063,16065,16068,16070,16072,16075,16077,16079,16082],{"class":104,"line":1209},[102,16057,14899],{"class":108},[102,16059,16060],{"class":1952}," setLwh",[102,16062,113],{"class":112},[102,16064,116],{"class":108},[102,16066,16067],{"class":5206}," l",[102,16069,491],{"class":112},[102,16071,116],{"class":108},[102,16073,16074],{"class":5206}," w",[102,16076,491],{"class":112},[102,16078,116],{"class":108},[102,16080,16081],{"class":5206}," h",[102,16083,119],{"class":112},[102,16085,16086],{"class":104,"line":1300},[102,16087,2019],{"class":112},[102,16089,16090,16093,16095],{"class":104,"line":1306},[102,16091,16092],{"class":112},"        m_L",[102,16094,158],{"class":108},[102,16096,16097],{"class":112},"l;\n",[102,16099,16100,16103,16105],{"class":104,"line":1318},[102,16101,16102],{"class":112},"        m_W",[102,16104,158],{"class":108},[102,16106,16107],{"class":112},"w;\n",[102,16109,16110,16113,16115],{"class":104,"line":1601},[102,16111,16112],{"class":112},"        m_H",[102,16114,158],{"class":108},[102,16116,16117],{"class":112},"h;\n",[102,16119,16120],{"class":104,"line":1606},[102,16121,2176],{"class":112},[102,16123,16124,16126,16129],{"class":104,"line":1612},[102,16125,1974],{"class":108},[102,16127,16128],{"class":1952}," mianji",[102,16130,1965],{"class":112},[102,16132,16133],{"class":104,"line":1617},[102,16134,2019],{"class":112},[102,16136,16137,16139,16141,16143,16146,16148,16151,16153,16156,16158,16161,16163,16166,16168],{"class":104,"line":1631},[102,16138,14742],{"class":108},[102,16140,14745],{"class":161},[102,16142,568],{"class":108},[102,16144,16145],{"class":112},"(m_L",[102,16147,568],{"class":108},[102,16149,16150],{"class":112},"m_W ",[102,16152,594],{"class":108},[102,16154,16155],{"class":112}," m_L",[102,16157,568],{"class":108},[102,16159,16160],{"class":112},"m_H ",[102,16162,594],{"class":108},[102,16164,16165],{"class":112}," m_W",[102,16167,568],{"class":108},[102,16169,16170],{"class":112},"m_H);\n",[102,16172,16173],{"class":104,"line":1636},[102,16174,2176],{"class":112},[102,16176,16177,16179,16182],{"class":104,"line":1642},[102,16178,1974],{"class":108},[102,16180,16181],{"class":1952}," tiji",[102,16183,1965],{"class":112},[102,16185,16186],{"class":104,"line":1663},[102,16187,2019],{"class":112},[102,16189,16190,16192,16194,16196,16199,16201],{"class":104,"line":1668},[102,16191,14742],{"class":108},[102,16193,16155],{"class":112},[102,16195,568],{"class":108},[102,16197,16198],{"class":112},"m_W",[102,16200,568],{"class":108},[102,16202,16203],{"class":112},"m_H;\n",[102,16205,16206],{"class":104,"line":1682},[102,16207,2176],{"class":112},[102,16209,16210],{"class":104,"line":1687},[102,16211,16212],{"class":171},"    \u002F\u002F获取长宽高\n",[102,16214,16215,16217,16220],{"class":104,"line":1716},[102,16216,1974],{"class":108},[102,16218,16219],{"class":1952}," getLength",[102,16221,1965],{"class":112},[102,16223,16224],{"class":104,"line":1721},[102,16225,2019],{"class":112},[102,16227,16228,16230],{"class":104,"line":1738},[102,16229,14742],{"class":108},[102,16231,16232],{"class":112}," m_L;\n",[102,16234,16235],{"class":104,"line":1743},[102,16236,2176],{"class":112},[102,16238,16239,16241,16244],{"class":104,"line":1748},[102,16240,1974],{"class":108},[102,16242,16243],{"class":1952}," getWidth",[102,16245,1965],{"class":112},[102,16247,16248],{"class":104,"line":1753},[102,16249,2019],{"class":112},[102,16251,16252,16254],{"class":104,"line":1767},[102,16253,14742],{"class":108},[102,16255,16256],{"class":112}," m_W;\n",[102,16258,16259],{"class":104,"line":1772},[102,16260,2176],{"class":112},[102,16262,16263,16265,16268],{"class":104,"line":2566},[102,16264,1974],{"class":108},[102,16266,16267],{"class":1952}," getHeight",[102,16269,1965],{"class":112},[102,16271,16272],{"class":104,"line":2580},[102,16273,2019],{"class":112},[102,16275,16276,16278],{"class":104,"line":2588},[102,16277,14742],{"class":108},[102,16279,16280],{"class":112}," m_H;\n",[102,16282,16283],{"class":104,"line":2593},[102,16284,2176],{"class":112},[102,16286,16287],{"class":104,"line":2599},[102,16288,16289],{"class":171},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[102,16291,16292,16295,16298,16300,16303,16305],{"class":104,"line":2605},[102,16293,16294],{"class":108},"    bool",[102,16296,16297],{"class":1952}," isEqual",[102,16299,113],{"class":112},[102,16301,16302],{"class":1952},"Cube",[102,16304,2838],{"class":5206},[102,16306,119],{"class":112},[102,16308,16309],{"class":104,"line":2610},[102,16310,2019],{"class":112},[102,16312,16313,16315,16318,16321,16323,16325,16328,16330,16333,16336,16338,16340,16343,16345,16347,16350,16352,16354],{"class":104,"line":7938},[102,16314,2486],{"class":108},[102,16316,16317],{"class":112}," (c.",[102,16319,16320],{"class":1952},"getLength",[102,16322,13040],{"class":112},[102,16324,2938],{"class":108},[102,16326,16327],{"class":112}," m_L ",[102,16329,1704],{"class":108},[102,16331,16332],{"class":112}," c.",[102,16334,16335],{"class":1952},"getWidth",[102,16337,13040],{"class":112},[102,16339,2938],{"class":108},[102,16341,16342],{"class":112}," m_W ",[102,16344,1704],{"class":108},[102,16346,16332],{"class":112},[102,16348,16349],{"class":1952},"getHeight",[102,16351,13040],{"class":112},[102,16353,2938],{"class":108},[102,16355,16356],{"class":112}," m_H)\n",[102,16358,16359],{"class":104,"line":7962},[102,16360,2499],{"class":112},[102,16362,16363,16365,16368],{"class":104,"line":7967},[102,16364,15722],{"class":108},[102,16366,16367],{"class":161}," true",[102,16369,1279],{"class":112},[102,16371,16372],{"class":104,"line":7973},[102,16373,2518],{"class":112},[102,16375,16376],{"class":104,"line":8000},[102,16377,2559],{"class":108},[102,16379,16380],{"class":104,"line":8005},[102,16381,2499],{"class":112},[102,16383,16384,16386,16389],{"class":104,"line":8011},[102,16385,15722],{"class":108},[102,16387,16388],{"class":161}," false",[102,16390,1279],{"class":112},[102,16392,16393],{"class":104,"line":8023},[102,16394,2518],{"class":112},[102,16396,16397],{"class":104,"line":8035},[102,16398,2176],{"class":112},[102,16400,16401],{"class":104,"line":8047},[102,16402,16403],{"class":171},"    \u002F\u002F私有属性\n",[102,16405,16406],{"class":104,"line":9706},[102,16407,15212],{"class":108},[102,16409,16410,16412],{"class":104,"line":9731},[102,16411,1974],{"class":108},[102,16413,16232],{"class":112},[102,16415,16416,16418],{"class":104,"line":9754},[102,16417,1974],{"class":108},[102,16419,16256],{"class":112},[102,16421,16422,16424],{"class":104,"line":9778},[102,16423,1974],{"class":108},[102,16425,16280],{"class":112},[102,16427,16428],{"class":104,"line":9783},[102,16429,2389],{"emptyLinePlaceholder":30},[102,16431,16432],{"class":104,"line":9788},[102,16433,3984],{"class":112},[102,16435,16436],{"class":104,"line":9793},[102,16437,16438],{"class":171},"\u002F\u002F全局函数判断两个立方体是否相等\n",[102,16440,16441,16443,16445,16447,16449,16452,16454,16456,16459],{"class":104,"line":9802},[102,16442,1343],{"class":108},[102,16444,16297],{"class":1952},[102,16446,113],{"class":112},[102,16448,16302],{"class":1952},[102,16450,16451],{"class":5206}," c1",[102,16453,491],{"class":112},[102,16455,16302],{"class":1952},[102,16457,16458],{"class":5206}," c2",[102,16460,119],{"class":112},[102,16462,16463],{"class":104,"line":9807},[102,16464,1535],{"class":112},[102,16466,16467,16469,16472,16474,16476,16478,16481,16483,16486,16488,16490,16492,16494,16496,16498,16500,16502,16504,16506,16508,16510,16512,16514,16516],{"class":104,"line":9813},[102,16468,4079],{"class":108},[102,16470,16471],{"class":112}," (c1.",[102,16473,16320],{"class":1952},[102,16475,13040],{"class":112},[102,16477,2938],{"class":108},[102,16479,16480],{"class":112}," c2.",[102,16482,16320],{"class":1952},[102,16484,16485],{"class":112},"()) ",[102,16487,1704],{"class":108},[102,16489,16471],{"class":112},[102,16491,16335],{"class":1952},[102,16493,13040],{"class":112},[102,16495,2938],{"class":108},[102,16497,16480],{"class":112},[102,16499,16335],{"class":1952},[102,16501,16485],{"class":112},[102,16503,1704],{"class":108},[102,16505,16471],{"class":112},[102,16507,16349],{"class":1952},[102,16509,13040],{"class":112},[102,16511,2938],{"class":108},[102,16513,16480],{"class":112},[102,16515,16349],{"class":1952},[102,16517,16518],{"class":112},"());\n",[102,16520,16521],{"class":104,"line":9834},[102,16522,1554],{"class":112},[102,16524,16525,16527,16529],{"class":104,"line":9840},[102,16526,116],{"class":108},[102,16528,1962],{"class":1952},[102,16530,1965],{"class":112},[102,16532,16533],{"class":104,"line":9854},[102,16534,1535],{"class":112},[102,16536,16537],{"class":104,"line":9860},[102,16538,16539],{"class":112},"    Cube c1;\n",[102,16541,16542],{"class":104,"line":9887},[102,16543,16544],{"class":171},"    \u002F\u002F输入立方体的长宽高\n",[102,16546,16547,16549,16551,16554,16556],{"class":104,"line":9896},[102,16548,1540],{"class":112},[102,16550,1157],{"class":108},[102,16552,16553],{"class":217},"\"请输入第一个立方体的长、宽、高：\"",[102,16555,1157],{"class":108},[102,16557,1180],{"class":112},[102,16559,16560,16562],{"class":104,"line":9902},[102,16561,1974],{"class":108},[102,16563,16564],{"class":112}," l,w,h,l1,w1,h1;\n",[102,16566,16567,16569,16571,16573,16575,16577,16579],{"class":104,"line":9910},[102,16568,2001],{"class":112},[102,16570,1418],{"class":108},[102,16572,631],{"class":112},[102,16574,1418],{"class":108},[102,16576,908],{"class":112},[102,16578,1418],{"class":108},[102,16580,16117],{"class":112},[102,16582,16583,16586,16589],{"class":104,"line":9915},[102,16584,16585],{"class":112},"    c1.",[102,16587,16588],{"class":1952},"setLwh",[102,16590,16591],{"class":112},"(l,w,h);\n",[102,16593,16595],{"class":104,"line":16594},66,[102,16596,16597],{"class":171},"    \u002F\u002F面积\n",[102,16599,16601,16603,16605,16608,16610,16612,16615,16617,16619],{"class":104,"line":16600},67,[102,16602,1540],{"class":112},[102,16604,1157],{"class":108},[102,16606,16607],{"class":217},"\"立方体的表面积为：\"",[102,16609,1157],{"class":108},[102,16611,14820],{"class":112},[102,16613,16614],{"class":1952},"mianji",[102,16616,2416],{"class":112},[102,16618,1157],{"class":108},[102,16620,1180],{"class":112},[102,16622,16624],{"class":104,"line":16623},68,[102,16625,16626],{"class":171},"    \u002F\u002F体积\n",[102,16628,16630,16632,16634,16637,16639,16641,16644,16646,16648],{"class":104,"line":16629},69,[102,16631,1540],{"class":112},[102,16633,1157],{"class":108},[102,16635,16636],{"class":217},"\"立方体的体积为：\"",[102,16638,1157],{"class":108},[102,16640,14820],{"class":112},[102,16642,16643],{"class":1952},"tiji",[102,16645,2416],{"class":112},[102,16647,1157],{"class":108},[102,16649,1180],{"class":112},[102,16651,16653,16655,16657,16660,16662],{"class":104,"line":16652},70,[102,16654,1540],{"class":112},[102,16656,1157],{"class":108},[102,16658,16659],{"class":217},"\"请输入第二个立方体的长、宽、高：\"",[102,16661,1157],{"class":108},[102,16663,1180],{"class":112},[102,16665,16667,16669,16671,16674,16676,16679,16681],{"class":104,"line":16666},71,[102,16668,2001],{"class":112},[102,16670,1418],{"class":108},[102,16672,16673],{"class":112},"l1",[102,16675,1418],{"class":108},[102,16677,16678],{"class":112},"w1",[102,16680,1418],{"class":108},[102,16682,16683],{"class":112},"h1;\n",[102,16685,16687],{"class":104,"line":16686},72,[102,16688,16689],{"class":112},"    Cube c2;\n",[102,16691,16693,16696,16698],{"class":104,"line":16692},73,[102,16694,16695],{"class":112},"    c2.",[102,16697,16588],{"class":1952},[102,16699,16700],{"class":112},"(l1,w1,h1);\n",[102,16702,16704,16706,16708,16711,16713,16716,16718,16720,16722],{"class":104,"line":16703},74,[102,16705,1540],{"class":112},[102,16707,1157],{"class":108},[102,16709,16710],{"class":217},"\"第二个立方体的表面积为：\"",[102,16712,1157],{"class":108},[102,16714,16715],{"class":112},"c2.",[102,16717,16614],{"class":1952},[102,16719,2416],{"class":112},[102,16721,1157],{"class":108},[102,16723,1180],{"class":112},[102,16725,16727,16729,16731,16734,16736,16738,16740,16742,16744],{"class":104,"line":16726},75,[102,16728,1540],{"class":112},[102,16730,1157],{"class":108},[102,16732,16733],{"class":217},"\"第二个立方体的体积为：\"",[102,16735,1157],{"class":108},[102,16737,16715],{"class":112},[102,16739,16643],{"class":1952},[102,16741,2416],{"class":112},[102,16743,1157],{"class":108},[102,16745,1180],{"class":112},[102,16747,16749],{"class":104,"line":16748},76,[102,16750,2389],{"emptyLinePlaceholder":30},[102,16752,16754],{"class":104,"line":16753},77,[102,16755,16756],{"class":171},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[102,16758,16760,16762,16764,16767,16769],{"class":104,"line":16759},78,[102,16761,1540],{"class":112},[102,16763,1157],{"class":108},[102,16765,16766],{"class":217},"\"内部函数判断结果：\"",[102,16768,1157],{"class":108},[102,16770,1180],{"class":112},[102,16772,16774,16776,16778,16781],{"class":104,"line":16773},79,[102,16775,3090],{"class":108},[102,16777,16471],{"class":112},[102,16779,16780],{"class":1952},"isEqual",[102,16782,16783],{"class":112},"(c2))\n",[102,16785,16787],{"class":104,"line":16786},80,[102,16788,2019],{"class":112},[102,16790,16792,16794,16796,16799,16801],{"class":104,"line":16791},81,[102,16793,3440],{"class":112},[102,16795,1157],{"class":108},[102,16797,16798],{"class":217},"\"两个立方体相等\"",[102,16800,1157],{"class":108},[102,16802,1180],{"class":112},[102,16804,16806],{"class":104,"line":16805},82,[102,16807,2176],{"class":112},[102,16809,16811],{"class":104,"line":16810},83,[102,16812,16813],{"class":108},"    else\n",[102,16815,16817],{"class":104,"line":16816},84,[102,16818,2019],{"class":112},[102,16820,16822,16824,16826,16829,16831],{"class":104,"line":16821},85,[102,16823,3440],{"class":112},[102,16825,1157],{"class":108},[102,16827,16828],{"class":217},"\"两个立方体不相等\"",[102,16830,1157],{"class":108},[102,16832,1180],{"class":112},[102,16834,16836],{"class":104,"line":16835},86,[102,16837,2176],{"class":112},[102,16839,16841],{"class":104,"line":16840},87,[102,16842,2389],{"emptyLinePlaceholder":30},[102,16844,16846,16848,16850,16853,16855],{"class":104,"line":16845},88,[102,16847,1540],{"class":112},[102,16849,1157],{"class":108},[102,16851,16852],{"class":217},"\"全局函数判断结果：\"",[102,16854,1157],{"class":108},[102,16856,1180],{"class":112},[102,16858,16860,16862,16864,16866],{"class":104,"line":16859},89,[102,16861,3090],{"class":108},[102,16863,1647],{"class":112},[102,16865,16780],{"class":1952},[102,16867,16868],{"class":112},"(c1, c2))\n",[102,16870,16872],{"class":104,"line":16871},90,[102,16873,2019],{"class":112},[102,16875,16877,16879,16881,16883,16885],{"class":104,"line":16876},91,[102,16878,3440],{"class":112},[102,16880,1157],{"class":108},[102,16882,16798],{"class":217},[102,16884,1157],{"class":108},[102,16886,1180],{"class":112},[102,16888,16890],{"class":104,"line":16889},92,[102,16891,2176],{"class":112},[102,16893,16895],{"class":104,"line":16894},93,[102,16896,16813],{"class":108},[102,16898,16900],{"class":104,"line":16899},94,[102,16901,2019],{"class":112},[102,16903,16905,16907,16909,16911,16913],{"class":104,"line":16904},95,[102,16906,3440],{"class":112},[102,16908,1157],{"class":108},[102,16910,16828],{"class":217},[102,16912,1157],{"class":108},[102,16914,1180],{"class":112},[102,16916,16918],{"class":104,"line":16917},96,[102,16919,2176],{"class":112},[102,16921,16923],{"class":104,"line":16922},97,[102,16924,1554],{"class":112},[56,16926,16927],{"start":24},[59,16928,16929],{},[262,16930,16931],{},"练习案例2：点和圆的关系",[1120,16933,16934],{},[59,16935,16936],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[93,16938,16940],{"className":95,"code":16939,"language":97,"meta":23,"style":23},"#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",[99,16941,16942,16948,16958,16965,16972,16976,16980,16985,17019,17024,17040,17054,17058,17062,17069,17076,17080,17086,17090,17094,17098,17120,17143,17148,17162,17177,17181,17185,17191,17196,17201,17205,17231,17235,17265,17293,17321,17338,17342,17355,17359,17363,17367,17380,17384,17388,17396,17400,17404,17408,17413,17417,17428,17435,17444,17454,17465,17472,17485,17496,17506,17517,17524,17538,17543,17553,17561],{"__ignoreMap":23},[102,16943,16944,16946],{"class":104,"line":105},[102,16945,1938],{"class":108},[102,16947,1941],{"class":217},[102,16949,16950,16952,16954,16956],{"class":104,"line":24},[102,16951,1946],{"class":108},[102,16953,1949],{"class":108},[102,16955,1953],{"class":1952},[102,16957,1279],{"class":112},[102,16959,16960,16962],{"class":104,"line":1168},[102,16961,1938],{"class":108},[102,16963,16964],{"class":217},"\u003Ccmath>\n",[102,16966,16967,16969],{"class":104,"line":1183},[102,16968,14684],{"class":108},[102,16970,16971],{"class":1952}," Point\n",[102,16973,16974],{"class":104,"line":1189},[102,16975,1535],{"class":112},[102,16977,16978],{"class":104,"line":1203},[102,16979,14706],{"class":108},[102,16981,16982],{"class":104,"line":1209},[102,16983,16984],{"class":171},"    \u002F\u002F赋值\n",[102,16986,16987,16989,16992,16994,16996,16999,17001,17003,17006,17009,17011,17014,17016],{"class":104,"line":1300},[102,16988,14899],{"class":108},[102,16990,16991],{"class":1952}," setPoint",[102,16993,113],{"class":112},[102,16995,14027],{"class":108},[102,16997,16998],{"class":5206}," x",[102,17000,12425],{"class":112},[102,17002,14027],{"class":108},[102,17004,17005],{"class":5206}," y",[102,17007,17008],{"class":112},") { m_x ",[102,17010,158],{"class":108},[102,17012,17013],{"class":112}," x; m_y ",[102,17015,158],{"class":108},[102,17017,17018],{"class":112}," y; }\n",[102,17020,17021],{"class":104,"line":1306},[102,17022,17023],{"class":171},"    \u002F\u002F获取坐标\n",[102,17025,17026,17028,17031,17034,17037],{"class":104,"line":1318},[102,17027,14728],{"class":108},[102,17029,17030],{"class":1952}," getX",[102,17032,17033],{"class":112},"() { ",[102,17035,17036],{"class":108},"return",[102,17038,17039],{"class":112}," m_x; }\n",[102,17041,17042,17044,17047,17049,17051],{"class":104,"line":1601},[102,17043,14728],{"class":108},[102,17045,17046],{"class":1952}," getY",[102,17048,17033],{"class":112},[102,17050,17036],{"class":108},[102,17052,17053],{"class":112}," m_y; }\n",[102,17055,17056],{"class":104,"line":1606},[102,17057,2389],{"emptyLinePlaceholder":30},[102,17059,17060],{"class":104,"line":1612},[102,17061,15212],{"class":108},[102,17063,17064,17066],{"class":104,"line":1617},[102,17065,14728],{"class":108},[102,17067,17068],{"class":112}," m_x;\n",[102,17070,17071,17073],{"class":104,"line":1631},[102,17072,14728],{"class":108},[102,17074,17075],{"class":112}," m_y;\n",[102,17077,17078],{"class":104,"line":1636},[102,17079,3984],{"class":112},[102,17081,17082,17084],{"class":104,"line":1642},[102,17083,14684],{"class":108},[102,17085,14687],{"class":1952},[102,17087,17088],{"class":104,"line":1663},[102,17089,1535],{"class":112},[102,17091,17092],{"class":104,"line":1668},[102,17093,14706],{"class":108},[102,17095,17096],{"class":104,"line":1682},[102,17097,16984],{"class":171},[102,17099,17100,17102,17105,17107,17109,17112,17115,17117],{"class":104,"line":1687},[102,17101,14899],{"class":108},[102,17103,17104],{"class":1952}," setRadius",[102,17106,113],{"class":112},[102,17108,14027],{"class":108},[102,17110,17111],{"class":5206}," r",[102,17113,17114],{"class":112},") { m_r ",[102,17116,158],{"class":108},[102,17118,17119],{"class":112}," r; }\n",[102,17121,17122,17124,17127,17129,17132,17135,17138,17140],{"class":104,"line":1716},[102,17123,14899],{"class":108},[102,17125,17126],{"class":1952}," setCenter",[102,17128,113],{"class":112},[102,17130,17131],{"class":1952},"Point",[102,17133,17134],{"class":5206}," center",[102,17136,17137],{"class":112},") { m_center ",[102,17139,158],{"class":108},[102,17141,17142],{"class":112}," center; }\n",[102,17144,17145],{"class":104,"line":1721},[102,17146,17147],{"class":171},"    \u002F\u002F获取属性\n",[102,17149,17150,17152,17155,17157,17159],{"class":104,"line":1738},[102,17151,14728],{"class":108},[102,17153,17154],{"class":1952}," getRadius",[102,17156,17033],{"class":112},[102,17158,17036],{"class":108},[102,17160,17161],{"class":112}," m_r; }\n",[102,17163,17164,17167,17170,17172,17174],{"class":104,"line":1743},[102,17165,17166],{"class":1952},"    Point",[102,17168,17169],{"class":1952}," getCenter",[102,17171,17033],{"class":112},[102,17173,17036],{"class":108},[102,17175,17176],{"class":112}," m_center; }\n",[102,17178,17179],{"class":104,"line":1748},[102,17180,2389],{"emptyLinePlaceholder":30},[102,17182,17183],{"class":104,"line":1753},[102,17184,15212],{"class":108},[102,17186,17187,17189],{"class":104,"line":1767},[102,17188,14728],{"class":108},[102,17190,14718],{"class":112},[102,17192,17193],{"class":104,"line":1772},[102,17194,17195],{"class":171},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[102,17197,17198],{"class":104,"line":2566},[102,17199,17200],{"class":112},"    Point m_center;\n",[102,17202,17203],{"class":104,"line":2580},[102,17204,3984],{"class":112},[102,17206,17207,17209,17212,17214,17217,17219,17221,17223,17225,17227,17229],{"class":104,"line":2588},[102,17208,5354],{"class":108},[102,17210,17211],{"class":1952}," isInCircle",[102,17213,113],{"class":112},[102,17215,17216],{"class":1952},"Circle",[102,17218,10574],{"class":108},[102,17220,401],{"class":5206},[102,17222,491],{"class":112},[102,17224,17131],{"class":1952},[102,17226,10574],{"class":108},[102,17228,19],{"class":5206},[102,17230,119],{"class":112},[102,17232,17233],{"class":104,"line":2593},[102,17234,1535],{"class":112},[102,17236,17237,17239,17242,17244,17246,17249,17252,17255,17257,17259,17261,17263],{"class":104,"line":2599},[102,17238,14728],{"class":108},[102,17240,17241],{"class":112}," dx ",[102,17243,158],{"class":108},[102,17245,16332],{"class":112},[102,17247,17248],{"class":1952},"getCenter",[102,17250,17251],{"class":112},"().",[102,17253,17254],{"class":1952},"getX",[102,17256,13040],{"class":112},[102,17258,645],{"class":108},[102,17260,15878],{"class":112},[102,17262,17254],{"class":1952},[102,17264,5626],{"class":112},[102,17266,17267,17269,17272,17274,17276,17278,17280,17283,17285,17287,17289,17291],{"class":104,"line":2605},[102,17268,14728],{"class":108},[102,17270,17271],{"class":112}," dy ",[102,17273,158],{"class":108},[102,17275,16332],{"class":112},[102,17277,17248],{"class":1952},[102,17279,17251],{"class":112},[102,17281,17282],{"class":1952},"getY",[102,17284,13040],{"class":112},[102,17286,645],{"class":108},[102,17288,15878],{"class":112},[102,17290,17282],{"class":1952},[102,17292,5626],{"class":112},[102,17294,17295,17297,17300,17302,17305,17308,17310,17312,17314,17316,17318],{"class":104,"line":2610},[102,17296,14728],{"class":108},[102,17298,17299],{"class":112}," distance ",[102,17301,158],{"class":108},[102,17303,17304],{"class":1952}," sqrt",[102,17306,17307],{"class":112},"(dx ",[102,17309,568],{"class":108},[102,17311,17241],{"class":112},[102,17313,594],{"class":108},[102,17315,17271],{"class":112},[102,17317,568],{"class":108},[102,17319,17320],{"class":112}," dy);\n",[102,17322,17323,17325,17328,17330,17332,17335],{"class":104,"line":7938},[102,17324,3090],{"class":108},[102,17326,17327],{"class":112}," (distance ",[102,17329,1023],{"class":108},[102,17331,16332],{"class":112},[102,17333,17334],{"class":1952},"getRadius",[102,17336,17337],{"class":112},"())\n",[102,17339,17340],{"class":104,"line":7962},[102,17341,2019],{"class":112},[102,17343,17344,17346,17348,17351,17353],{"class":104,"line":7967},[102,17345,9659],{"class":112},[102,17347,1157],{"class":108},[102,17349,17350],{"class":217}," \"点在圆内\"",[102,17352,1433],{"class":108},[102,17354,8830],{"class":112},[102,17356,17357],{"class":104,"line":7973},[102,17358,2176],{"class":112},[102,17360,17361],{"class":104,"line":8000},[102,17362,16813],{"class":108},[102,17364,17365],{"class":104,"line":8005},[102,17366,2019],{"class":112},[102,17368,17369,17371,17373,17376,17378],{"class":104,"line":8011},[102,17370,9659],{"class":112},[102,17372,1157],{"class":108},[102,17374,17375],{"class":217}," \"点在圆外\"",[102,17377,1433],{"class":108},[102,17379,8830],{"class":112},[102,17381,17382],{"class":104,"line":8023},[102,17383,2176],{"class":112},[102,17385,17386],{"class":104,"line":8035},[102,17387,1554],{"class":112},[102,17389,17390,17392,17394],{"class":104,"line":8047},[102,17391,116],{"class":108},[102,17393,1962],{"class":1952},[102,17395,1965],{"class":112},[102,17397,17398],{"class":104,"line":9706},[102,17399,1535],{"class":112},[102,17401,17402],{"class":104,"line":9731},[102,17403,15043],{"class":171},[102,17405,17406],{"class":104,"line":9754},[102,17407,14790],{"class":112},[102,17409,17410],{"class":104,"line":9778},[102,17411,17412],{"class":112},"    Point p1;\n",[102,17414,17415],{"class":104,"line":9783},[102,17416,16984],{"class":171},[102,17418,17419,17421,17423,17426],{"class":104,"line":9788},[102,17420,1540],{"class":112},[102,17422,1157],{"class":108},[102,17424,17425],{"class":217},"\"请输入圆的半径：\"",[102,17427,1279],{"class":112},[102,17429,17430,17432],{"class":104,"line":9793},[102,17431,14728],{"class":108},[102,17433,17434],{"class":112}," r;\n",[102,17436,17437,17439,17441],{"class":104,"line":9802},[102,17438,2001],{"class":112},[102,17440,1418],{"class":108},[102,17442,17443],{"class":112},"r;\n",[102,17445,17446,17448,17451],{"class":104,"line":9807},[102,17447,16585],{"class":112},[102,17449,17450],{"class":1952},"setRadius",[102,17452,17453],{"class":112},"(r);\n",[102,17455,17456,17458,17460,17463],{"class":104,"line":9813},[102,17457,1540],{"class":112},[102,17459,1157],{"class":108},[102,17461,17462],{"class":217},"\"请输入圆心坐标：\"",[102,17464,1279],{"class":112},[102,17466,17467,17469],{"class":104,"line":9834},[102,17468,14728],{"class":108},[102,17470,17471],{"class":112}," x, y;\n",[102,17473,17474,17476,17478,17480,17482],{"class":104,"line":9840},[102,17475,2001],{"class":112},[102,17477,1418],{"class":108},[102,17479,933],{"class":112},[102,17481,1418],{"class":108},[102,17483,17484],{"class":112},"y;\n",[102,17486,17487,17490,17493],{"class":104,"line":9854},[102,17488,17489],{"class":112},"    p1.",[102,17491,17492],{"class":1952},"setPoint",[102,17494,17495],{"class":112},"(x, y);\n",[102,17497,17498,17500,17503],{"class":104,"line":9860},[102,17499,16585],{"class":112},[102,17501,17502],{"class":1952},"setCenter",[102,17504,17505],{"class":112},"(p1);\n",[102,17507,17508,17510,17512,17515],{"class":104,"line":9887},[102,17509,1540],{"class":112},[102,17511,1157],{"class":108},[102,17513,17514],{"class":217},"\"请输入测试点坐标：\"",[102,17516,1279],{"class":112},[102,17518,17519,17521],{"class":104,"line":9896},[102,17520,14728],{"class":108},[102,17522,17523],{"class":112}," x1, y1;\n",[102,17525,17526,17528,17530,17533,17535],{"class":104,"line":9902},[102,17527,2001],{"class":112},[102,17529,1418],{"class":108},[102,17531,17532],{"class":112},"x1",[102,17534,1418],{"class":108},[102,17536,17537],{"class":112},"y1;\n",[102,17539,17540],{"class":104,"line":9910},[102,17541,17542],{"class":112},"    Point p2;\n",[102,17544,17545,17548,17550],{"class":104,"line":9915},[102,17546,17547],{"class":112},"    p2.",[102,17549,17492],{"class":1952},[102,17551,17552],{"class":112},"(x1, y1);\n",[102,17554,17555,17558],{"class":104,"line":16594},[102,17556,17557],{"class":1952},"    isInCircle",[102,17559,17560],{"class":112},"(c1, p2);\n",[102,17562,17563],{"class":104,"line":16600},[102,17564,1554],{"class":112},[19,17566,17567],{},"在类中可以让另一个类作为本来的成员",[19,17569,17570],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17572,17573],{},"创建point.h",[93,17575,17577],{"className":95,"code":17576,"language":97,"meta":23,"style":23},"#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",[99,17578,17579,17590,17596,17606,17612,17616,17621,17625,17629,17649,17653,17661,17669,17673,17677,17683,17689],{"__ignoreMap":23},[102,17580,17581,17584,17587],{"class":104,"line":105},[102,17582,17583],{"class":108},"#pragma",[102,17585,17586],{"class":1952}," once",[102,17588,17589],{"class":171}," \u002F\u002F防止头文件重复包含\n",[102,17591,17592,17594],{"class":104,"line":24},[102,17593,1938],{"class":108},[102,17595,1941],{"class":217},[102,17597,17598,17600,17602,17604],{"class":104,"line":1168},[102,17599,1946],{"class":108},[102,17601,1949],{"class":108},[102,17603,1953],{"class":1952},[102,17605,1279],{"class":112},[102,17607,17608,17610],{"class":104,"line":1183},[102,17609,14684],{"class":108},[102,17611,16971],{"class":1952},[102,17613,17614],{"class":104,"line":1189},[102,17615,1535],{"class":112},[102,17617,17618],{"class":104,"line":1203},[102,17619,17620],{"class":171},"\u002F\u002F做好声明与变量定义就可以\n",[102,17622,17623],{"class":104,"line":1209},[102,17624,14706],{"class":108},[102,17626,17627],{"class":104,"line":1300},[102,17628,16984],{"class":171},[102,17630,17631,17633,17635,17637,17639,17641,17643,17645,17647],{"class":104,"line":1306},[102,17632,14899],{"class":108},[102,17634,16991],{"class":1952},[102,17636,113],{"class":112},[102,17638,14027],{"class":108},[102,17640,16998],{"class":5206},[102,17642,12425],{"class":112},[102,17644,14027],{"class":108},[102,17646,17005],{"class":5206},[102,17648,2708],{"class":112},[102,17650,17651],{"class":104,"line":1318},[102,17652,17023],{"class":171},[102,17654,17655,17657,17659],{"class":104,"line":1601},[102,17656,14728],{"class":108},[102,17658,17030],{"class":1952},[102,17660,5626],{"class":112},[102,17662,17663,17665,17667],{"class":104,"line":1606},[102,17664,14728],{"class":108},[102,17666,17046],{"class":1952},[102,17668,5626],{"class":112},[102,17670,17671],{"class":104,"line":1612},[102,17672,2389],{"emptyLinePlaceholder":30},[102,17674,17675],{"class":104,"line":1617},[102,17676,15212],{"class":108},[102,17678,17679,17681],{"class":104,"line":1631},[102,17680,14728],{"class":108},[102,17682,17068],{"class":112},[102,17684,17685,17687],{"class":104,"line":1636},[102,17686,14728],{"class":108},[102,17688,17075],{"class":112},[102,17690,17691],{"class":104,"line":1642},[102,17692,3984],{"class":112},[19,17694,17695],{},"创建point.cpp",[93,17697,17699],{"className":95,"code":17698,"language":97,"meta":23,"style":23},"#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",[99,17700,17701,17708,17713,17747,17751,17767],{"__ignoreMap":23},[102,17702,17703,17705],{"class":104,"line":105},[102,17704,1938],{"class":108},[102,17706,17707],{"class":217},"\u003Cpoint.h>\n",[102,17709,17710],{"class":104,"line":24},[102,17711,17712],{"class":171},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[102,17714,17715,17717,17720,17723,17725,17727,17729,17731,17733,17735,17737,17739,17741,17743,17745],{"class":104,"line":1168},[102,17716,14899],{"class":108},[102,17718,17719],{"class":1952}," Point",[102,17721,17722],{"class":112},"::",[102,17724,17492],{"class":1952},[102,17726,113],{"class":112},[102,17728,14027],{"class":108},[102,17730,16998],{"class":5206},[102,17732,12425],{"class":112},[102,17734,14027],{"class":108},[102,17736,17005],{"class":5206},[102,17738,17008],{"class":112},[102,17740,158],{"class":108},[102,17742,17013],{"class":112},[102,17744,158],{"class":108},[102,17746,17018],{"class":112},[102,17748,17749],{"class":104,"line":1183},[102,17750,17023],{"class":171},[102,17752,17753,17755,17757,17759,17761,17763,17765],{"class":104,"line":1189},[102,17754,14728],{"class":108},[102,17756,17719],{"class":1952},[102,17758,17722],{"class":112},[102,17760,17254],{"class":1952},[102,17762,17033],{"class":112},[102,17764,17036],{"class":108},[102,17766,17039],{"class":112},[102,17768,17769,17771,17773,17775,17777,17779,17781],{"class":104,"line":1203},[102,17770,14728],{"class":108},[102,17772,17719],{"class":1952},[102,17774,17722],{"class":112},[102,17776,17282],{"class":1952},[102,17778,17033],{"class":112},[102,17780,17036],{"class":108},[102,17782,17053],{"class":112},[19,17784,17785],{},"创建circle.h",[93,17787,17789],{"className":95,"code":17788,"language":97,"meta":23,"style":23},"#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",[99,17790,17791,17798,17804,17814,17820,17826,17830,17834,17838,17852,17866,17870,17878,17886,17890,17894,17900,17904,17908],{"__ignoreMap":23},[102,17792,17793,17795],{"class":104,"line":105},[102,17794,17583],{"class":108},[102,17796,17797],{"class":1952}," once\n",[102,17799,17800,17802],{"class":104,"line":24},[102,17801,1938],{"class":108},[102,17803,1941],{"class":217},[102,17805,17806,17808,17810,17812],{"class":104,"line":1168},[102,17807,1946],{"class":108},[102,17809,1949],{"class":108},[102,17811,1953],{"class":1952},[102,17813,1279],{"class":112},[102,17815,17816,17818],{"class":104,"line":1183},[102,17817,1938],{"class":108},[102,17819,17707],{"class":217},[102,17821,17822,17824],{"class":104,"line":1189},[102,17823,14684],{"class":108},[102,17825,14687],{"class":1952},[102,17827,17828],{"class":104,"line":1203},[102,17829,1535],{"class":112},[102,17831,17832],{"class":104,"line":1209},[102,17833,14706],{"class":108},[102,17835,17836],{"class":104,"line":1300},[102,17837,16984],{"class":171},[102,17839,17840,17842,17844,17846,17848,17850],{"class":104,"line":1306},[102,17841,14899],{"class":108},[102,17843,17104],{"class":1952},[102,17845,113],{"class":112},[102,17847,14027],{"class":108},[102,17849,17111],{"class":5206},[102,17851,2708],{"class":112},[102,17853,17854,17856,17858,17860,17862,17864],{"class":104,"line":1318},[102,17855,14899],{"class":108},[102,17857,17126],{"class":1952},[102,17859,113],{"class":112},[102,17861,17131],{"class":1952},[102,17863,17134],{"class":5206},[102,17865,2708],{"class":112},[102,17867,17868],{"class":104,"line":1601},[102,17869,17147],{"class":171},[102,17871,17872,17874,17876],{"class":104,"line":1606},[102,17873,14728],{"class":108},[102,17875,17154],{"class":1952},[102,17877,5626],{"class":112},[102,17879,17880,17882,17884],{"class":104,"line":1612},[102,17881,17166],{"class":1952},[102,17883,17169],{"class":1952},[102,17885,5626],{"class":112},[102,17887,17888],{"class":104,"line":1617},[102,17889,2389],{"emptyLinePlaceholder":30},[102,17891,17892],{"class":104,"line":1631},[102,17893,15212],{"class":108},[102,17895,17896,17898],{"class":104,"line":1636},[102,17897,14728],{"class":108},[102,17899,14718],{"class":112},[102,17901,17902],{"class":104,"line":1642},[102,17903,17195],{"class":171},[102,17905,17906],{"class":104,"line":1663},[102,17907,17200],{"class":112},[102,17909,17910],{"class":104,"line":1668},[102,17911,3984],{"class":112},[19,17913,17914],{},"创建circle.cpp",[93,17916,17918],{"className":95,"code":17917,"language":97,"meta":23,"style":23},"#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",[99,17919,17920,17927,17950,17972,17977,17993],{"__ignoreMap":23},[102,17921,17922,17924],{"class":104,"line":105},[102,17923,1938],{"class":108},[102,17925,17926],{"class":217},"\u003Ccircle.h>\n",[102,17928,17929,17931,17934,17936,17938,17940,17942,17944,17946,17948],{"class":104,"line":24},[102,17930,5354],{"class":108},[102,17932,17933],{"class":1952}," Circle",[102,17935,17722],{"class":112},[102,17937,17450],{"class":1952},[102,17939,113],{"class":112},[102,17941,14027],{"class":108},[102,17943,17111],{"class":5206},[102,17945,17114],{"class":112},[102,17947,158],{"class":108},[102,17949,17119],{"class":112},[102,17951,17952,17954,17956,17958,17960,17962,17964,17966,17968,17970],{"class":104,"line":1168},[102,17953,5354],{"class":108},[102,17955,17933],{"class":1952},[102,17957,17722],{"class":112},[102,17959,17502],{"class":1952},[102,17961,113],{"class":112},[102,17963,17131],{"class":1952},[102,17965,17134],{"class":5206},[102,17967,17137],{"class":112},[102,17969,158],{"class":108},[102,17971,17142],{"class":112},[102,17973,17974],{"class":104,"line":1183},[102,17975,17976],{"class":171},"\u002F\u002F获取属性\n",[102,17978,17979,17981,17983,17985,17987,17989,17991],{"class":104,"line":1189},[102,17980,14027],{"class":108},[102,17982,17933],{"class":1952},[102,17984,17722],{"class":112},[102,17986,17334],{"class":1952},[102,17988,17033],{"class":112},[102,17990,17036],{"class":108},[102,17992,17161],{"class":112},[102,17994,17995,17997,17999,18001,18003,18005,18007],{"class":104,"line":1203},[102,17996,17131],{"class":1952},[102,17998,17933],{"class":1952},[102,18000,17722],{"class":112},[102,18002,17248],{"class":1952},[102,18004,17033],{"class":112},[102,18006,17036],{"class":108},[102,18008,17176],{"class":112},[19,18010,18011],{},"使用封装的类",[93,18013,18015],{"className":95,"code":18014,"language":97,"meta":23,"style":23},"#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",[99,18016,18017,18023,18033,18039,18045,18069,18073,18099,18125,18149,18163,18167,18179,18183,18187,18191,18203,18207,18211,18219,18223,18227,18231,18235,18239,18249,18255,18263,18271,18281,18287,18299,18307,18315,18325,18331,18343,18347,18355,18361],{"__ignoreMap":23},[102,18018,18019,18021],{"class":104,"line":105},[102,18020,1938],{"class":108},[102,18022,1941],{"class":217},[102,18024,18025,18027,18029,18031],{"class":104,"line":24},[102,18026,1946],{"class":108},[102,18028,1949],{"class":108},[102,18030,1953],{"class":1952},[102,18032,1279],{"class":112},[102,18034,18035,18037],{"class":104,"line":1168},[102,18036,1938],{"class":108},[102,18038,17926],{"class":217},[102,18040,18041,18043],{"class":104,"line":1183},[102,18042,1938],{"class":108},[102,18044,17707],{"class":217},[102,18046,18047,18049,18051,18053,18055,18057,18059,18061,18063,18065,18067],{"class":104,"line":1189},[102,18048,5354],{"class":108},[102,18050,17211],{"class":1952},[102,18052,113],{"class":112},[102,18054,17216],{"class":1952},[102,18056,10574],{"class":108},[102,18058,401],{"class":5206},[102,18060,491],{"class":112},[102,18062,17131],{"class":1952},[102,18064,10574],{"class":108},[102,18066,19],{"class":5206},[102,18068,119],{"class":112},[102,18070,18071],{"class":104,"line":1203},[102,18072,1535],{"class":112},[102,18074,18075,18077,18079,18081,18083,18085,18087,18089,18091,18093,18095,18097],{"class":104,"line":1209},[102,18076,14728],{"class":108},[102,18078,17241],{"class":112},[102,18080,158],{"class":108},[102,18082,16332],{"class":112},[102,18084,17248],{"class":1952},[102,18086,17251],{"class":112},[102,18088,17254],{"class":1952},[102,18090,13040],{"class":112},[102,18092,645],{"class":108},[102,18094,15878],{"class":112},[102,18096,17254],{"class":1952},[102,18098,5626],{"class":112},[102,18100,18101,18103,18105,18107,18109,18111,18113,18115,18117,18119,18121,18123],{"class":104,"line":1300},[102,18102,14728],{"class":108},[102,18104,17271],{"class":112},[102,18106,158],{"class":108},[102,18108,16332],{"class":112},[102,18110,17248],{"class":1952},[102,18112,17251],{"class":112},[102,18114,17282],{"class":1952},[102,18116,13040],{"class":112},[102,18118,645],{"class":108},[102,18120,15878],{"class":112},[102,18122,17282],{"class":1952},[102,18124,5626],{"class":112},[102,18126,18127,18129,18131,18133,18135,18137,18139,18141,18143,18145,18147],{"class":104,"line":1306},[102,18128,14728],{"class":108},[102,18130,17299],{"class":112},[102,18132,158],{"class":108},[102,18134,17304],{"class":1952},[102,18136,17307],{"class":112},[102,18138,568],{"class":108},[102,18140,17241],{"class":112},[102,18142,594],{"class":108},[102,18144,17271],{"class":112},[102,18146,568],{"class":108},[102,18148,17320],{"class":112},[102,18150,18151,18153,18155,18157,18159,18161],{"class":104,"line":1318},[102,18152,3090],{"class":108},[102,18154,17327],{"class":112},[102,18156,1023],{"class":108},[102,18158,16332],{"class":112},[102,18160,17334],{"class":1952},[102,18162,17337],{"class":112},[102,18164,18165],{"class":104,"line":1601},[102,18166,2019],{"class":112},[102,18168,18169,18171,18173,18175,18177],{"class":104,"line":1606},[102,18170,9659],{"class":112},[102,18172,1157],{"class":108},[102,18174,17350],{"class":217},[102,18176,1433],{"class":108},[102,18178,8830],{"class":112},[102,18180,18181],{"class":104,"line":1612},[102,18182,2176],{"class":112},[102,18184,18185],{"class":104,"line":1617},[102,18186,16813],{"class":108},[102,18188,18189],{"class":104,"line":1631},[102,18190,2019],{"class":112},[102,18192,18193,18195,18197,18199,18201],{"class":104,"line":1636},[102,18194,9659],{"class":112},[102,18196,1157],{"class":108},[102,18198,17375],{"class":217},[102,18200,1433],{"class":108},[102,18202,8830],{"class":112},[102,18204,18205],{"class":104,"line":1642},[102,18206,2176],{"class":112},[102,18208,18209],{"class":104,"line":1663},[102,18210,1554],{"class":112},[102,18212,18213,18215,18217],{"class":104,"line":1668},[102,18214,116],{"class":108},[102,18216,1962],{"class":1952},[102,18218,1965],{"class":112},[102,18220,18221],{"class":104,"line":1682},[102,18222,1535],{"class":112},[102,18224,18225],{"class":104,"line":1687},[102,18226,15043],{"class":171},[102,18228,18229],{"class":104,"line":1716},[102,18230,14790],{"class":112},[102,18232,18233],{"class":104,"line":1721},[102,18234,17412],{"class":112},[102,18236,18237],{"class":104,"line":1738},[102,18238,16984],{"class":171},[102,18240,18241,18243,18245,18247],{"class":104,"line":1743},[102,18242,1540],{"class":112},[102,18244,1157],{"class":108},[102,18246,17425],{"class":217},[102,18248,1279],{"class":112},[102,18250,18251,18253],{"class":104,"line":1748},[102,18252,14728],{"class":108},[102,18254,17434],{"class":112},[102,18256,18257,18259,18261],{"class":104,"line":1753},[102,18258,2001],{"class":112},[102,18260,1418],{"class":108},[102,18262,17443],{"class":112},[102,18264,18265,18267,18269],{"class":104,"line":1767},[102,18266,16585],{"class":112},[102,18268,17450],{"class":1952},[102,18270,17453],{"class":112},[102,18272,18273,18275,18277,18279],{"class":104,"line":1772},[102,18274,1540],{"class":112},[102,18276,1157],{"class":108},[102,18278,17462],{"class":217},[102,18280,1279],{"class":112},[102,18282,18283,18285],{"class":104,"line":2566},[102,18284,14728],{"class":108},[102,18286,17471],{"class":112},[102,18288,18289,18291,18293,18295,18297],{"class":104,"line":2580},[102,18290,2001],{"class":112},[102,18292,1418],{"class":108},[102,18294,933],{"class":112},[102,18296,1418],{"class":108},[102,18298,17484],{"class":112},[102,18300,18301,18303,18305],{"class":104,"line":2588},[102,18302,17489],{"class":112},[102,18304,17492],{"class":1952},[102,18306,17495],{"class":112},[102,18308,18309,18311,18313],{"class":104,"line":2593},[102,18310,16585],{"class":112},[102,18312,17502],{"class":1952},[102,18314,17505],{"class":112},[102,18316,18317,18319,18321,18323],{"class":104,"line":2599},[102,18318,1540],{"class":112},[102,18320,1157],{"class":108},[102,18322,17514],{"class":217},[102,18324,1279],{"class":112},[102,18326,18327,18329],{"class":104,"line":2605},[102,18328,14728],{"class":108},[102,18330,17523],{"class":112},[102,18332,18333,18335,18337,18339,18341],{"class":104,"line":2610},[102,18334,2001],{"class":112},[102,18336,1418],{"class":108},[102,18338,17532],{"class":112},[102,18340,1418],{"class":108},[102,18342,17537],{"class":112},[102,18344,18345],{"class":104,"line":7938},[102,18346,17542],{"class":112},[102,18348,18349,18351,18353],{"class":104,"line":7962},[102,18350,17547],{"class":112},[102,18352,17492],{"class":1952},[102,18354,17552],{"class":112},[102,18356,18357,18359],{"class":104,"line":7967},[102,18358,17557],{"class":1952},[102,18360,17560],{"class":112},[102,18362,18363],{"class":104,"line":7973},[102,18364,1554],{"class":112},[14,18366,18368],{"id":18367},"_82对象的初始化清理","8.2对象的初始化清理",[1120,18370,18371,18374],{},[59,18372,18373],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[59,18375,18376],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[73,18378,18380],{"id":18379},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18382,18383,18384,18387],{},"对象的",[262,18385,18386],{},"初始化和清理","也是两个非常重要的安全问题",[19,18389,18390],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18392,18393],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18395,18396,18397,18400,18401,18404],{},"c++利用了",[262,18398,18399],{},"构造函数","和",[262,18402,18403],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18406,18407,18408],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[262,18409,18410],{},"我们不提供构造和析构，编译器会提供",[19,18412,18413],{},[262,18414,18415],{},"编译器提供的构造函数和析构函数是空实现。",[1120,18417,18418,18421],{},[59,18419,18420],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[59,18422,18423,18424,18427],{},"析构函数：主要作用在于对象",[262,18425,18426],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18429,18430,18433],{},[262,18431,18432],{},"构造函数语法：",[99,18434,18435],{},"类名(){}",[56,18437,18438,18441,18444,18447,18450],{},[59,18439,18440],{},"构造函数，没有返回值也不写void",[59,18442,18443],{},"函数名称与类名相同",[59,18445,18446],{},"构造函数可以有参数，因此可以发生重载",[59,18448,18449],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[59,18451,18452,18453,542],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[99,18454,18455],{},"Person(){}",[19,18457,18458,13785,18461],{},[262,18459,18460],{},"析构函数语法：",[99,18462,18463],{},"~类名(){}",[56,18465,18466,18469,18472,18478],{},[59,18467,18468],{},"析构函数，没有返回值也不写void",[59,18470,18471],{},"函数名称与类名相同,在名称前加上符号  ~",[59,18473,18474,18475],{},"析构函数不可以有参数，因此",[262,18476,18477],{},"不可以发生重载",[59,18479,18480],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[93,18482,18484],{"className":95,"code":18483,"language":97,"meta":23,"style":23},"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",[99,18485,18486,18492,18496,18500,18505,18512,18516,18529,18533,18538,18545,18549,18562,18566,18570,18574,18578,18586,18590,18598,18602,18606,18614,18618,18623,18627,18634,18638,18651,18655,18663],{"__ignoreMap":23},[102,18487,18488,18490],{"class":104,"line":105},[102,18489,14684],{"class":108},[102,18491,15161],{"class":1952},[102,18493,18494],{"class":104,"line":24},[102,18495,1535],{"class":112},[102,18497,18498],{"class":104,"line":1168},[102,18499,14706],{"class":108},[102,18501,18502],{"class":104,"line":1183},[102,18503,18504],{"class":171},"    \u002F\u002F构造函数\n",[102,18506,18507,18510],{"class":104,"line":1189},[102,18508,18509],{"class":1952},"    Person",[102,18511,1965],{"class":112},[102,18513,18514],{"class":104,"line":1203},[102,18515,2019],{"class":112},[102,18517,18518,18520,18522,18525,18527],{"class":104,"line":1209},[102,18519,9659],{"class":112},[102,18521,1157],{"class":108},[102,18523,18524],{"class":217}," \"Person的构造函数调用\"",[102,18526,1433],{"class":108},[102,18528,8830],{"class":112},[102,18530,18531],{"class":104,"line":1300},[102,18532,2176],{"class":112},[102,18534,18535],{"class":104,"line":1306},[102,18536,18537],{"class":171},"    \u002F\u002F析构函数\n",[102,18539,18540,18543],{"class":104,"line":1318},[102,18541,18542],{"class":1952},"    ~Person",[102,18544,1965],{"class":112},[102,18546,18547],{"class":104,"line":1601},[102,18548,2019],{"class":112},[102,18550,18551,18553,18555,18558,18560],{"class":104,"line":1606},[102,18552,9659],{"class":112},[102,18554,1157],{"class":108},[102,18556,18557],{"class":217}," \"Person的析构函数调用\"",[102,18559,1433],{"class":108},[102,18561,8830],{"class":112},[102,18563,18564],{"class":104,"line":1612},[102,18565,2176],{"class":112},[102,18567,18568],{"class":104,"line":1617},[102,18569,2389],{"emptyLinePlaceholder":30},[102,18571,18572],{"class":104,"line":1631},[102,18573,3984],{"class":112},[102,18575,18576],{"class":104,"line":1636},[102,18577,2389],{"emptyLinePlaceholder":30},[102,18579,18580,18582,18584],{"class":104,"line":1642},[102,18581,5354],{"class":108},[102,18583,5578],{"class":1952},[102,18585,1965],{"class":112},[102,18587,18588],{"class":104,"line":1663},[102,18589,1535],{"class":112},[102,18591,18592,18595],{"class":104,"line":1668},[102,18593,18594],{"class":112},"    Person p;",[102,18596,18597],{"class":171},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[102,18599,18600],{"class":104,"line":1682},[102,18601,1554],{"class":112},[102,18603,18604],{"class":104,"line":1687},[102,18605,2389],{"emptyLinePlaceholder":30},[102,18607,18608,18610,18612],{"class":104,"line":1716},[102,18609,116],{"class":108},[102,18611,1962],{"class":1952},[102,18613,10843],{"class":112},[102,18615,18616],{"class":104,"line":1721},[102,18617,13200],{"class":112},[102,18619,18620],{"class":104,"line":1738},[102,18621,18622],{"class":171},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[102,18624,18625],{"class":104,"line":1743},[102,18626,2389],{"emptyLinePlaceholder":30},[102,18628,18629,18631],{"class":104,"line":1748},[102,18630,18594],{"class":112},[102,18632,18633],{"class":171},"\u002F\u002F只有构造函数\n",[102,18635,18636],{"class":104,"line":1753},[102,18637,2389],{"emptyLinePlaceholder":30},[102,18639,18640,18642,18644,18646,18648],{"class":104,"line":1767},[102,18641,2292],{"class":1952},[102,18643,113],{"class":112},[102,18645,2297],{"class":217},[102,18647,5956],{"class":112},[102,18649,18650],{"class":171},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[102,18652,18653],{"class":104,"line":1772},[102,18654,2389],{"emptyLinePlaceholder":30},[102,18656,18657,18659,18661],{"class":104,"line":2566},[102,18658,4079],{"class":108},[102,18660,4082],{"class":161},[102,18662,1279],{"class":112},[102,18664,18665],{"class":104,"line":2580},[102,18666,1554],{"class":112},[19,18668,18669],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[73,18671,18673],{"id":18672},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18675,18676],{},"两种分类方式：",[19,18678,18679],{},"​\t按参数分为： 有参构造和无参构造",[19,18681,18682],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18684,18685],{},"三种调用方式：",[19,18687,18688],{},"​\t括号法",[19,18690,18691],{},"​\t显示法",[19,18693,18694],{},"​\t隐式转换法",[93,18696,18698],{"className":95,"code":18697,"language":97,"meta":23,"style":23},"#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",[99,18699,18700,18706,18716,18721,18726,18731,18736,18740,18748,18752,18756,18760,18766,18770,18783,18787,18799,18803,18812,18825,18829,18833,18839,18843,18856,18860,18865,18881,18885,18890,18899,18912,18916,18922,18926,18931,18939,18943,18948,18952,18960,18964,18969,18974,18979,18984,18989,18993,18998,19003,19008,19013,19017,19022,19027,19043,19055,19060,19064,19069,19074,19079,19083,19088,19102,19115,19119,19127,19131,19137,19143,19151],{"__ignoreMap":23},[102,18701,18702,18704],{"class":104,"line":105},[102,18703,1938],{"class":108},[102,18705,1941],{"class":217},[102,18707,18708,18710,18712,18714],{"class":104,"line":24},[102,18709,1946],{"class":108},[102,18711,1949],{"class":108},[102,18713,1953],{"class":1952},[102,18715,1279],{"class":112},[102,18717,18718],{"class":104,"line":1168},[102,18719,18720],{"class":171},"\u002F\u002F1.构造函数的分类及调用\n",[102,18722,18723],{"class":104,"line":1183},[102,18724,18725],{"class":171},"\u002F\u002F分类\n",[102,18727,18728],{"class":104,"line":1189},[102,18729,18730],{"class":171},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[102,18732,18733],{"class":104,"line":1203},[102,18734,18735],{"class":171},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[102,18737,18738],{"class":104,"line":1209},[102,18739,2389],{"emptyLinePlaceholder":30},[102,18741,18742,18744,18746],{"class":104,"line":1300},[102,18743,14684],{"class":108},[102,18745,15559],{"class":1952},[102,18747,2663],{"class":112},[102,18749,18750],{"class":104,"line":1306},[102,18751,1535],{"class":112},[102,18753,18754],{"class":104,"line":1318},[102,18755,14706],{"class":108},[102,18757,18758],{"class":104,"line":1601},[102,18759,18504],{"class":171},[102,18761,18762,18764],{"class":104,"line":1606},[102,18763,18509],{"class":1952},[102,18765,1965],{"class":112},[102,18767,18768],{"class":104,"line":1612},[102,18769,2019],{"class":112},[102,18771,18772,18774,18776,18779,18781],{"class":104,"line":1617},[102,18773,3440],{"class":112},[102,18775,1157],{"class":108},[102,18777,18778],{"class":217},"\"Person构造函数无参构造\"",[102,18780,1157],{"class":108},[102,18782,1180],{"class":112},[102,18784,18785],{"class":104,"line":1631},[102,18786,2176],{"class":112},[102,18788,18789,18791,18793,18795,18797],{"class":104,"line":1636},[102,18790,18509],{"class":1952},[102,18792,113],{"class":112},[102,18794,116],{"class":108},[102,18796,1387],{"class":5206},[102,18798,119],{"class":112},[102,18800,18801],{"class":104,"line":1642},[102,18802,2019],{"class":112},[102,18804,18805,18808,18810],{"class":104,"line":1663},[102,18806,18807],{"class":112},"        age",[102,18809,158],{"class":108},[102,18811,6187],{"class":112},[102,18813,18814,18816,18818,18821,18823],{"class":104,"line":1668},[102,18815,3440],{"class":112},[102,18817,1157],{"class":108},[102,18819,18820],{"class":217},"\"Person构造函数有参构造\"",[102,18822,1157],{"class":108},[102,18824,1180],{"class":112},[102,18826,18827],{"class":104,"line":1682},[102,18828,2176],{"class":112},[102,18830,18831],{"class":104,"line":1687},[102,18832,18537],{"class":171},[102,18834,18835,18837],{"class":104,"line":1716},[102,18836,18542],{"class":1952},[102,18838,1965],{"class":112},[102,18840,18841],{"class":104,"line":1721},[102,18842,2019],{"class":112},[102,18844,18845,18847,18849,18852,18854],{"class":104,"line":1738},[102,18846,3440],{"class":112},[102,18848,1157],{"class":108},[102,18850,18851],{"class":217},"\"Person析构函数被调用\"",[102,18853,1157],{"class":108},[102,18855,1180],{"class":112},[102,18857,18858],{"class":104,"line":1743},[102,18859,2176],{"class":112},[102,18861,18862],{"class":104,"line":1748},[102,18863,18864],{"class":171},"    \u002F\u002F拷贝构造函数\n",[102,18866,18867,18869,18871,18873,18875,18877,18879],{"class":104,"line":1753},[102,18868,18509],{"class":1952},[102,18870,113],{"class":112},[102,18872,6782],{"class":108},[102,18874,15559],{"class":1952},[102,18876,10574],{"class":108},[102,18878,19],{"class":5206},[102,18880,119],{"class":112},[102,18882,18883],{"class":104,"line":1767},[102,18884,2019],{"class":112},[102,18886,18887],{"class":104,"line":1772},[102,18888,18889],{"class":171},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[102,18891,18892,18894,18896],{"class":104,"line":2566},[102,18893,18807],{"class":112},[102,18895,158],{"class":108},[102,18897,18898],{"class":112},"p.age;\n",[102,18900,18901,18903,18905,18908,18910],{"class":104,"line":2580},[102,18902,3440],{"class":112},[102,18904,1157],{"class":108},[102,18906,18907],{"class":217},"\"Person拷贝构造函数被调用\"",[102,18909,1157],{"class":108},[102,18911,1180],{"class":112},[102,18913,18914],{"class":104,"line":2588},[102,18915,2176],{"class":112},[102,18917,18918,18920],{"class":104,"line":2593},[102,18919,1974],{"class":108},[102,18921,7787],{"class":112},[102,18923,18924],{"class":104,"line":2599},[102,18925,3984],{"class":112},[102,18927,18928],{"class":104,"line":2605},[102,18929,18930],{"class":171},"\u002F\u002F调用\n",[102,18932,18933,18935,18937],{"class":104,"line":2610},[102,18934,5354],{"class":108},[102,18936,5578],{"class":1952},[102,18938,1965],{"class":112},[102,18940,18941],{"class":104,"line":7938},[102,18942,1535],{"class":112},[102,18944,18945],{"class":104,"line":7962},[102,18946,18947],{"class":171},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[102,18949,18950],{"class":104,"line":7967},[102,18951,1554],{"class":112},[102,18953,18954,18956,18958],{"class":104,"line":7973},[102,18955,5354],{"class":108},[102,18957,5647],{"class":1952},[102,18959,1965],{"class":112},[102,18961,18962],{"class":104,"line":8000},[102,18963,1535],{"class":112},[102,18965,18966],{"class":104,"line":8005},[102,18967,18968],{"class":171},"    \u002F\u002F1.括号法\n",[102,18970,18971],{"class":104,"line":8011},[102,18972,18973],{"class":171},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[102,18975,18976],{"class":104,"line":8023},[102,18977,18978],{"class":171},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[102,18980,18981],{"class":104,"line":8035},[102,18982,18983],{"class":171},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[102,18985,18986],{"class":104,"line":8047},[102,18987,18988],{"class":171},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[102,18990,18991],{"class":104,"line":9706},[102,18992,2389],{"emptyLinePlaceholder":30},[102,18994,18995],{"class":104,"line":9731},[102,18996,18997],{"class":171},"    \u002F\u002F注意事项\n",[102,18999,19000],{"class":104,"line":9754},[102,19001,19002],{"class":171},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[102,19004,19005],{"class":104,"line":9778},[102,19006,19007],{"class":171},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[102,19009,19010],{"class":104,"line":9783},[102,19011,19012],{"class":171},"    \u002F\u002F Person p4();\n",[102,19014,19015],{"class":104,"line":9788},[102,19016,2389],{"emptyLinePlaceholder":30},[102,19018,19019],{"class":104,"line":9793},[102,19020,19021],{"class":171},"    \u002F\u002F2.显示法\n",[102,19023,19024],{"class":104,"line":9802},[102,19025,19026],{"class":112},"    Person p1;\n",[102,19028,19029,19032,19034,19037,19039,19041],{"class":104,"line":9807},[102,19030,19031],{"class":112},"    Person p2",[102,19033,158],{"class":108},[102,19035,19036],{"class":1952},"Person",[102,19038,113],{"class":112},[102,19040,559],{"class":161},[102,19042,2708],{"class":112},[102,19044,19045,19048,19050,19052],{"class":104,"line":9813},[102,19046,19047],{"class":112},"    Person p3",[102,19049,158],{"class":108},[102,19051,19036],{"class":1952},[102,19053,19054],{"class":112},"(p2);\n",[102,19056,19057],{"class":104,"line":9834},[102,19058,19059],{"class":171},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[102,19061,19062],{"class":104,"line":9840},[102,19063,2389],{"emptyLinePlaceholder":30},[102,19065,19066],{"class":104,"line":9854},[102,19067,19068],{"class":171},"    \u002F\u002F 注意事项2\n",[102,19070,19071],{"class":104,"line":9860},[102,19072,19073],{"class":171},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[102,19075,19076],{"class":104,"line":9887},[102,19077,19078],{"class":171},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[102,19080,19081],{"class":104,"line":9896},[102,19082,2389],{"emptyLinePlaceholder":30},[102,19084,19085],{"class":104,"line":9902},[102,19086,19087],{"class":171},"    \u002F\u002F3.隐士转换法\n",[102,19089,19090,19093,19095,19097,19099],{"class":104,"line":9910},[102,19091,19092],{"class":112},"    Person p4",[102,19094,158],{"class":108},[102,19096,559],{"class":161},[102,19098,168],{"class":112},[102,19100,19101],{"class":171},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[102,19103,19104,19107,19109,19112],{"class":104,"line":9915},[102,19105,19106],{"class":112},"    Person p5",[102,19108,158],{"class":108},[102,19110,19111],{"class":112},"p4;",[102,19113,19114],{"class":171}," \u002F\u002F 这里会调用拷贝构造函数\n",[102,19116,19117],{"class":104,"line":16594},[102,19118,1554],{"class":112},[102,19120,19121,19123,19125],{"class":104,"line":16600},[102,19122,116],{"class":108},[102,19124,1962],{"class":1952},[102,19126,1965],{"class":112},[102,19128,19129],{"class":104,"line":16623},[102,19130,1535],{"class":112},[102,19132,19133,19135],{"class":104,"line":16629},[102,19134,5623],{"class":1952},[102,19136,5626],{"class":112},[102,19138,19139,19141],{"class":104,"line":16652},[102,19140,5692],{"class":1952},[102,19142,5626],{"class":112},[102,19144,19145,19147,19149],{"class":104,"line":16666},[102,19146,4079],{"class":108},[102,19148,4082],{"class":161},[102,19150,1279],{"class":112},[102,19152,19153],{"class":104,"line":16686},[102,19154,1554],{"class":112},[19,19156,19157,19160],{},[262,19158,19159],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[73,19162,19164],{"id":19163},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19166,19167],{},"C++中拷贝构造函数调用时机通常有三种情况",[1120,19169,19170,19173,19176],{},[59,19171,19172],{},"使用一个已经创建完毕的对象来初始化一个新对象",[59,19174,19175],{},"值传递的方式给函数参数传值",[59,19177,19178],{},"以值方式返回局部对象",[93,19180,19182],{"className":95,"code":19181,"language":97,"meta":23,"style":23},"#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",[99,19183,19184,19190,19200,19204,19209,19213,19218,19223,19228,19234,19238,19242,19248,19252,19265,19269,19274,19286,19290,19298,19311,19315,19319,19335,19339,19348,19361,19365,19371,19375,19387,19391,19397,19401,19405,19413,19417,19430,19438,19456,19460,19465,19470,19485,19489,19502,19506,19514,19518,19522,19530,19534,19539,19548,19552,19556,19581,19591,19595,19603,19607,19618,19643,19647,19651,19655,19663,19667,19672,19677,19684,19689,19694,19699,19704,19708,19713,19717,19722,19726,19731,19736,19740,19744,19749,19754,19762],{"__ignoreMap":23},[102,19185,19186,19188],{"class":104,"line":105},[102,19187,1938],{"class":108},[102,19189,1941],{"class":217},[102,19191,19192,19194,19196,19198],{"class":104,"line":24},[102,19193,1946],{"class":108},[102,19195,1949],{"class":108},[102,19197,1953],{"class":1952},[102,19199,1279],{"class":112},[102,19201,19202],{"class":104,"line":1168},[102,19203,2389],{"emptyLinePlaceholder":30},[102,19205,19206],{"class":104,"line":1183},[102,19207,19208],{"class":171},"\u002F\u002F拷贝构造函数调用时机\n",[102,19210,19211],{"class":104,"line":1189},[102,19212,2389],{"emptyLinePlaceholder":30},[102,19214,19215],{"class":104,"line":1203},[102,19216,19217],{"class":171},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[102,19219,19220],{"class":104,"line":1209},[102,19221,19222],{"class":171},"\u002F\u002F2.值传递的方式给函数参数传值\n",[102,19224,19225],{"class":104,"line":1300},[102,19226,19227],{"class":171},"\u002F\u002F3.以值方式返回局部对象\n",[102,19229,19230,19232],{"class":104,"line":1306},[102,19231,14684],{"class":108},[102,19233,15161],{"class":1952},[102,19235,19236],{"class":104,"line":1318},[102,19237,1535],{"class":112},[102,19239,19240],{"class":104,"line":1601},[102,19241,14706],{"class":108},[102,19243,19244,19246],{"class":104,"line":1606},[102,19245,18509],{"class":1952},[102,19247,1965],{"class":112},[102,19249,19250],{"class":104,"line":1612},[102,19251,2019],{"class":112},[102,19253,19254,19256,19258,19261,19263],{"class":104,"line":1617},[102,19255,9659],{"class":112},[102,19257,1157],{"class":108},[102,19259,19260],{"class":217}," \"Person的默认构造函数调用\"",[102,19262,1433],{"class":108},[102,19264,8830],{"class":112},[102,19266,19267],{"class":104,"line":1631},[102,19268,2176],{"class":112},[102,19270,19271],{"class":104,"line":1636},[102,19272,19273],{"class":171},"    \u002F\u002F有参构造\n",[102,19275,19276,19278,19280,19282,19284],{"class":104,"line":1642},[102,19277,18509],{"class":1952},[102,19279,113],{"class":112},[102,19281,116],{"class":108},[102,19283,15679],{"class":5206},[102,19285,119],{"class":112},[102,19287,19288],{"class":104,"line":1663},[102,19289,2019],{"class":112},[102,19291,19292,19294,19296],{"class":104,"line":1668},[102,19293,15733],{"class":112},[102,19295,158],{"class":108},[102,19297,7787],{"class":112},[102,19299,19300,19302,19304,19307,19309],{"class":104,"line":1682},[102,19301,9659],{"class":112},[102,19303,1157],{"class":108},[102,19305,19306],{"class":217}," \"Person的有参构造函数调用\"",[102,19308,1433],{"class":108},[102,19310,8830],{"class":112},[102,19312,19313],{"class":104,"line":1687},[102,19314,2176],{"class":112},[102,19316,19317],{"class":104,"line":1716},[102,19318,18864],{"class":171},[102,19320,19321,19323,19325,19327,19329,19331,19333],{"class":104,"line":1721},[102,19322,18509],{"class":1952},[102,19324,113],{"class":112},[102,19326,6782],{"class":108},[102,19328,15559],{"class":1952},[102,19330,10574],{"class":108},[102,19332,19],{"class":5206},[102,19334,119],{"class":112},[102,19336,19337],{"class":104,"line":1738},[102,19338,2019],{"class":112},[102,19340,19341,19343,19345],{"class":104,"line":1743},[102,19342,15733],{"class":112},[102,19344,158],{"class":108},[102,19346,19347],{"class":112}," p.m_Age;\n",[102,19349,19350,19352,19354,19357,19359],{"class":104,"line":1748},[102,19351,9659],{"class":112},[102,19353,1157],{"class":108},[102,19355,19356],{"class":217}," \"Person的拷贝构造函数调用\"",[102,19358,1433],{"class":108},[102,19360,8830],{"class":112},[102,19362,19363],{"class":104,"line":1753},[102,19364,2176],{"class":112},[102,19366,19367,19369],{"class":104,"line":1767},[102,19368,18542],{"class":1952},[102,19370,1965],{"class":112},[102,19372,19373],{"class":104,"line":1772},[102,19374,2019],{"class":112},[102,19376,19377,19379,19381,19383,19385],{"class":104,"line":2566},[102,19378,9659],{"class":112},[102,19380,1157],{"class":108},[102,19382,18557],{"class":217},[102,19384,1433],{"class":108},[102,19386,8830],{"class":112},[102,19388,19389],{"class":104,"line":2580},[102,19390,2176],{"class":112},[102,19392,19393,19395],{"class":104,"line":2588},[102,19394,1974],{"class":108},[102,19396,15656],{"class":112},[102,19398,19399],{"class":104,"line":2593},[102,19400,3984],{"class":112},[102,19402,19403],{"class":104,"line":2599},[102,19404,19217],{"class":171},[102,19406,19407,19409,19411],{"class":104,"line":2605},[102,19408,5354],{"class":108},[102,19410,5578],{"class":1952},[102,19412,1965],{"class":112},[102,19414,19415],{"class":104,"line":2610},[102,19416,1535],{"class":112},[102,19418,19419,19422,19424,19426,19428],{"class":104,"line":7938},[102,19420,19421],{"class":112},"    Person ",[102,19423,7120],{"class":1952},[102,19425,113],{"class":112},[102,19427,813],{"class":161},[102,19429,2708],{"class":112},[102,19431,19432,19434,19436],{"class":104,"line":7962},[102,19433,19421],{"class":112},[102,19435,7023],{"class":1952},[102,19437,17505],{"class":112},[102,19439,19440,19442,19444,19447,19449,19452,19454],{"class":104,"line":7967},[102,19441,1540],{"class":112},[102,19443,1157],{"class":108},[102,19445,19446],{"class":217},"\"P2的年龄为：\"",[102,19448,1157],{"class":108},[102,19450,19451],{"class":112},"p2.m_Age",[102,19453,1157],{"class":108},[102,19455,1180],{"class":112},[102,19457,19458],{"class":104,"line":7973},[102,19459,1554],{"class":112},[102,19461,19462],{"class":104,"line":8000},[102,19463,19464],{"class":171},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[102,19466,19467],{"class":104,"line":8005},[102,19468,19469],{"class":171},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[102,19471,19472,19474,19477,19479,19481,19483],{"class":104,"line":8011},[102,19473,5354],{"class":108},[102,19475,19476],{"class":1952}," doWork",[102,19478,113],{"class":112},[102,19480,19036],{"class":1952},[102,19482,6815],{"class":5206},[102,19484,119],{"class":112},[102,19486,19487],{"class":104,"line":8023},[102,19488,1535],{"class":112},[102,19490,19491,19493,19495,19498,19500],{"class":104,"line":8035},[102,19492,6519],{"class":112},[102,19494,1157],{"class":108},[102,19496,19497],{"class":217}," \"doWork函数调用\"",[102,19499,1433],{"class":108},[102,19501,8830],{"class":112},[102,19503,19504],{"class":104,"line":8047},[102,19505,1554],{"class":112},[102,19507,19508,19510,19512],{"class":104,"line":9706},[102,19509,5354],{"class":108},[102,19511,5647],{"class":1952},[102,19513,1965],{"class":112},[102,19515,19516],{"class":104,"line":9731},[102,19517,1535],{"class":112},[102,19519,19520],{"class":104,"line":9754},[102,19521,15303],{"class":112},[102,19523,19524,19527],{"class":104,"line":9778},[102,19525,19526],{"class":1952},"    doWork",[102,19528,19529],{"class":112},"(p);\n",[102,19531,19532],{"class":104,"line":9783},[102,19533,1554],{"class":112},[102,19535,19536],{"class":104,"line":9788},[102,19537,19538],{"class":171},"\u002F\u002F 3.以值方式返回局部对象\n",[102,19540,19541,19543,19546],{"class":104,"line":9793},[102,19542,19036],{"class":1952},[102,19544,19545],{"class":1952}," doWork2",[102,19547,1965],{"class":112},[102,19549,19550],{"class":104,"line":9802},[102,19551,1535],{"class":112},[102,19553,19554],{"class":104,"line":9807},[102,19555,19026],{"class":112},[102,19557,19558,19560,19562,19564,19566,19568,19570,19572,19574,19576,19578],{"class":104,"line":9813},[102,19559,1540],{"class":112},[102,19561,1157],{"class":108},[102,19563,113],{"class":112},[102,19565,116],{"class":108},[102,19567,6508],{"class":108},[102,19569,542],{"class":112},[102,19571,466],{"class":108},[102,19573,7120],{"class":112},[102,19575,1157],{"class":108},[102,19577,1227],{"class":112},[102,19579,19580],{"class":171},"\u002F\u002F打印p1的地址\n",[102,19582,19583,19585,19588],{"class":104,"line":9834},[102,19584,4079],{"class":108},[102,19586,19587],{"class":112}," p1;",[102,19589,19590],{"class":171},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[102,19592,19593],{"class":104,"line":9840},[102,19594,1554],{"class":112},[102,19596,19597,19599,19601],{"class":104,"line":9854},[102,19598,5354],{"class":108},[102,19600,5719],{"class":1952},[102,19602,1965],{"class":112},[102,19604,19605],{"class":104,"line":9860},[102,19606,1535],{"class":112},[102,19608,19609,19612,19614,19616],{"class":104,"line":9887},[102,19610,19611],{"class":112},"    Person p ",[102,19613,158],{"class":108},[102,19615,19545],{"class":1952},[102,19617,5626],{"class":112},[102,19619,19620,19622,19624,19626,19628,19630,19632,19634,19636,19638,19640],{"class":104,"line":9896},[102,19621,1540],{"class":112},[102,19623,1157],{"class":108},[102,19625,113],{"class":112},[102,19627,116],{"class":108},[102,19629,6508],{"class":108},[102,19631,542],{"class":112},[102,19633,466],{"class":108},[102,19635,19],{"class":112},[102,19637,1157],{"class":108},[102,19639,1227],{"class":112},[102,19641,19642],{"class":171},"\u002F\u002F打印p的地址\n",[102,19644,19645],{"class":104,"line":9902},[102,19646,1554],{"class":112},[102,19648,19649],{"class":104,"line":9910},[102,19650,2389],{"emptyLinePlaceholder":30},[102,19652,19653],{"class":104,"line":9915},[102,19654,2389],{"emptyLinePlaceholder":30},[102,19656,19657,19659,19661],{"class":104,"line":16594},[102,19658,116],{"class":108},[102,19660,1962],{"class":1952},[102,19662,1965],{"class":112},[102,19664,19665],{"class":104,"line":16600},[102,19666,1535],{"class":112},[102,19668,19669],{"class":104,"line":16623},[102,19670,19671],{"class":171},"    \u002F\u002F test01();\n",[102,19673,19674],{"class":104,"line":16629},[102,19675,19676],{"class":171},"    \u002F\u002F test02();\n",[102,19678,19679,19682],{"class":104,"line":16652},[102,19680,19681],{"class":1952},"    test03",[102,19683,5626],{"class":112},[102,19685,19686],{"class":104,"line":16666},[102,19687,19688],{"class":171},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[102,19690,19691],{"class":104,"line":16686},[102,19692,19693],{"class":171},"\u002F\u002F 输出结果如下：\n",[102,19695,19696],{"class":104,"line":16692},[102,19697,19698],{"class":171},"\u002F\u002F Person的默认构造函数调用\n",[102,19700,19701],{"class":104,"line":16703},[102,19702,19703],{"class":171},"\u002F\u002F 0x7fffffffceec\n",[102,19705,19706],{"class":104,"line":16726},[102,19707,19703],{"class":171},[102,19709,19710],{"class":104,"line":16748},[102,19711,19712],{"class":171},"\u002F\u002F Person的析构函数调用\n",[102,19714,19715],{"class":104,"line":16753},[102,19716,2389],{"emptyLinePlaceholder":30},[102,19718,19719],{"class":104,"line":16759},[102,19720,19721],{"class":171},"\u002F\u002F 之前的输出结果如下：\n",[102,19723,19724],{"class":104,"line":16773},[102,19725,19698],{"class":171},[102,19727,19728],{"class":104,"line":16786},[102,19729,19730],{"class":171},"\u002F\u002F 地址\n",[102,19732,19733],{"class":104,"line":16791},[102,19734,19735],{"class":171},"\u002F\u002F Person的拷贝构造函数调用\n",[102,19737,19738],{"class":104,"line":16805},[102,19739,19712],{"class":171},[102,19741,19742],{"class":104,"line":16810},[102,19743,19730],{"class":171},[102,19745,19746],{"class":104,"line":16816},[102,19747,19748],{"class":171},"\u002F\u002F (这两次输出的地址也是不同的) \n",[102,19750,19751],{"class":104,"line":16821},[102,19752,19753],{"class":171},"\u002F\u002F Person的析构函数调用     \n",[102,19755,19756,19758,19760],{"class":104,"line":16835},[102,19757,4079],{"class":108},[102,19759,4082],{"class":161},[102,19761,1279],{"class":112},[102,19763,19764],{"class":104,"line":16840},[102,19765,1554],{"class":112},[19,19767,19768],{},"简化版理解",[93,19770,19772],{"className":95,"code":19771,"language":97,"meta":23,"style":23},"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",[99,19773,19774,19782,19786,19792,19805,19816,19820,19832,19845,19853,19857,19873,19886,19895,19899,19904,19910,19923,19927,19931,19938,19942,19946,19951,19959,19963,19979,19992,20005,20009,20014,20022,20026,20030,20035,20040,20056,20064,20071,20077,20081,20085,20090,20098,20102,20106,20129,20136,20140,20144,20152,20156,20166,20188,20192,20196,20200,20208,20212,20217,20222,20228,20232,20242,20246,20254],{"__ignoreMap":23},[102,19775,19776,19778,19780],{"class":104,"line":105},[102,19777,14684],{"class":108},[102,19779,15559],{"class":1952},[102,19781,15562],{"class":112},[102,19783,19784],{"class":104,"line":24},[102,19785,14706],{"class":108},[102,19787,19788,19790],{"class":104,"line":1168},[102,19789,18509],{"class":1952},[102,19791,10843],{"class":112},[102,19793,19794,19796,19798,19801,19803],{"class":104,"line":1183},[102,19795,9659],{"class":112},[102,19797,1157],{"class":108},[102,19799,19800],{"class":217}," \"无参构造函数!\"",[102,19802,1433],{"class":108},[102,19804,8830],{"class":112},[102,19806,19807,19810,19812,19814],{"class":104,"line":1189},[102,19808,19809],{"class":112},"        mAge ",[102,19811,158],{"class":108},[102,19813,4082],{"class":161},[102,19815,1279],{"class":112},[102,19817,19818],{"class":104,"line":1203},[102,19819,2176],{"class":112},[102,19821,19822,19824,19826,19828,19830],{"class":104,"line":1209},[102,19823,18509],{"class":1952},[102,19825,113],{"class":112},[102,19827,116],{"class":108},[102,19829,15679],{"class":5206},[102,19831,12432],{"class":112},[102,19833,19834,19836,19838,19841,19843],{"class":104,"line":1300},[102,19835,9659],{"class":112},[102,19837,1157],{"class":108},[102,19839,19840],{"class":217}," \"有参构造函数!\"",[102,19842,1433],{"class":108},[102,19844,8830],{"class":112},[102,19846,19847,19849,19851],{"class":104,"line":1306},[102,19848,19809],{"class":112},[102,19850,158],{"class":108},[102,19852,7787],{"class":112},[102,19854,19855],{"class":104,"line":1318},[102,19856,2176],{"class":112},[102,19858,19859,19861,19863,19865,19867,19869,19871],{"class":104,"line":1601},[102,19860,18509],{"class":1952},[102,19862,113],{"class":112},[102,19864,6782],{"class":108},[102,19866,15559],{"class":1952},[102,19868,466],{"class":108},[102,19870,6815],{"class":5206},[102,19872,12432],{"class":112},[102,19874,19875,19877,19879,19882,19884],{"class":104,"line":1606},[102,19876,9659],{"class":112},[102,19878,1157],{"class":108},[102,19880,19881],{"class":217}," \"拷贝构造函数!\"",[102,19883,1433],{"class":108},[102,19885,8830],{"class":112},[102,19887,19888,19890,19892],{"class":104,"line":1612},[102,19889,19809],{"class":112},[102,19891,158],{"class":108},[102,19893,19894],{"class":112}," p.mAge;\n",[102,19896,19897],{"class":104,"line":1617},[102,19898,2176],{"class":112},[102,19900,19901],{"class":104,"line":1631},[102,19902,19903],{"class":171},"    \u002F\u002F析构函数在释放内存之前调用\n",[102,19905,19906,19908],{"class":104,"line":1636},[102,19907,18542],{"class":1952},[102,19909,10843],{"class":112},[102,19911,19912,19914,19916,19919,19921],{"class":104,"line":1642},[102,19913,9659],{"class":112},[102,19915,1157],{"class":108},[102,19917,19918],{"class":217}," \"析构函数!\"",[102,19920,1433],{"class":108},[102,19922,8830],{"class":112},[102,19924,19925],{"class":104,"line":1663},[102,19926,2176],{"class":112},[102,19928,19929],{"class":104,"line":1668},[102,19930,14706],{"class":108},[102,19932,19933,19935],{"class":104,"line":1682},[102,19934,1974],{"class":108},[102,19936,19937],{"class":112}," mAge;\n",[102,19939,19940],{"class":104,"line":1687},[102,19941,3984],{"class":112},[102,19943,19944],{"class":104,"line":1716},[102,19945,2389],{"emptyLinePlaceholder":30},[102,19947,19948],{"class":104,"line":1721},[102,19949,19950],{"class":171},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[102,19952,19953,19955,19957],{"class":104,"line":1738},[102,19954,5354],{"class":108},[102,19956,5578],{"class":1952},[102,19958,10843],{"class":112},[102,19960,19961],{"class":104,"line":1743},[102,19962,2389],{"emptyLinePlaceholder":30},[102,19964,19965,19967,19970,19972,19974,19976],{"class":104,"line":1748},[102,19966,19421],{"class":112},[102,19968,19969],{"class":1952},"man",[102,19971,113],{"class":112},[102,19973,424],{"class":161},[102,19975,5956],{"class":112},[102,19977,19978],{"class":171}," \u002F\u002Fp对象已经创建完毕\n",[102,19980,19981,19983,19986,19989],{"class":104,"line":1753},[102,19982,19421],{"class":112},[102,19984,19985],{"class":1952},"newman",[102,19987,19988],{"class":112},"(man);",[102,19990,19991],{"class":171}," \u002F\u002F调用拷贝构造函数\n",[102,19993,19994,19997,19999,20002],{"class":104,"line":1767},[102,19995,19996],{"class":112},"    Person newman2 ",[102,19998,158],{"class":108},[102,20000,20001],{"class":112}," man;",[102,20003,20004],{"class":171}," \u002F\u002F拷贝构造\n",[102,20006,20007],{"class":104,"line":1772},[102,20008,2389],{"emptyLinePlaceholder":30},[102,20010,20011],{"class":104,"line":2566},[102,20012,20013],{"class":171},"    \u002F\u002FPerson newman3;\n",[102,20015,20016,20019],{"class":104,"line":2580},[102,20017,20018],{"class":171},"    \u002F\u002Fnewman3 = man;",[102,20020,20021],{"class":171}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[102,20023,20024],{"class":104,"line":2588},[102,20025,1554],{"class":112},[102,20027,20028],{"class":104,"line":2593},[102,20029,2389],{"emptyLinePlaceholder":30},[102,20031,20032],{"class":104,"line":2599},[102,20033,20034],{"class":171},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[102,20036,20037],{"class":104,"line":2605},[102,20038,20039],{"class":171},"\u002F\u002F相当于Person p1 = p;\n",[102,20041,20042,20044,20046,20048,20050,20053],{"class":104,"line":2610},[102,20043,5354],{"class":108},[102,20045,19476],{"class":1952},[102,20047,113],{"class":112},[102,20049,19036],{"class":1952},[102,20051,20052],{"class":5206}," p1",[102,20054,20055],{"class":112},") {}\n",[102,20057,20058,20060,20062],{"class":104,"line":7938},[102,20059,5354],{"class":108},[102,20061,5647],{"class":1952},[102,20063,10843],{"class":112},[102,20065,20066,20068],{"class":104,"line":7962},[102,20067,18594],{"class":112},[102,20069,20070],{"class":171}," \u002F\u002F无参构造函数\n",[102,20072,20073,20075],{"class":104,"line":7967},[102,20074,19526],{"class":1952},[102,20076,19529],{"class":112},[102,20078,20079],{"class":104,"line":7973},[102,20080,1554],{"class":112},[102,20082,20083],{"class":104,"line":8000},[102,20084,2389],{"emptyLinePlaceholder":30},[102,20086,20087],{"class":104,"line":8005},[102,20088,20089],{"class":171},"\u002F\u002F3. 以值方式返回局部对象\n",[102,20091,20092,20094,20096],{"class":104,"line":8011},[102,20093,19036],{"class":1952},[102,20095,19545],{"class":1952},[102,20097,1965],{"class":112},[102,20099,20100],{"class":104,"line":8023},[102,20101,1535],{"class":112},[102,20103,20104],{"class":104,"line":8035},[102,20105,19026],{"class":112},[102,20107,20108,20110,20112,20114,20116,20118,20120,20122,20125,20127],{"class":104,"line":8047},[102,20109,6519],{"class":112},[102,20111,1157],{"class":108},[102,20113,1647],{"class":112},[102,20115,116],{"class":108},[102,20117,6508],{"class":108},[102,20119,542],{"class":112},[102,20121,466],{"class":108},[102,20123,20124],{"class":112},"p1 ",[102,20126,1157],{"class":108},[102,20128,8830],{"class":112},[102,20130,20131,20133],{"class":104,"line":9706},[102,20132,4079],{"class":108},[102,20134,20135],{"class":112}," p1;\n",[102,20137,20138],{"class":104,"line":9731},[102,20139,1554],{"class":112},[102,20141,20142],{"class":104,"line":9754},[102,20143,2389],{"emptyLinePlaceholder":30},[102,20145,20146,20148,20150],{"class":104,"line":9778},[102,20147,5354],{"class":108},[102,20149,5719],{"class":1952},[102,20151,1965],{"class":112},[102,20153,20154],{"class":104,"line":9783},[102,20155,1535],{"class":112},[102,20157,20158,20160,20162,20164],{"class":104,"line":9788},[102,20159,19611],{"class":112},[102,20161,158],{"class":108},[102,20163,19545],{"class":1952},[102,20165,5626],{"class":112},[102,20167,20168,20170,20172,20174,20176,20178,20180,20182,20184,20186],{"class":104,"line":9793},[102,20169,6519],{"class":112},[102,20171,1157],{"class":108},[102,20173,1647],{"class":112},[102,20175,116],{"class":108},[102,20177,6508],{"class":108},[102,20179,542],{"class":112},[102,20181,466],{"class":108},[102,20183,11438],{"class":112},[102,20185,1157],{"class":108},[102,20187,8830],{"class":112},[102,20189,20190],{"class":104,"line":9802},[102,20191,1554],{"class":112},[102,20193,20194],{"class":104,"line":9807},[102,20195,2389],{"emptyLinePlaceholder":30},[102,20197,20198],{"class":104,"line":9813},[102,20199,2389],{"emptyLinePlaceholder":30},[102,20201,20202,20204,20206],{"class":104,"line":9834},[102,20203,116],{"class":108},[102,20205,1962],{"class":1952},[102,20207,10843],{"class":112},[102,20209,20210],{"class":104,"line":9840},[102,20211,2389],{"emptyLinePlaceholder":30},[102,20213,20214],{"class":104,"line":9854},[102,20215,20216],{"class":171},"    \u002F\u002Ftest01();\n",[102,20218,20219],{"class":104,"line":9860},[102,20220,20221],{"class":171},"    \u002F\u002Ftest02();\n",[102,20223,20224,20226],{"class":104,"line":9887},[102,20225,19681],{"class":1952},[102,20227,5626],{"class":112},[102,20229,20230],{"class":104,"line":9896},[102,20231,2389],{"emptyLinePlaceholder":30},[102,20233,20234,20236,20238,20240],{"class":104,"line":9902},[102,20235,2292],{"class":1952},[102,20237,113],{"class":112},[102,20239,2297],{"class":217},[102,20241,2708],{"class":112},[102,20243,20244],{"class":104,"line":9910},[102,20245,2389],{"emptyLinePlaceholder":30},[102,20247,20248,20250,20252],{"class":104,"line":9915},[102,20249,4079],{"class":108},[102,20251,4082],{"class":161},[102,20253,1279],{"class":112},[102,20255,20256],{"class":104,"line":16594},[102,20257,1554],{"class":112},[73,20259,20261],{"id":20260},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20263,20264],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20266,20267],{},"1．默认构造函数(无参，函数体为空)",[19,20269,20270],{},"2．默认析构函数(无参，函数体为空)",[19,20272,20273],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20275,20276],{},"构造函数调用规则如下：",[1120,20278,20279,20282],{},[59,20280,20281],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[59,20283,20284],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[93,20286,20288],{"className":95,"code":20287,"language":97,"meta":23,"style":23},"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",[99,20289,20290,20298,20302,20307,20313,20325,20329,20334,20346,20355,20367,20371,20375,20391,20400,20412,20416,20420,20426,20438,20442,20446,20452,20456,20460,20468,20472,20484,20489,20497,20501,20519,20523,20527,20535,20539,20544,20552,20567,20580,20584,20589,20596,20612,20625,20629,20633,20641,20645,20651,20655,20665,20669,20677],{"__ignoreMap":23},[102,20291,20292,20294,20296],{"class":104,"line":105},[102,20293,14684],{"class":108},[102,20295,15559],{"class":1952},[102,20297,15562],{"class":112},[102,20299,20300],{"class":104,"line":24},[102,20301,14706],{"class":108},[102,20303,20304],{"class":104,"line":1168},[102,20305,20306],{"class":171},"    \u002F\u002F无参（默认）构造函数\n",[102,20308,20309,20311],{"class":104,"line":1183},[102,20310,18509],{"class":1952},[102,20312,10843],{"class":112},[102,20314,20315,20317,20319,20321,20323],{"class":104,"line":1189},[102,20316,9659],{"class":112},[102,20318,1157],{"class":108},[102,20320,19800],{"class":217},[102,20322,1433],{"class":108},[102,20324,8830],{"class":112},[102,20326,20327],{"class":104,"line":1203},[102,20328,2176],{"class":112},[102,20330,20331],{"class":104,"line":1209},[102,20332,20333],{"class":171},"    \u002F\u002F有参构造函数\n",[102,20335,20336,20338,20340,20342,20344],{"class":104,"line":1300},[102,20337,18509],{"class":1952},[102,20339,113],{"class":112},[102,20341,116],{"class":108},[102,20343,1387],{"class":5206},[102,20345,12432],{"class":112},[102,20347,20348,20351,20353],{"class":104,"line":1306},[102,20349,20350],{"class":112},"        age ",[102,20352,158],{"class":108},[102,20354,1421],{"class":112},[102,20356,20357,20359,20361,20363,20365],{"class":104,"line":1318},[102,20358,9659],{"class":112},[102,20360,1157],{"class":108},[102,20362,19840],{"class":217},[102,20364,1433],{"class":108},[102,20366,8830],{"class":112},[102,20368,20369],{"class":104,"line":1601},[102,20370,2176],{"class":112},[102,20372,20373],{"class":104,"line":1606},[102,20374,18864],{"class":171},[102,20376,20377,20379,20381,20383,20385,20387,20389],{"class":104,"line":1612},[102,20378,18509],{"class":1952},[102,20380,113],{"class":112},[102,20382,6782],{"class":108},[102,20384,15559],{"class":1952},[102,20386,466],{"class":108},[102,20388,6815],{"class":5206},[102,20390,12432],{"class":112},[102,20392,20393,20395,20397],{"class":104,"line":1617},[102,20394,20350],{"class":112},[102,20396,158],{"class":108},[102,20398,20399],{"class":112}," p.age;\n",[102,20401,20402,20404,20406,20408,20410],{"class":104,"line":1631},[102,20403,9659],{"class":112},[102,20405,1157],{"class":108},[102,20407,19881],{"class":217},[102,20409,1433],{"class":108},[102,20411,8830],{"class":112},[102,20413,20414],{"class":104,"line":1636},[102,20415,2176],{"class":112},[102,20417,20418],{"class":104,"line":1642},[102,20419,18537],{"class":171},[102,20421,20422,20424],{"class":104,"line":1663},[102,20423,18542],{"class":1952},[102,20425,10843],{"class":112},[102,20427,20428,20430,20432,20434,20436],{"class":104,"line":1668},[102,20429,9659],{"class":112},[102,20431,1157],{"class":108},[102,20433,19918],{"class":217},[102,20435,1433],{"class":108},[102,20437,8830],{"class":112},[102,20439,20440],{"class":104,"line":1682},[102,20441,2176],{"class":112},[102,20443,20444],{"class":104,"line":1687},[102,20445,14706],{"class":108},[102,20447,20448,20450],{"class":104,"line":1716},[102,20449,1974],{"class":108},[102,20451,7787],{"class":112},[102,20453,20454],{"class":104,"line":1721},[102,20455,3984],{"class":112},[102,20457,20458],{"class":104,"line":1738},[102,20459,2389],{"emptyLinePlaceholder":30},[102,20461,20462,20464,20466],{"class":104,"line":1743},[102,20463,5354],{"class":108},[102,20465,5578],{"class":1952},[102,20467,1965],{"class":112},[102,20469,20470],{"class":104,"line":1748},[102,20471,1535],{"class":112},[102,20473,20474,20476,20478,20480,20482],{"class":104,"line":1753},[102,20475,19421],{"class":112},[102,20477,7120],{"class":1952},[102,20479,113],{"class":112},[102,20481,763],{"class":161},[102,20483,2708],{"class":112},[102,20485,20486],{"class":104,"line":1767},[102,20487,20488],{"class":171},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[102,20490,20491,20493,20495],{"class":104,"line":1772},[102,20492,19421],{"class":112},[102,20494,7023],{"class":1952},[102,20496,17505],{"class":112},[102,20498,20499],{"class":104,"line":2566},[102,20500,2389],{"emptyLinePlaceholder":30},[102,20502,20503,20505,20507,20510,20512,20515,20517],{"class":104,"line":2580},[102,20504,6519],{"class":112},[102,20506,1157],{"class":108},[102,20508,20509],{"class":217}," \"p2的年龄为： \"",[102,20511,1433],{"class":108},[102,20513,20514],{"class":112}," p2.age ",[102,20516,1157],{"class":108},[102,20518,8830],{"class":112},[102,20520,20521],{"class":104,"line":2588},[102,20522,1554],{"class":112},[102,20524,20525],{"class":104,"line":2593},[102,20526,2389],{"emptyLinePlaceholder":30},[102,20528,20529,20531,20533],{"class":104,"line":2599},[102,20530,5354],{"class":108},[102,20532,5647],{"class":1952},[102,20534,1965],{"class":112},[102,20536,20537],{"class":104,"line":2605},[102,20538,1535],{"class":112},[102,20540,20541],{"class":104,"line":2610},[102,20542,20543],{"class":171},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[102,20545,20546,20549],{"class":104,"line":7938},[102,20547,20548],{"class":112},"    Person p1;",[102,20550,20551],{"class":171}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[102,20553,20554,20556,20558,20560,20562,20564],{"class":104,"line":7962},[102,20555,19421],{"class":112},[102,20557,7023],{"class":1952},[102,20559,113],{"class":112},[102,20561,559],{"class":161},[102,20563,5956],{"class":112},[102,20565,20566],{"class":171}," \u002F\u002F用户提供的有参\n",[102,20568,20569,20571,20574,20577],{"class":104,"line":7967},[102,20570,19421],{"class":112},[102,20572,20573],{"class":1952},"p3",[102,20575,20576],{"class":112},"(p2);",[102,20578,20579],{"class":171}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[102,20581,20582],{"class":104,"line":7973},[102,20583,2389],{"emptyLinePlaceholder":30},[102,20585,20586],{"class":104,"line":8000},[102,20587,20588],{"class":171},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[102,20590,20591,20594],{"class":104,"line":8005},[102,20592,20593],{"class":112},"    Person p4;",[102,20595,20551],{"class":171},[102,20597,20598,20600,20603,20605,20607,20609],{"class":104,"line":8011},[102,20599,19421],{"class":112},[102,20601,20602],{"class":1952},"p5",[102,20604,113],{"class":112},[102,20606,559],{"class":161},[102,20608,5956],{"class":112},[102,20610,20611],{"class":171}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[102,20613,20614,20616,20619,20622],{"class":104,"line":8023},[102,20615,19421],{"class":112},[102,20617,20618],{"class":1952},"p6",[102,20620,20621],{"class":112},"(p5);",[102,20623,20624],{"class":171}," \u002F\u002F用户自己提供拷贝构造\n",[102,20626,20627],{"class":104,"line":8035},[102,20628,1554],{"class":112},[102,20630,20631],{"class":104,"line":8047},[102,20632,2389],{"emptyLinePlaceholder":30},[102,20634,20635,20637,20639],{"class":104,"line":9706},[102,20636,116],{"class":108},[102,20638,1962],{"class":1952},[102,20640,10843],{"class":112},[102,20642,20643],{"class":104,"line":9731},[102,20644,2389],{"emptyLinePlaceholder":30},[102,20646,20647,20649],{"class":104,"line":9754},[102,20648,5623],{"class":1952},[102,20650,5626],{"class":112},[102,20652,20653],{"class":104,"line":9778},[102,20654,2389],{"emptyLinePlaceholder":30},[102,20656,20657,20659,20661,20663],{"class":104,"line":9783},[102,20658,2292],{"class":1952},[102,20660,113],{"class":112},[102,20662,2297],{"class":217},[102,20664,2708],{"class":112},[102,20666,20667],{"class":104,"line":9788},[102,20668,2389],{"emptyLinePlaceholder":30},[102,20670,20671,20673,20675],{"class":104,"line":9793},[102,20672,4079],{"class":108},[102,20674,4082],{"class":161},[102,20676,1279],{"class":112},[102,20678,20679],{"class":104,"line":9802},[102,20680,1554],{"class":112},[73,20682,20684],{"id":20683},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20686,20687],{},"浅拷贝：简单的赋值拷贝操作",[19,20689,20690],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[93,20692,20694],{"className":95,"code":20693,"language":97,"meta":23,"style":23},"#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",[99,20695,20696,20702,20712,20718,20722,20726,20731,20737,20741,20754,20758,20762,20769,20773,20783,20798,20811,20815,20820,20825,20841,20845,20858,20863,20868,20873,20882,20887,20902,20906,20910,20914,20920,20924,20929,20944,20948,20959,20973,20977,20986,20990,20996,21008,21012,21020,21024,21041,21072,21080,21108,21112,21116,21124,21128,21134],{"__ignoreMap":23},[102,20697,20698,20700],{"class":104,"line":105},[102,20699,1938],{"class":108},[102,20701,1941],{"class":217},[102,20703,20704,20706,20708,20710],{"class":104,"line":24},[102,20705,1946],{"class":108},[102,20707,1949],{"class":108},[102,20709,1953],{"class":1952},[102,20711,1279],{"class":112},[102,20713,20714,20716],{"class":104,"line":1168},[102,20715,14684],{"class":108},[102,20717,15161],{"class":1952},[102,20719,20720],{"class":104,"line":1183},[102,20721,1535],{"class":112},[102,20723,20724],{"class":104,"line":1189},[102,20725,14706],{"class":108},[102,20727,20728],{"class":104,"line":1203},[102,20729,20730],{"class":171},"    \u002F\u002F默认构造函数\n",[102,20732,20733,20735],{"class":104,"line":1209},[102,20734,18509],{"class":1952},[102,20736,1965],{"class":112},[102,20738,20739],{"class":104,"line":1300},[102,20740,2019],{"class":112},[102,20742,20743,20745,20747,20750,20752],{"class":104,"line":1306},[102,20744,3440],{"class":112},[102,20746,1157],{"class":108},[102,20748,20749],{"class":217},"\"默认构造函数\"",[102,20751,1157],{"class":108},[102,20753,1180],{"class":112},[102,20755,20756],{"class":104,"line":1318},[102,20757,2176],{"class":112},[102,20759,20760],{"class":104,"line":1601},[102,20761,20333],{"class":171},[102,20763,20764,20766],{"class":104,"line":1606},[102,20765,18542],{"class":1952},[102,20767,20768],{"class":112},"(int age,int height)\n",[102,20770,20771],{"class":104,"line":1612},[102,20772,2019],{"class":112},[102,20774,20775,20778,20780],{"class":104,"line":1617},[102,20776,20777],{"class":112},"        m_Age",[102,20779,158],{"class":108},[102,20781,20782],{"class":112},"age;\n",[102,20784,20785,20788,20790,20792,20795],{"class":104,"line":1631},[102,20786,20787],{"class":112},"        m_Height",[102,20789,11707],{"class":108},[102,20791,2371],{"class":108},[102,20793,20794],{"class":112},"(height);",[102,20796,20797],{"class":171},"\u002F\u002F放到堆区\n",[102,20799,20800,20802,20804,20807,20809],{"class":104,"line":1636},[102,20801,3440],{"class":112},[102,20803,1157],{"class":108},[102,20805,20806],{"class":217},"\"有参构造函数\"",[102,20808,1157],{"class":108},[102,20810,1180],{"class":112},[102,20812,20813],{"class":104,"line":1642},[102,20814,2176],{"class":112},[102,20816,20817],{"class":104,"line":1663},[102,20818,20819],{"class":171},"    \u002F\u002F深拷贝解决上述问题\n",[102,20821,20822],{"class":104,"line":1668},[102,20823,20824],{"class":171},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[102,20826,20827,20829,20831,20833,20835,20837,20839],{"class":104,"line":1682},[102,20828,18509],{"class":1952},[102,20830,113],{"class":112},[102,20832,6782],{"class":108},[102,20834,15559],{"class":1952},[102,20836,10574],{"class":108},[102,20838,19],{"class":5206},[102,20840,119],{"class":112},[102,20842,20843],{"class":104,"line":1687},[102,20844,2019],{"class":112},[102,20846,20847,20849,20851,20854,20856],{"class":104,"line":1716},[102,20848,3440],{"class":112},[102,20850,1157],{"class":108},[102,20852,20853],{"class":217},"\"拷贝构造函数\"",[102,20855,1157],{"class":108},[102,20857,1180],{"class":112},[102,20859,20860],{"class":104,"line":1721},[102,20861,20862],{"class":171},"        \u002F\u002F编译器默认的写如下注释部分\n",[102,20864,20865],{"class":104,"line":1738},[102,20866,20867],{"class":171},"        \u002F\u002Fm_Age=p.m_Age;\n",[102,20869,20870],{"class":104,"line":1743},[102,20871,20872],{"class":171},"        \u002F\u002Fm_Height=p.m_Height;\n",[102,20874,20875,20877,20879],{"class":104,"line":1748},[102,20876,20777],{"class":112},[102,20878,158],{"class":108},[102,20880,20881],{"class":112},"p.m_Age;\n",[102,20883,20884],{"class":104,"line":1753},[102,20885,20886],{"class":171},"        \u002F\u002F深拷贝操作\n",[102,20888,20889,20891,20893,20895,20897,20899],{"class":104,"line":1767},[102,20890,20787],{"class":112},[102,20892,11707],{"class":108},[102,20894,2371],{"class":108},[102,20896,113],{"class":112},[102,20898,568],{"class":108},[102,20900,20901],{"class":112},"p.m_Height);\n",[102,20903,20904],{"class":104,"line":1772},[102,20905,2176],{"class":112},[102,20907,20908],{"class":104,"line":2566},[102,20909,2389],{"emptyLinePlaceholder":30},[102,20911,20912],{"class":104,"line":2580},[102,20913,18537],{"class":171},[102,20915,20916,20918],{"class":104,"line":2588},[102,20917,18542],{"class":1952},[102,20919,1965],{"class":112},[102,20921,20922],{"class":104,"line":2593},[102,20923,2019],{"class":112},[102,20925,20926],{"class":104,"line":2599},[102,20927,20928],{"class":171},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[102,20930,20931,20933,20936,20939,20942],{"class":104,"line":2605},[102,20932,2486],{"class":108},[102,20934,20935],{"class":112},"(m_Height ",[102,20937,20938],{"class":108},"!=",[102,20940,20941],{"class":161}," NULL",[102,20943,119],{"class":112},[102,20945,20946],{"class":104,"line":2610},[102,20947,2499],{"class":112},[102,20949,20950,20953,20956],{"class":104,"line":7938},[102,20951,20952],{"class":108},"            delete",[102,20954,20955],{"class":112}," m_Height;",[102,20957,20958],{"class":171}," \u002F\u002F释放堆区内存\n",[102,20960,20961,20964,20966,20968,20970],{"class":104,"line":7962},[102,20962,20963],{"class":112},"            m_Height",[102,20965,158],{"class":108},[102,20967,2381],{"class":161},[102,20969,168],{"class":112},[102,20971,20972],{"class":171}," \u002F\u002F防止野指针\n",[102,20974,20975],{"class":104,"line":7967},[102,20976,2518],{"class":112},[102,20978,20979,20981,20983],{"class":104,"line":7973},[102,20980,3440],{"class":112},[102,20982,1157],{"class":108},[102,20984,20985],{"class":217},"\"Person的析构函数调用\"\n",[102,20987,20988],{"class":104,"line":8000},[102,20989,2176],{"class":112},[102,20991,20992,20994],{"class":104,"line":8005},[102,20993,1974],{"class":108},[102,20995,15656],{"class":112},[102,20997,20998,21000,21002,21005],{"class":104,"line":8011},[102,20999,1974],{"class":108},[102,21001,6508],{"class":108},[102,21003,21004],{"class":112},"m_Height;",[102,21006,21007],{"class":171}," \u002F\u002F定义一个指针，指向身高\n",[102,21009,21010],{"class":104,"line":8023},[102,21011,3984],{"class":112},[102,21013,21014,21016,21018],{"class":104,"line":8035},[102,21015,5354],{"class":108},[102,21017,5578],{"class":1952},[102,21019,1965],{"class":112},[102,21021,21022],{"class":104,"line":8047},[102,21023,1535],{"class":112},[102,21025,21026,21028,21030,21032,21034,21036,21039],{"class":104,"line":9706},[102,21027,19421],{"class":112},[102,21029,7120],{"class":1952},[102,21031,113],{"class":112},[102,21033,763],{"class":161},[102,21035,491],{"class":112},[102,21037,21038],{"class":161},"160",[102,21040,2708],{"class":112},[102,21042,21043,21045,21047,21050,21052,21055,21057,21060,21062,21065,21067,21069],{"class":104,"line":9731},[102,21044,1540],{"class":112},[102,21046,1157],{"class":108},[102,21048,21049],{"class":217},"\"p1的年龄为:\"",[102,21051,1157],{"class":108},[102,21053,21054],{"class":112},"p1.m_Age",[102,21056,1157],{"class":108},[102,21058,21059],{"class":217},"\"身高为：\"",[102,21061,6409],{"class":108},[102,21063,21064],{"class":112},"p1.m_Height",[102,21066,1157],{"class":108},[102,21068,1227],{"class":112},[102,21070,21071],{"class":171},"  \u002F\u002F18\n",[102,21073,21074,21076,21078],{"class":104,"line":9754},[102,21075,19421],{"class":112},[102,21077,7023],{"class":1952},[102,21079,17505],{"class":112},[102,21081,21082,21084,21086,21089,21091,21093,21095,21097,21099,21102,21104,21106],{"class":104,"line":9778},[102,21083,1540],{"class":112},[102,21085,1157],{"class":108},[102,21087,21088],{"class":217},"\"p2的年龄为：\"",[102,21090,1157],{"class":108},[102,21092,19451],{"class":112},[102,21094,1157],{"class":108},[102,21096,21059],{"class":217},[102,21098,6409],{"class":108},[102,21100,21101],{"class":112},"p2.m_Height",[102,21103,1157],{"class":108},[102,21105,1227],{"class":112},[102,21107,21071],{"class":171},[102,21109,21110],{"class":104,"line":9783},[102,21111,13200],{"class":112},[102,21113,21114],{"class":104,"line":9788},[102,21115,1554],{"class":112},[102,21117,21118,21120,21122],{"class":104,"line":9793},[102,21119,116],{"class":108},[102,21121,1962],{"class":1952},[102,21123,1965],{"class":112},[102,21125,21126],{"class":104,"line":9802},[102,21127,1535],{"class":112},[102,21129,21130,21132],{"class":104,"line":9807},[102,21131,5623],{"class":1952},[102,21133,5626],{"class":112},[102,21135,21136],{"class":104,"line":9813},[102,21137,1554],{"class":112},[19,21139,21140],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21142,21143],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21145,21146],{},[1451,21147],{"alt":23,"src":21148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21150,21151],{},"浅拷贝问题要使用深拷贝来解决",[19,21153,21154],{},[1451,21155],{"alt":23,"src":21156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21158,21159],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[73,21161,21163],{"id":21162},"_826初始化列表","8.2.6初始化列表",[19,21165,21166],{},"作用：初始化属性",[19,21168,5171],{},[93,21170,21173],{"className":21171,"code":21172,"language":5177},[5175],"构造函数():属性1(值1),属性2(值2).....{}\n",[99,21174,21172],{"__ignoreMap":23},[19,21176,21177],{},"例子",[93,21179,21181],{"className":95,"code":21180,"language":97,"meta":23,"style":23},"#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",[99,21182,21183,21189,21199,21205,21209,21214,21218,21223,21228,21233,21238,21243,21248,21252,21257,21262,21305,21314,21332,21350,21368,21372,21376,21383,21390,21397,21401,21405,21413,21417,21421,21441,21450,21454,21458,21468,21472,21480],{"__ignoreMap":23},[102,21184,21185,21187],{"class":104,"line":105},[102,21186,1938],{"class":108},[102,21188,1941],{"class":217},[102,21190,21191,21193,21195,21197],{"class":104,"line":24},[102,21192,1946],{"class":108},[102,21194,1949],{"class":108},[102,21196,1953],{"class":1952},[102,21198,1279],{"class":112},[102,21200,21201,21203],{"class":104,"line":1168},[102,21202,14684],{"class":108},[102,21204,15161],{"class":1952},[102,21206,21207],{"class":104,"line":1183},[102,21208,1535],{"class":112},[102,21210,21211],{"class":104,"line":1189},[102,21212,21213],{"class":108},"    public:\n",[102,21215,21216],{"class":104,"line":1203},[102,21217,2389],{"emptyLinePlaceholder":30},[102,21219,21220],{"class":104,"line":1209},[102,21221,21222],{"class":171},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[102,21224,21225],{"class":104,"line":1300},[102,21226,21227],{"class":171},"    \u002F\u002FPerson(int a, int b, int c) {\n",[102,21229,21230],{"class":104,"line":1306},[102,21231,21232],{"class":171},"    \u002F\u002F  m_A = a;\n",[102,21234,21235],{"class":104,"line":1318},[102,21236,21237],{"class":171},"    \u002F\u002F  m_B = b;\n",[102,21239,21240],{"class":104,"line":1601},[102,21241,21242],{"class":171},"    \u002F\u002F  m_C = c;\n",[102,21244,21245],{"class":104,"line":1606},[102,21246,21247],{"class":171},"    \u002F\u002F}\n",[102,21249,21250],{"class":104,"line":1612},[102,21251,2389],{"emptyLinePlaceholder":30},[102,21253,21254],{"class":104,"line":1617},[102,21255,21256],{"class":171},"    \u002F\u002F初始化列表方式初始化\n",[102,21258,21259],{"class":104,"line":1631},[102,21260,21261],{"class":171},"    \u002F\u002F使用有参构造函数\n",[102,21263,21264,21266,21268,21270,21272,21274,21276,21278,21280,21282,21284,21287,21290,21293,21296,21299,21302],{"class":104,"line":1636},[102,21265,18509],{"class":1952},[102,21267,113],{"class":112},[102,21269,116],{"class":108},[102,21271,1387],{"class":5206},[102,21273,12425],{"class":112},[102,21275,116],{"class":108},[102,21277,2822],{"class":5206},[102,21279,12425],{"class":112},[102,21281,116],{"class":108},[102,21283,2838],{"class":5206},[102,21285,21286],{"class":112},") :",[102,21288,21289],{"class":1952},"m_A",[102,21291,21292],{"class":112},"(a), ",[102,21294,21295],{"class":1952},"m_B",[102,21297,21298],{"class":112},"(b), ",[102,21300,21301],{"class":1952},"m_C",[102,21303,21304],{"class":112},"(c) {}\n",[102,21306,21307,21309,21312],{"class":104,"line":1642},[102,21308,14899],{"class":108},[102,21310,21311],{"class":1952}," PrintPerson",[102,21313,10843],{"class":112},[102,21315,21316,21318,21320,21323,21325,21328,21330],{"class":104,"line":1663},[102,21317,9659],{"class":112},[102,21319,1157],{"class":108},[102,21321,21322],{"class":217}," \"mA:\"",[102,21324,1433],{"class":108},[102,21326,21327],{"class":112}," m_A ",[102,21329,1157],{"class":108},[102,21331,8830],{"class":112},[102,21333,21334,21336,21338,21341,21343,21346,21348],{"class":104,"line":1668},[102,21335,9659],{"class":112},[102,21337,1157],{"class":108},[102,21339,21340],{"class":217}," \"mB:\"",[102,21342,1433],{"class":108},[102,21344,21345],{"class":112}," m_B ",[102,21347,1157],{"class":108},[102,21349,8830],{"class":112},[102,21351,21352,21354,21356,21359,21361,21364,21366],{"class":104,"line":1682},[102,21353,9659],{"class":112},[102,21355,1157],{"class":108},[102,21357,21358],{"class":217}," \"mC:\"",[102,21360,1433],{"class":108},[102,21362,21363],{"class":112}," m_C ",[102,21365,1157],{"class":108},[102,21367,8830],{"class":112},[102,21369,21370],{"class":104,"line":1687},[102,21371,2176],{"class":112},[102,21373,21374],{"class":104,"line":1716},[102,21375,15212],{"class":108},[102,21377,21378,21380],{"class":104,"line":1721},[102,21379,1974],{"class":108},[102,21381,21382],{"class":112}," m_A;\n",[102,21384,21385,21387],{"class":104,"line":1738},[102,21386,1974],{"class":108},[102,21388,21389],{"class":112}," m_B;\n",[102,21391,21392,21394],{"class":104,"line":1743},[102,21393,1974],{"class":108},[102,21395,21396],{"class":112}," m_C;\n",[102,21398,21399],{"class":104,"line":1748},[102,21400,3984],{"class":112},[102,21402,21403],{"class":104,"line":1753},[102,21404,2389],{"emptyLinePlaceholder":30},[102,21406,21407,21409,21411],{"class":104,"line":1767},[102,21408,116],{"class":108},[102,21410,1962],{"class":1952},[102,21412,5968],{"class":112},[102,21414,21415],{"class":104,"line":1772},[102,21416,1535],{"class":112},[102,21418,21419],{"class":104,"line":2566},[102,21420,2389],{"emptyLinePlaceholder":30},[102,21422,21423,21425,21427,21429,21431,21433,21435,21437,21439],{"class":104,"line":2580},[102,21424,19421],{"class":112},[102,21426,19],{"class":1952},[102,21428,113],{"class":112},[102,21430,330],{"class":161},[102,21432,12425],{"class":112},[102,21434,190],{"class":161},[102,21436,12425],{"class":112},[102,21438,184],{"class":161},[102,21440,2708],{"class":112},[102,21442,21443,21445,21448],{"class":104,"line":2588},[102,21444,15856],{"class":112},[102,21446,21447],{"class":1952},"PrintPerson",[102,21449,5626],{"class":112},[102,21451,21452],{"class":104,"line":2593},[102,21453,2389],{"emptyLinePlaceholder":30},[102,21455,21456],{"class":104,"line":2599},[102,21457,2389],{"emptyLinePlaceholder":30},[102,21459,21460,21462,21464,21466],{"class":104,"line":2605},[102,21461,2292],{"class":1952},[102,21463,113],{"class":112},[102,21465,2297],{"class":217},[102,21467,2708],{"class":112},[102,21469,21470],{"class":104,"line":2610},[102,21471,2389],{"emptyLinePlaceholder":30},[102,21473,21474,21476,21478],{"class":104,"line":7938},[102,21475,4079],{"class":108},[102,21477,4082],{"class":161},[102,21479,1279],{"class":112},[102,21481,21482],{"class":104,"line":7962},[102,21483,1554],{"class":112},[19,21485,21486,21487,21490,21491],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[262,21488,21489],{},"参数名就是定义的对象属性","，",[262,21492,21493],{},"属性后面的值为有参构造函数的形参",[93,21495,21497],{"className":95,"code":21496,"language":97,"meta":23,"style":23},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[99,21498,21499],{"__ignoreMap":23},[102,21500,21501,21503,21505,21507,21510,21512,21515,21517,21520,21522,21525,21527,21530,21532],{"class":104,"line":105},[102,21502,19036],{"class":1952},[102,21504,113],{"class":112},[102,21506,116],{"class":108},[102,21508,21509],{"class":112}," a.",[102,21511,116],{"class":108},[102,21513,21514],{"class":112}," b,",[102,21516,116],{"class":108},[102,21518,21519],{"class":112}," b):",[102,21521,21289],{"class":1952},[102,21523,21524],{"class":112},"(a),",[102,21526,21295],{"class":1952},[102,21528,21529],{"class":112},"(c),",[102,21531,21301],{"class":1952},[102,21533,21534],{"class":112},"(b) {}\n",[73,21536,21538],{"id":21537},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21540,21541],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21543,14623],{},[93,21545,21547],{"className":95,"code":21546,"language":97,"meta":23,"style":23},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[99,21548,21549,21554,21559,21563,21568,21572],{"__ignoreMap":23},[102,21550,21551],{"class":104,"line":105},[102,21552,21553],{"class":112},"A{};\n",[102,21555,21556],{"class":104,"line":24},[102,21557,21558],{"class":112},"B\n",[102,21560,21561],{"class":104,"line":1168},[102,21562,1535],{"class":112},[102,21564,21565],{"class":104,"line":1183},[102,21566,21567],{"class":112},"    A a;\n",[102,21569,21570],{"class":104,"line":1189},[102,21571,1554],{"class":112},[102,21573,21574],{"class":104,"line":1203},[102,21575,21576],{"class":171},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21578,21579],{},"案例",[93,21581,21583],{"className":95,"code":21582,"language":97,"meta":23,"style":23},"\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",[99,21584,21585,21590,21597,21601,21606,21611,21625,21629,21639,21650,21654,21661,21665,21678,21682,21687,21692,21696,21702,21706,21710,21714,21745,21749,21760,21764,21770,21774,21787,21791,21795,21799,21804,21809,21813,21821,21825,21842,21861,21865,21873,21877,21883],{"__ignoreMap":23},[102,21586,21587],{"class":104,"line":105},[102,21588,21589],{"class":171},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[102,21591,21592,21594],{"class":104,"line":24},[102,21593,14684],{"class":108},[102,21595,21596],{"class":1952}," Phone\n",[102,21598,21599],{"class":104,"line":1168},[102,21600,1535],{"class":112},[102,21602,21603],{"class":104,"line":1183},[102,21604,21605],{"class":112},"public：\n",[102,21607,21608],{"class":104,"line":1189},[102,21609,21610],{"class":171},"    \u002F\u002F 赋值(构造函数)\n",[102,21612,21613,21616,21618,21620,21623],{"class":104,"line":1203},[102,21614,21615],{"class":1952},"    Phone",[102,21617,113],{"class":112},[102,21619,14907],{"class":1952},[102,21621,21622],{"class":5206}," pName",[102,21624,119],{"class":112},[102,21626,21627],{"class":104,"line":1209},[102,21628,2019],{"class":112},[102,21630,21631,21634,21636],{"class":104,"line":1300},[102,21632,21633],{"class":112},"        m_pName",[102,21635,158],{"class":108},[102,21637,21638],{"class":112},"pName;\n",[102,21640,21641,21643,21645,21648],{"class":104,"line":1306},[102,21642,3440],{"class":112},[102,21644,1157],{"class":108},[102,21646,21647],{"class":217},"\"Phone的构造函数调用\"",[102,21649,1279],{"class":112},[102,21651,21652],{"class":104,"line":1318},[102,21653,2176],{"class":112},[102,21655,21656,21659],{"class":104,"line":1601},[102,21657,21658],{"class":1952},"    ~Phone",[102,21660,1965],{"class":112},[102,21662,21663],{"class":104,"line":1606},[102,21664,2019],{"class":112},[102,21666,21667,21669,21671,21674,21676],{"class":104,"line":1612},[102,21668,3440],{"class":112},[102,21670,1157],{"class":108},[102,21672,21673],{"class":217},"\"Phone析构函数调用\"",[102,21675,1157],{"class":108},[102,21677,1180],{"class":112},[102,21679,21680],{"class":104,"line":1617},[102,21681,2176],{"class":112},[102,21683,21684],{"class":104,"line":1631},[102,21685,21686],{"class":171},"    \u002F\u002F\n",[102,21688,21689],{"class":104,"line":1636},[102,21690,21691],{"class":112},"    string m_PName;\n",[102,21693,21694],{"class":104,"line":1642},[102,21695,3984],{"class":112},[102,21697,21698,21700],{"class":104,"line":1663},[102,21699,14684],{"class":108},[102,21701,15161],{"class":1952},[102,21703,21704],{"class":104,"line":1668},[102,21705,1535],{"class":112},[102,21707,21708],{"class":104,"line":1682},[102,21709,14706],{"class":108},[102,21711,21712],{"class":104,"line":1687},[102,21713,16984],{"class":171},[102,21715,21716,21718,21720,21722,21724,21726,21728,21731,21734,21736,21739,21742],{"class":104,"line":1716},[102,21717,18509],{"class":1952},[102,21719,113],{"class":112},[102,21721,14907],{"class":1952},[102,21723,14910],{"class":5206},[102,21725,491],{"class":112},[102,21727,14907],{"class":1952},[102,21729,21730],{"class":5206}," pname",[102,21732,21733],{"class":112},"):",[102,21735,15000],{"class":1952},[102,21737,21738],{"class":112},"(name),m_phone.",[102,21740,21741],{"class":1952},"m_PName",[102,21743,21744],{"class":112},"(pname) \n",[102,21746,21747],{"class":104,"line":1721},[102,21748,2019],{"class":112},[102,21750,21751,21753,21755,21758],{"class":104,"line":1738},[102,21752,3440],{"class":112},[102,21754,1157],{"class":108},[102,21756,21757],{"class":217},"\"Person的构造函数调用\"",[102,21759,1279],{"class":112},[102,21761,21762],{"class":104,"line":1743},[102,21763,2176],{"class":112},[102,21765,21766,21768],{"class":104,"line":1748},[102,21767,18542],{"class":1952},[102,21769,1965],{"class":112},[102,21771,21772],{"class":104,"line":1753},[102,21773,2019],{"class":112},[102,21775,21776,21778,21780,21783,21785],{"class":104,"line":1767},[102,21777,3440],{"class":112},[102,21779,1157],{"class":108},[102,21781,21782],{"class":217},"\"Person析构函数调用\"",[102,21784,1157],{"class":108},[102,21786,1180],{"class":112},[102,21788,21789],{"class":104,"line":1772},[102,21790,2176],{"class":112},[102,21792,21793],{"class":104,"line":2566},[102,21794,7770],{"class":171},[102,21796,21797],{"class":104,"line":2580},[102,21798,14882],{"class":112},[102,21800,21801],{"class":104,"line":2588},[102,21802,21803],{"class":171},"    \u002F\u002F手机\n",[102,21805,21806],{"class":104,"line":2593},[102,21807,21808],{"class":112},"    Phone m_Phone;\n",[102,21810,21811],{"class":104,"line":2599},[102,21812,3984],{"class":112},[102,21814,21815,21817,21819],{"class":104,"line":2605},[102,21816,5354],{"class":108},[102,21818,5578],{"class":1952},[102,21820,1965],{"class":112},[102,21822,21823],{"class":104,"line":2610},[102,21824,1535],{"class":112},[102,21826,21827,21829,21831,21833,21835,21837,21840],{"class":104,"line":7938},[102,21828,19421],{"class":112},[102,21830,19],{"class":1952},[102,21832,113],{"class":112},[102,21834,7906],{"class":217},[102,21836,491],{"class":112},[102,21838,21839],{"class":217},"\"安卓\"",[102,21841,2708],{"class":112},[102,21843,21844,21846,21848,21851,21853,21856,21858],{"class":104,"line":7962},[102,21845,1540],{"class":112},[102,21847,1157],{"class":108},[102,21849,21850],{"class":112},"p.Name",[102,21852,1157],{"class":108},[102,21854,21855],{"class":217},"\"拿着：\"",[102,21857,1157],{"class":108},[102,21859,21860],{"class":112},"p.m_phone.m_PName;\n",[102,21862,21863],{"class":104,"line":7967},[102,21864,1554],{"class":112},[102,21866,21867,21869,21871],{"class":104,"line":7973},[102,21868,116],{"class":108},[102,21870,1962],{"class":1952},[102,21872,1965],{"class":112},[102,21874,21875],{"class":104,"line":8000},[102,21876,1535],{"class":112},[102,21878,21879,21881],{"class":104,"line":8005},[102,21880,5623],{"class":1952},[102,21882,5626],{"class":112},[102,21884,21885],{"class":104,"line":8011},[102,21886,1554],{"class":112},[19,21888,9015],{},[93,21890,21892],{"className":95,"code":21891,"language":97,"meta":23,"style":23},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[99,21893,21894,21899],{"__ignoreMap":23},[102,21895,21896],{"class":104,"line":105},[102,21897,21898],{"class":171},"    \u002F\u002F不需要写这个：\n",[102,21900,21901],{"class":104,"line":24},[102,21902,21903],{"class":171},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,21905,21906],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[93,21908,21910],{"className":95,"code":21909,"language":97,"meta":23,"style":23},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[99,21911,21912],{"__ignoreMap":23},[102,21913,21914,21916,21919,21921,21924,21927],{"class":104,"line":105},[102,21915,19036],{"class":1952},[102,21917,21918],{"class":112},"(string name.string pname):",[102,21920,15000],{"class":1952},[102,21922,21923],{"class":112},"(name),",[102,21925,21926],{"class":1952},"m_phone",[102,21928,21929],{"class":112},"(pname) {}\n",[19,21931,21932,21933,158,21936],{},"采用的是隐式转换法，实际为如下：\n",[99,21934,21935],{},"m_phone(pname)",[99,21937,21938],{},"Phone m_phone=pname",[19,21940,21941,21944],{},[262,21942,21943],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,21946,21947],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[73,21949,21951],{"id":21950},"_828静态对象","8.2.8静态对象",[19,21953,21954],{},"静态对象在成员对象前static，称为静态对象",[19,21956,21957],{},"静态对象分为两类：",[56,21959,21960],{},[59,21961,21962],{},"静态成员变量",[1120,21964,21965,21968,21971],{},[59,21966,21967],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[59,21969,21970],{},"②在编译阶段分配内存",[59,21972,21973],{},"③类内声明，类外初始化",[56,21975,21976],{"start":24},[59,21977,21978],{},"静态成员函数",[1120,21980,21981,21984],{},[59,21982,21983],{},"①所有对象共享同一个函数",[59,21985,21986],{},"②静态成员函数只能访问静态成员变量",[21988,21989,21991],"h4",{"id":21990},"_8281静态成员变量","8.2.8.1静态成员变量",[93,21993,21995],{"className":95,"code":21994,"language":97,"meta":23,"style":23},"#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",[99,21996,21997,22003,22013,22019,22023,22027,22032,22037,22042,22050,22054,22058,22062,22070,22074,22078,22083,22096,22100,22108,22112,22118],{"__ignoreMap":23},[102,21998,21999,22001],{"class":104,"line":105},[102,22000,1938],{"class":108},[102,22002,1941],{"class":217},[102,22004,22005,22007,22009,22011],{"class":104,"line":24},[102,22006,1946],{"class":108},[102,22008,1949],{"class":108},[102,22010,1953],{"class":1952},[102,22012,1279],{"class":112},[102,22014,22015,22017],{"class":104,"line":1168},[102,22016,14684],{"class":108},[102,22018,15161],{"class":1952},[102,22020,22021],{"class":104,"line":1183},[102,22022,1535],{"class":112},[102,22024,22025],{"class":104,"line":1189},[102,22026,14706],{"class":108},[102,22028,22029],{"class":104,"line":1203},[102,22030,22031],{"class":171},"    \u002F\u002F非静态成员变量\n",[102,22033,22034],{"class":104,"line":1209},[102,22035,22036],{"class":171},"    \u002F\u002F int m_A;\n",[102,22038,22039],{"class":104,"line":1300},[102,22040,22041],{"class":171},"    \u002F\u002F定义静态成员变量\n",[102,22043,22044,22046,22048],{"class":104,"line":1306},[102,22045,11010],{"class":108},[102,22047,2371],{"class":108},[102,22049,21382],{"class":112},[102,22051,22052],{"class":104,"line":1318},[102,22053,2389],{"emptyLinePlaceholder":30},[102,22055,22056],{"class":104,"line":1601},[102,22057,2389],{"emptyLinePlaceholder":30},[102,22059,22060],{"class":104,"line":1606},[102,22061,3984],{"class":112},[102,22063,22064,22066,22068],{"class":104,"line":1612},[102,22065,5354],{"class":108},[102,22067,5578],{"class":1952},[102,22069,1965],{"class":112},[102,22071,22072],{"class":104,"line":1617},[102,22073,1535],{"class":112},[102,22075,22076],{"class":104,"line":1631},[102,22077,15303],{"class":112},[102,22079,22080],{"class":104,"line":1636},[102,22081,22082],{"class":171},"    \u002F\u002F输出类成员变量这块内存\n",[102,22084,22085,22087,22089,22092,22094],{"class":104,"line":1642},[102,22086,1540],{"class":112},[102,22088,1157],{"class":108},[102,22090,22091],{"class":112},"p.m_A",[102,22093,1157],{"class":108},[102,22095,1180],{"class":112},[102,22097,22098],{"class":104,"line":1663},[102,22099,1554],{"class":112},[102,22101,22102,22104,22106],{"class":104,"line":1668},[102,22103,116],{"class":108},[102,22105,1962],{"class":1952},[102,22107,1965],{"class":112},[102,22109,22110],{"class":104,"line":1682},[102,22111,1535],{"class":112},[102,22113,22114,22116],{"class":104,"line":1687},[102,22115,5623],{"class":1952},[102,22117,1965],{"class":112},[102,22119,22120],{"class":104,"line":1716},[102,22121,1554],{"class":112},[19,22123,22124],{},"此时输出是报错的：无法解析外部命令",[19,22126,22127],{},"解决这一问题：必须用到类内声明，类外初始化操作",[93,22129,22131],{"className":95,"code":22130,"language":97,"meta":23,"style":23},"#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",[99,22132,22133,22139,22149,22155,22159,22163,22168,22176,22180,22185,22200,22208,22212,22216,22221,22226,22238,22243,22254,22259,22264,22277,22281,22289,22293,22299],{"__ignoreMap":23},[102,22134,22135,22137],{"class":104,"line":105},[102,22136,1938],{"class":108},[102,22138,1941],{"class":217},[102,22140,22141,22143,22145,22147],{"class":104,"line":24},[102,22142,1946],{"class":108},[102,22144,1949],{"class":108},[102,22146,1953],{"class":1952},[102,22148,1279],{"class":112},[102,22150,22151,22153],{"class":104,"line":1168},[102,22152,14684],{"class":108},[102,22154,15161],{"class":1952},[102,22156,22157],{"class":104,"line":1183},[102,22158,1535],{"class":112},[102,22160,22161],{"class":104,"line":1189},[102,22162,14706],{"class":108},[102,22164,22165],{"class":104,"line":1203},[102,22166,22167],{"class":171},"    \u002F\u002F类内声明\n",[102,22169,22170,22172,22174],{"class":104,"line":1209},[102,22171,11010],{"class":108},[102,22173,2371],{"class":108},[102,22175,21382],{"class":112},[102,22177,22178],{"class":104,"line":1300},[102,22179,3984],{"class":112},[102,22181,22182],{"class":104,"line":1306},[102,22183,22184],{"class":171},"\u002F\u002F类外初始化\n",[102,22186,22187,22189,22191,22194,22196,22198],{"class":104,"line":1318},[102,22188,116],{"class":108},[102,22190,15559],{"class":1952},[102,22192,22193],{"class":112},"::m_A",[102,22195,158],{"class":108},[102,22197,559],{"class":161},[102,22199,1279],{"class":112},[102,22201,22202,22204,22206],{"class":104,"line":1601},[102,22203,5354],{"class":108},[102,22205,5578],{"class":1952},[102,22207,1965],{"class":112},[102,22209,22210],{"class":104,"line":1606},[102,22211,1535],{"class":112},[102,22213,22214],{"class":104,"line":1612},[102,22215,15303],{"class":112},[102,22217,22218],{"class":104,"line":1617},[102,22219,22220],{"class":171},"    \u002F\u002F访问变量的原内存空间\n",[102,22222,22223],{"class":104,"line":1631},[102,22224,22225],{"class":171},"    \u002F\u002F100\n",[102,22227,22228,22230,22232,22234,22236],{"class":104,"line":1636},[102,22229,1540],{"class":112},[102,22231,1157],{"class":108},[102,22233,22091],{"class":112},[102,22235,1157],{"class":108},[102,22237,1180],{"class":112},[102,22239,22240],{"class":104,"line":1642},[102,22241,22242],{"class":112},"    Person p2;\n",[102,22244,22245,22248,22250,22252],{"class":104,"line":1663},[102,22246,22247],{"class":112},"    p2.m_A",[102,22249,158],{"class":108},[102,22251,1711],{"class":161},[102,22253,1279],{"class":112},[102,22255,22256],{"class":104,"line":1668},[102,22257,22258],{"class":171},"    \u002F\u002F继续访问这片空间\n",[102,22260,22261],{"class":104,"line":1682},[102,22262,22263],{"class":171},"    \u002F\u002F200\n",[102,22265,22266,22268,22270,22273,22275],{"class":104,"line":1687},[102,22267,1540],{"class":112},[102,22269,1157],{"class":108},[102,22271,22272],{"class":112},"p2.m_A",[102,22274,1157],{"class":108},[102,22276,1180],{"class":112},[102,22278,22279],{"class":104,"line":1716},[102,22280,1554],{"class":112},[102,22282,22283,22285,22287],{"class":104,"line":1721},[102,22284,116],{"class":108},[102,22286,1962],{"class":1952},[102,22288,1965],{"class":112},[102,22290,22291],{"class":104,"line":1738},[102,22292,1535],{"class":112},[102,22294,22295,22297],{"class":104,"line":1743},[102,22296,5623],{"class":1952},[102,22298,5626],{"class":112},[102,22300,22301],{"class":104,"line":1748},[102,22302,1554],{"class":112},[19,22304,22305],{},[262,22306,22307],{},"静态变量的访问",[93,22309,22311],{"className":95,"code":22310,"language":97,"meta":23,"style":23},"#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",[99,22312,22313,22319,22329,22335,22339,22343,22347,22355,22359,22364,22372,22376,22380,22394,22409,22417,22421,22426,22431,22436,22441,22453,22458,22463,22477,22494,22498,22506,22510,22516],{"__ignoreMap":23},[102,22314,22315,22317],{"class":104,"line":105},[102,22316,1938],{"class":108},[102,22318,1941],{"class":217},[102,22320,22321,22323,22325,22327],{"class":104,"line":24},[102,22322,1946],{"class":108},[102,22324,1949],{"class":108},[102,22326,1953],{"class":1952},[102,22328,1279],{"class":112},[102,22330,22331,22333],{"class":104,"line":1168},[102,22332,14684],{"class":108},[102,22334,15161],{"class":1952},[102,22336,22337],{"class":104,"line":1183},[102,22338,1535],{"class":112},[102,22340,22341],{"class":104,"line":1189},[102,22342,14706],{"class":108},[102,22344,22345],{"class":104,"line":1203},[102,22346,22167],{"class":171},[102,22348,22349,22351,22353],{"class":104,"line":1209},[102,22350,11010],{"class":108},[102,22352,2371],{"class":108},[102,22354,21382],{"class":112},[102,22356,22357],{"class":104,"line":1300},[102,22358,15212],{"class":108},[102,22360,22361],{"class":104,"line":1306},[102,22362,22363],{"class":171},"    \u002F\u002F静态成员变量也是有访问权限的\n",[102,22365,22366,22368,22370],{"class":104,"line":1318},[102,22367,11010],{"class":108},[102,22369,2371],{"class":108},[102,22371,21389],{"class":112},[102,22373,22374],{"class":104,"line":1601},[102,22375,3984],{"class":112},[102,22377,22378],{"class":104,"line":1606},[102,22379,22184],{"class":171},[102,22381,22382,22384,22386,22388,22390,22392],{"class":104,"line":1612},[102,22383,116],{"class":108},[102,22385,15559],{"class":1952},[102,22387,22193],{"class":112},[102,22389,158],{"class":108},[102,22391,559],{"class":161},[102,22393,1279],{"class":112},[102,22395,22396,22398,22400,22403,22405,22407],{"class":104,"line":1617},[102,22397,116],{"class":108},[102,22399,15559],{"class":1952},[102,22401,22402],{"class":112},"::m_B",[102,22404,158],{"class":108},[102,22406,813],{"class":161},[102,22408,1279],{"class":112},[102,22410,22411,22413,22415],{"class":104,"line":1631},[102,22412,5354],{"class":108},[102,22414,5647],{"class":1952},[102,22416,1965],{"class":112},[102,22418,22419],{"class":104,"line":1636},[102,22420,1535],{"class":112},[102,22422,22423],{"class":104,"line":1642},[102,22424,22425],{"class":171},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[102,22427,22428],{"class":104,"line":1663},[102,22429,22430],{"class":171},"    \u002F\u002F静态成员变量有两种访问方式：\n",[102,22432,22433],{"class":104,"line":1668},[102,22434,22435],{"class":171},"    \u002F\u002F1.通过对象进行访问\n",[102,22437,22438],{"class":104,"line":1682},[102,22439,22440],{"class":112},"    Person p;  \n",[102,22442,22443,22445,22447,22449,22451],{"class":104,"line":1687},[102,22444,1540],{"class":112},[102,22446,1157],{"class":108},[102,22448,22091],{"class":112},[102,22450,1157],{"class":108},[102,22452,1180],{"class":112},[102,22454,22455],{"class":104,"line":1716},[102,22456,22457],{"class":171},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[102,22459,22460],{"class":104,"line":1721},[102,22461,22462],{"class":171},"    \u002F\u002F2.通过类名进行访问\n",[102,22464,22465,22467,22469,22471,22473,22475],{"class":104,"line":1738},[102,22466,1540],{"class":112},[102,22468,1157],{"class":108},[102,22470,19036],{"class":1952},[102,22472,22193],{"class":112},[102,22474,1157],{"class":108},[102,22476,1180],{"class":112},[102,22478,22479,22481,22483,22485,22487,22489,22491],{"class":104,"line":1743},[102,22480,1540],{"class":112},[102,22482,1157],{"class":108},[102,22484,19036],{"class":1952},[102,22486,22402],{"class":112},[102,22488,1157],{"class":108},[102,22490,1227],{"class":112},[102,22492,22493],{"class":171}," \u002F\u002F没有访问权限，报错\n",[102,22495,22496],{"class":104,"line":1748},[102,22497,1554],{"class":112},[102,22499,22500,22502,22504],{"class":104,"line":1753},[102,22501,116],{"class":108},[102,22503,1962],{"class":1952},[102,22505,1965],{"class":112},[102,22507,22508],{"class":104,"line":1767},[102,22509,1535],{"class":112},[102,22511,22512,22514],{"class":104,"line":1772},[102,22513,5692],{"class":1952},[102,22515,5626],{"class":112},[102,22517,22518],{"class":104,"line":2566},[102,22519,1554],{"class":112},[21988,22521,22523],{"id":22522},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22525,22526],{},"1.静态成员函数定义与访问",[93,22528,22530],{"className":95,"code":22529,"language":97,"meta":23,"style":23},"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",[99,22531,22532,22538,22542,22546,22551,22562,22566,22580,22584,22588,22596,22600,22605,22610,22614,22622,22627,22637],{"__ignoreMap":23},[102,22533,22534,22536],{"class":104,"line":105},[102,22535,14684],{"class":108},[102,22537,15161],{"class":1952},[102,22539,22540],{"class":104,"line":24},[102,22541,1535],{"class":112},[102,22543,22544],{"class":104,"line":1168},[102,22545,14706],{"class":108},[102,22547,22548],{"class":104,"line":1183},[102,22549,22550],{"class":171},"    \u002F\u002F在公共权限下定义静态成员函数\n",[102,22552,22553,22555,22558,22560],{"class":104,"line":1189},[102,22554,11010],{"class":108},[102,22556,22557],{"class":108}," void",[102,22559,11375],{"class":1952},[102,22561,1965],{"class":112},[102,22563,22564],{"class":104,"line":1203},[102,22565,2019],{"class":112},[102,22567,22568,22571,22573,22576,22578],{"class":104,"line":1209},[102,22569,22570],{"class":112},"        coout",[102,22572,1157],{"class":108},[102,22574,22575],{"class":217},"\"静态成员函数的调用\"",[102,22577,1157],{"class":108},[102,22579,1180],{"class":112},[102,22581,22582],{"class":104,"line":1300},[102,22583,2176],{"class":112},[102,22585,22586],{"class":104,"line":1306},[102,22587,3984],{"class":112},[102,22589,22590,22592,22594],{"class":104,"line":1318},[102,22591,5354],{"class":108},[102,22593,5578],{"class":1952},[102,22595,1965],{"class":112},[102,22597,22598],{"class":104,"line":1601},[102,22599,1535],{"class":112},[102,22601,22602],{"class":104,"line":1606},[102,22603,22604],{"class":171},"    \u002F\u002F静态成员函数的调用方式:\n",[102,22606,22607],{"class":104,"line":1612},[102,22608,22609],{"class":171},"    \u002F\u002F1.通过对象访问\n",[102,22611,22612],{"class":104,"line":1617},[102,22613,15303],{"class":112},[102,22615,22616,22618,22620],{"class":104,"line":1631},[102,22617,15856],{"class":112},[102,22619,11541],{"class":1952},[102,22621,5626],{"class":112},[102,22623,22624],{"class":104,"line":1636},[102,22625,22626],{"class":171},"    \u002F\u002F2.通过类名访问\n",[102,22628,22629,22631,22633,22635],{"class":104,"line":1642},[102,22630,18509],{"class":1952},[102,22632,17722],{"class":112},[102,22634,11541],{"class":1952},[102,22636,5626],{"class":112},[102,22638,22639],{"class":104,"line":1663},[102,22640,1554],{"class":112},[56,22642,22643],{"start":24},[59,22644,22645],{},"静态成员函数只能访问静态成员变量",[93,22647,22649],{"className":95,"code":22648,"language":97,"meta":23,"style":23},"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",[99,22650,22651,22657,22661,22665,22669,22679,22683,22697,22702,22714,22718,22729,22739,22743,22747,22751,22761,22765,22778,22782,22786,22790,22794,22808,22816,22820,22824,22828,22832,22840,22844,22854,22859,22863,22871,22875,22881],{"__ignoreMap":23},[102,22652,22653,22655],{"class":104,"line":105},[102,22654,14684],{"class":108},[102,22656,15161],{"class":1952},[102,22658,22659],{"class":104,"line":24},[102,22660,1535],{"class":112},[102,22662,22663],{"class":104,"line":1168},[102,22664,14706],{"class":108},[102,22666,22667],{"class":104,"line":1183},[102,22668,22550],{"class":171},[102,22670,22671,22673,22675,22677],{"class":104,"line":1189},[102,22672,11010],{"class":108},[102,22674,22557],{"class":108},[102,22676,11375],{"class":1952},[102,22678,1965],{"class":112},[102,22680,22681],{"class":104,"line":1203},[102,22682,2019],{"class":112},[102,22684,22685,22688,22690,22692,22694],{"class":104,"line":1209},[102,22686,22687],{"class":112},"        m_A",[102,22689,158],{"class":108},[102,22691,424],{"class":161},[102,22693,168],{"class":112},[102,22695,22696],{"class":171}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[102,22698,22699],{"class":104,"line":1300},[102,22700,22701],{"class":171},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[102,22703,22704,22706,22708,22710,22712],{"class":104,"line":1306},[102,22705,22570],{"class":112},[102,22707,1157],{"class":108},[102,22709,22575],{"class":217},[102,22711,1157],{"class":108},[102,22713,1180],{"class":112},[102,22715,22716],{"class":104,"line":1318},[102,22717,2176],{"class":112},[102,22719,22720,22722,22724,22726],{"class":104,"line":1601},[102,22721,11010],{"class":108},[102,22723,2371],{"class":108},[102,22725,15438],{"class":112},[102,22727,22728],{"class":171}," \u002F\u002F静态成员变量\n",[102,22730,22731,22733,22736],{"class":104,"line":1606},[102,22732,1974],{"class":108},[102,22734,22735],{"class":112}," m_B;",[102,22737,22738],{"class":171}," \u002F\u002F非静态成员变量\n",[102,22740,22741],{"class":104,"line":1612},[102,22742,2389],{"emptyLinePlaceholder":30},[102,22744,22745],{"class":104,"line":1617},[102,22746,15212],{"class":108},[102,22748,22749],{"class":104,"line":1631},[102,22750,22363],{"class":171},[102,22752,22753,22755,22757,22759],{"class":104,"line":1636},[102,22754,11010],{"class":108},[102,22756,22557],{"class":108},[102,22758,13608],{"class":1952},[102,22760,1965],{"class":112},[102,22762,22763],{"class":104,"line":1642},[102,22764,2019],{"class":112},[102,22766,22767,22769,22771,22774,22776],{"class":104,"line":1663},[102,22768,3440],{"class":112},[102,22770,1157],{"class":108},[102,22772,22773],{"class":217},"\"这是私有权限下的静态函数调用\"",[102,22775,1157],{"class":108},[102,22777,1180],{"class":112},[102,22779,22780],{"class":104,"line":1668},[102,22781,2176],{"class":112},[102,22783,22784],{"class":104,"line":1682},[102,22785,2389],{"emptyLinePlaceholder":30},[102,22787,22788],{"class":104,"line":1687},[102,22789,2389],{"emptyLinePlaceholder":30},[102,22791,22792],{"class":104,"line":1716},[102,22793,3984],{"class":112},[102,22795,22796,22798,22800,22802,22804,22806],{"class":104,"line":1721},[102,22797,116],{"class":108},[102,22799,15559],{"class":1952},[102,22801,22193],{"class":112},[102,22803,158],{"class":108},[102,22805,304],{"class":161},[102,22807,1279],{"class":112},[102,22809,22810,22812,22814],{"class":104,"line":1738},[102,22811,5354],{"class":108},[102,22813,5578],{"class":1952},[102,22815,1965],{"class":112},[102,22817,22818],{"class":104,"line":1743},[102,22819,1535],{"class":112},[102,22821,22822],{"class":104,"line":1748},[102,22823,22604],{"class":171},[102,22825,22826],{"class":104,"line":1753},[102,22827,22609],{"class":171},[102,22829,22830],{"class":104,"line":1767},[102,22831,15303],{"class":112},[102,22833,22834,22836,22838],{"class":104,"line":1772},[102,22835,15856],{"class":112},[102,22837,11541],{"class":1952},[102,22839,5626],{"class":112},[102,22841,22842],{"class":104,"line":2566},[102,22843,22626],{"class":171},[102,22845,22846,22848,22850,22852],{"class":104,"line":2580},[102,22847,18509],{"class":1952},[102,22849,17722],{"class":112},[102,22851,11541],{"class":1952},[102,22853,5626],{"class":112},[102,22855,22856],{"class":104,"line":2588},[102,22857,22858],{"class":171},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[102,22860,22861],{"class":104,"line":2593},[102,22862,1554],{"class":112},[102,22864,22865,22867,22869],{"class":104,"line":2599},[102,22866,116],{"class":108},[102,22868,1962],{"class":1952},[102,22870,1965],{"class":112},[102,22872,22873],{"class":104,"line":2605},[102,22874,1535],{"class":112},[102,22876,22877,22879],{"class":104,"line":2610},[102,22878,5623],{"class":1952},[102,22880,5626],{"class":112},[102,22882,22883],{"class":104,"line":7938},[102,22884,1554],{"class":112},[73,22886,22888],{"id":22887},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21988,22890,22892],{"id":22891},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,22894,22895],{},"在c++中，类内的成员变量和成员函数分开存储",[19,22897,22898],{},"只有非静态成员变量才属于类的对象上",[22900,22901,22903],"h5",{"id":22902},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[93,22905,22907],{"className":95,"code":22906,"language":97,"meta":23,"style":23},"#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",[99,22908,22909,22916,22926,22932,22936,22940,22944,22952,22956,22960,22983,22987,22995,22999,23005],{"__ignoreMap":23},[102,22910,22911,22913],{"class":104,"line":105},[102,22912,1938],{"class":108},[102,22914,22915],{"class":217},"\u003Ciostraem>\n",[102,22917,22918,22920,22922,22924],{"class":104,"line":24},[102,22919,1946],{"class":108},[102,22921,1949],{"class":108},[102,22923,1953],{"class":1952},[102,22925,1279],{"class":112},[102,22927,22928,22930],{"class":104,"line":1168},[102,22929,14684],{"class":108},[102,22931,15161],{"class":1952},[102,22933,22934],{"class":104,"line":1183},[102,22935,1535],{"class":112},[102,22937,22938],{"class":104,"line":1189},[102,22939,2389],{"emptyLinePlaceholder":30},[102,22941,22942],{"class":104,"line":1203},[102,22943,3984],{"class":112},[102,22945,22946,22948,22950],{"class":104,"line":1209},[102,22947,5354],{"class":108},[102,22949,5578],{"class":1952},[102,22951,1965],{"class":112},[102,22953,22954],{"class":104,"line":1300},[102,22955,1535],{"class":112},[102,22957,22958],{"class":104,"line":1306},[102,22959,15303],{"class":112},[102,22961,22962,22964,22966,22969,22971,22974,22976,22978,22980],{"class":104,"line":1318},[102,22963,1540],{"class":112},[102,22965,1157],{"class":108},[102,22967,22968],{"class":217},"\"size of p=\"",[102,22970,1157],{"class":108},[102,22972,22973],{"class":1952},"sizeoif",[102,22975,6529],{"class":112},[102,22977,1157],{"class":108},[102,22979,1227],{"class":112},[102,22981,22982],{"class":171}," \u002F\u002F查看这个空类的占用的内存空间\n",[102,22984,22985],{"class":104,"line":1601},[102,22986,1554],{"class":112},[102,22988,22989,22991,22993],{"class":104,"line":1606},[102,22990,116],{"class":108},[102,22992,1962],{"class":1952},[102,22994,1965],{"class":112},[102,22996,22997],{"class":104,"line":1612},[102,22998,1535],{"class":112},[102,23000,23001,23003],{"class":104,"line":1617},[102,23002,5623],{"class":1952},[102,23004,5626],{"class":112},[102,23006,23007],{"class":104,"line":1631},[102,23008,1554],{"class":112},[19,23010,23011],{},"输出结果为：size of p=1",[19,23013,23014],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23016,23017],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22900,23019,23021],{"id":23020},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[93,23023,23025],{"className":95,"code":23024,"language":97,"meta":23,"style":23},"#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",[99,23026,23027,23033,23043,23051,23055,23064,23068,23076,23080,23084,23103,23107,23111,23119,23123,23129],{"__ignoreMap":23},[102,23028,23029,23031],{"class":104,"line":105},[102,23030,1938],{"class":108},[102,23032,1941],{"class":217},[102,23034,23035,23037,23039,23041],{"class":104,"line":24},[102,23036,1946],{"class":108},[102,23038,1949],{"class":108},[102,23040,1953],{"class":1952},[102,23042,1279],{"class":112},[102,23044,23045,23047,23049],{"class":104,"line":1168},[102,23046,14684],{"class":108},[102,23048,15559],{"class":1952},[102,23050,2663],{"class":112},[102,23052,23053],{"class":104,"line":1183},[102,23054,1535],{"class":112},[102,23056,23057,23059,23061],{"class":104,"line":1189},[102,23058,1974],{"class":108},[102,23060,15438],{"class":112},[102,23062,23063],{"class":171},"\u002F\u002F非静态成员变量\n",[102,23065,23066],{"class":104,"line":1203},[102,23067,3984],{"class":112},[102,23069,23070,23072,23074],{"class":104,"line":1209},[102,23071,5354],{"class":108},[102,23073,5578],{"class":1952},[102,23075,1965],{"class":112},[102,23077,23078],{"class":104,"line":1300},[102,23079,1535],{"class":112},[102,23081,23082],{"class":104,"line":1306},[102,23083,15303],{"class":112},[102,23085,23086,23088,23090,23092,23094,23096,23098,23100],{"class":104,"line":1318},[102,23087,1540],{"class":112},[102,23089,1157],{"class":108},[102,23091,22968],{"class":217},[102,23093,1361],{"class":108},[102,23095,6529],{"class":112},[102,23097,1157],{"class":108},[102,23099,1227],{"class":112},[102,23101,23102],{"class":171}," \u002F\u002F查看不是空对象时占用多少内存\n",[102,23104,23105],{"class":104,"line":1601},[102,23106,2389],{"emptyLinePlaceholder":30},[102,23108,23109],{"class":104,"line":1606},[102,23110,1554],{"class":112},[102,23112,23113,23115,23117],{"class":104,"line":1612},[102,23114,116],{"class":108},[102,23116,1962],{"class":1952},[102,23118,1965],{"class":112},[102,23120,23121],{"class":104,"line":1617},[102,23122,1535],{"class":112},[102,23124,23125,23127],{"class":104,"line":1631},[102,23126,5623],{"class":1952},[102,23128,5626],{"class":112},[102,23130,23131],{"class":104,"line":1636},[102,23132,1554],{"class":112},[19,23134,23135],{},"输出结果：size of p=4",[19,23137,23138],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[56,23140,23141],{},[59,23142,23143],{},"如果加上非静态成员变量，Person类修改如下",[93,23145,23147],{"className":95,"code":23146,"language":97,"meta":23,"style":23},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[99,23148,23149,23155,23159,23165,23173,23177,23182],{"__ignoreMap":23},[102,23150,23151,23153],{"class":104,"line":105},[102,23152,14684],{"class":108},[102,23154,15161],{"class":1952},[102,23156,23157],{"class":104,"line":24},[102,23158,1535],{"class":112},[102,23160,23161,23163],{"class":104,"line":1168},[102,23162,1974],{"class":108},[102,23164,21382],{"class":112},[102,23166,23167,23169,23171],{"class":104,"line":1183},[102,23168,11010],{"class":108},[102,23170,2371],{"class":108},[102,23172,21389],{"class":112},[102,23174,23175],{"class":104,"line":1189},[102,23176,3984],{"class":112},[102,23178,23179],{"class":104,"line":1203},[102,23180,23181],{"class":171},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[102,23183,23184,23186,23188,23190,23192,23194],{"class":104,"line":1209},[102,23185,116],{"class":108},[102,23187,15559],{"class":1952},[102,23189,22402],{"class":112},[102,23191,158],{"class":108},[102,23193,304],{"class":161},[102,23195,1279],{"class":112},[19,23197,23198],{},"输出结果：4",[19,23200,23201],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[56,23203,23204],{"start":24},[59,23205,23206],{},"加上非静态成员函数",[93,23208,23210],{"className":95,"code":23209,"language":97,"meta":23,"style":23},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[99,23211,23212,23219,23223,23229,23237,23241,23245,23249],{"__ignoreMap":23},[102,23213,23214,23216],{"class":104,"line":105},[102,23215,14684],{"class":108},[102,23217,23218],{"class":1952},"  Person\n",[102,23220,23221],{"class":104,"line":24},[102,23222,1535],{"class":112},[102,23224,23225,23227],{"class":104,"line":1168},[102,23226,1974],{"class":108},[102,23228,21382],{"class":112},[102,23230,23231,23233,23235],{"class":104,"line":1183},[102,23232,14899],{"class":108},[102,23234,11375],{"class":1952},[102,23236,1965],{"class":112},[102,23238,23239],{"class":104,"line":1189},[102,23240,2019],{"class":112},[102,23242,23243],{"class":104,"line":1203},[102,23244,2389],{"emptyLinePlaceholder":30},[102,23246,23247],{"class":104,"line":1209},[102,23248,2176],{"class":112},[102,23250,23251],{"class":104,"line":1300},[102,23252,3984],{"class":112},[19,23254,23255],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[56,23257,23258],{"start":1168},[59,23259,23260],{},"加上静态成员函数",[93,23262,23264],{"className":95,"code":23263,"language":97,"meta":23,"style":23},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[99,23265,23266,23272,23276,23282,23290,23294,23298,23302,23313,23317,23321,23325],{"__ignoreMap":23},[102,23267,23268,23270],{"class":104,"line":105},[102,23269,14684],{"class":108},[102,23271,23218],{"class":1952},[102,23273,23274],{"class":104,"line":24},[102,23275,1535],{"class":112},[102,23277,23278,23280],{"class":104,"line":1168},[102,23279,1974],{"class":108},[102,23281,21382],{"class":112},[102,23283,23284,23286,23288],{"class":104,"line":1183},[102,23285,14899],{"class":108},[102,23287,11375],{"class":1952},[102,23289,1965],{"class":112},[102,23291,23292],{"class":104,"line":1189},[102,23293,2019],{"class":112},[102,23295,23296],{"class":104,"line":1203},[102,23297,2389],{"emptyLinePlaceholder":30},[102,23299,23300],{"class":104,"line":1209},[102,23301,2176],{"class":112},[102,23303,23304,23306,23308,23311],{"class":104,"line":1300},[102,23305,11010],{"class":108},[102,23307,22557],{"class":108},[102,23309,23310],{"class":1952}," func1",[102,23312,1965],{"class":112},[102,23314,23315],{"class":104,"line":1306},[102,23316,2019],{"class":112},[102,23318,23319],{"class":104,"line":1318},[102,23320,2389],{"emptyLinePlaceholder":30},[102,23322,23323],{"class":104,"line":1601},[102,23324,2176],{"class":112},[102,23326,23327],{"class":104,"line":1606},[102,23328,3984],{"class":112},[19,23330,23198],{},[19,23332,23333],{},"解释：静态成员函数也不属于类上",[5116,23335,7664],{},{"title":23,"searchDepth":24,"depth":24,"links":23337},[23338,23344],{"id":14635,"depth":24,"text":14636,"children":23339},[23340,23341,23342,23343],{"id":14639,"depth":1168,"text":14640},{"id":15364,"depth":1168,"text":15365},{"id":15536,"depth":1168,"text":15537},{"id":15995,"depth":1168,"text":15996},{"id":18367,"depth":24,"text":18368,"children":23345},[23346,23347,23348,23349,23350,23351,23352,23353,23354],{"id":18379,"depth":1168,"text":18380},{"id":18672,"depth":1168,"text":18673},{"id":19163,"depth":1168,"text":19164},{"id":20260,"depth":1168,"text":20261},{"id":20683,"depth":1168,"text":20684},{"id":21162,"depth":1168,"text":21163},{"id":21537,"depth":1168,"text":21538},{"id":21950,"depth":1168,"text":21951},{"id":22887,"depth":1168,"text":22888},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14600,"description":23355},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23362,"title":97,"body":23363,"description":27,"extension":28,"meta":23367,"navigation":30,"path":23369,"seo":23370,"stem":23371,"__hash__":23372},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23364,"toc":23365},[],{"title":23,"searchDepth":24,"depth":24,"links":23366},[],{"category":23368},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":97,"description":27},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23374,"title":23375,"body":23376,"description":23,"extension":28,"meta":23967,"navigation":30,"path":23968,"seo":23969,"stem":23970,"__hash__":23971},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23377,"toc":23949},[23378,23381,23385,23388,23391,23394,23412,23417,23420,23423,23426,23429,23434,23437,23442,23445,23448,23452,23455,23458,23464,23467,23485,23489,23493,23496,23501,23504,23508,23511,23524,23527,23531,23534,23537,23540,23565,23568,23577,23588,23603,23635,23639,23646,23654,23658,23661,23664,23669,23673,23676,23679,23684,23687,23691,23694,23697,23702,23705,23709,23714,23718,23785,23789,23792,23795,23798,23801,23804,23810,23831,23834,23848,23857,23861,23864,23867,23872,23875,23880,23885,23888,23891,23896,23901,23904,23909,23914,23917,23922,23927,23930,23933,23938,23941,23946],[10,23379,23375],{"id":23380},"_1强化学习基本认识",[14,23382,23384],{"id":23383},"_11什么是强化学习","1.1.什么是强化学习",[19,23386,23387],{},"强化学习有两部分组成：智能体和环境；",[19,23389,23390],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23392,23393],{},"强化学习与监督学习的区别:",[56,23395,23396,23399,23402,23405],{},[59,23397,23398],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[59,23400,23401],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[59,23403,23404],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[59,23406,23407,23408,23411],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[262,23409,23410],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23413,23414],{},[1451,23415],{"alt":23,"src":23416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23418,23419],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23421,23422],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23424,23425],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23427,23428],{},"获取奖励",[19,23430,23431],{},[1451,23432],{"alt":23,"src":23433},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23435,23436],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23438,23439],{},[1451,23440],{"alt":23,"src":23441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23443,23444],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23446,23447],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23449,23451],{"id":23450},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23453,23454],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23456,23457],{},"具身智能中的应用",[19,23459,23460,23463],{},[262,23461,23462],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23465,23466],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23468,23469,23470,23473,23474,23477,23478,23481,23482],{},"机器人是",[262,23471,23472],{},"躯体","，深度学习是",[262,23475,23476],{},"神经元****网络","，VLA是",[262,23479,23480],{},"通用的行为逻辑","，而强化学习是",[262,23483,23484],{},"教练",[14,23486,23488],{"id":23487},"_13序列决策","1.3.序列决策",[73,23490,23492],{"id":23491},"_131智能体与环境","1.3.1.智能体与环境",[19,23494,23495],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23497,23498],{},[1451,23499],{"alt":23,"src":23500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23502,23503],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[73,23505,23507],{"id":23506},"_132奖励","1.3.2.奖励",[19,23509,23510],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23512,23513,23514,23523],{},"取某个策略的表现如何。强化学习的目的就是",[262,23515,23516,23517,23522],{},"最大化",[262,23518,23519],{},[262,23520,23521],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23525,23526],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[73,23528,23530],{"id":23529},"_133序列决策","1.3.3.序列决策",[19,23532,23533],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23535,23536],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23538,23539],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23541,23542,23546,23547,23549,23550,23552,23553,23555,23556,13785,23559,13785,23562],{},[23543,23544,23545],"em",{},"Ht"," = ",[23543,23548,709],{},"1*, a",[23543,23551,330],{},", r",[23543,23554,330],{},", . . . ,* ",[23543,23557,23558],{},"ot",[23543,23560,23561],{},", at ,",[23543,23563,23564],{},"rt",[19,23566,23567],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23569,23570,23546,23573,1647,23575,542],{},[23543,23571,23572],{},"st",[23543,23574,165],{},[23543,23576,23545],{},[19,23578,23579,23580,23583,23584,23587],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[262,23581,23582],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[262,23585,23586],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23589,23590,23591,23594,23595,23598,23599,23602],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[262,23592,23593],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[262,23596,23597],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23543,23600,23601],{},"S, A, T, R, Ω, O, γ",")。",[19,23604,23605,23606,23608,23609,23611,23612,113,23614,23617,23618,23620,23621,113,23624,23627,23628,23630,23631,23634],{},"其中 ",[23543,23607,802],{}," 表示状态空间，为隐变量，",[23543,23610,345],{}," 为动作空间，",[23543,23613,827],{},[23543,23615,23616],{},"s ′ |s, a",") 为状态转移概率，",[23543,23619,777],{}," 为奖励函数，",[23543,23622,23623],{},"Ω",[23543,23625,23626],{},"o|s, a",") 为观测概率，",[23543,23629,703],{}," 为观测空间，",[23543,23632,23633],{},"γ"," 为折扣因子。",[14,23636,23638],{"id":23637},"_14动作空间","1.4.动作空间",[19,23640,23641,23642,23645],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[262,23643,23644],{},"动作空间"," ，动作空间分为:",[56,23647,23648,23651],{},[59,23649,23650],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[59,23652,23653],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23655,23657],{"id":23656},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23659,23660],{},"由策略、价值函数、模型三部分组成",[19,23662,23663],{},"这三者组成马尔可夫决策过程",[19,23665,23666],{},[1451,23667],{"alt":23,"src":23668},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[73,23670,23672],{"id":23671},"_151策略","1.5.1.策略",[19,23674,23675],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23677,23678],{},"策略可分为两种：",[19,23680,23681],{},[1451,23682],{"alt":23,"src":23683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23685,23686],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[73,23688,23690],{"id":23689},"_152价值函数","1.5.2.价值函数",[19,23692,23693],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23695,23696],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23698,23699],{},[1451,23700],{"alt":23,"src":23701},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23703,23704],{},"进入某个状态采取的最优动作可以通过Q函数得到",[73,23706,23708],{"id":23707},"_153模型","1.5.3.模型",[19,23710,23711],{},[1451,23712],{"alt":23,"src":23713},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23715,23717],{"id":23716},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[250,23719,23720,23731],{},[253,23721,23722],{},[256,23723,23724,23728],{},[259,23725,23727],{"align":23726},"left","类型",[259,23729,23730],{"align":23726},"特点",[297,23732,23733,23743,23753,23763,23775],{},[256,23734,23735,23740],{},[302,23736,23737],{"align":23726},[262,23738,23739],{},"基于价值的智能体",[302,23741,23742],{"align":23726},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[256,23744,23745,23750],{},[302,23746,23747],{"align":23726},[262,23748,23749],{},"基于策略的智能体",[302,23751,23752],{"align":23726},"直接学习策略，没有学习价值函数",[256,23754,23755,23760],{},[302,23756,23757],{"align":23726},[262,23758,23759],{},"演员-评论员智能体",[302,23761,23762],{"align":23726},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[256,23764,23765,23770],{},[302,23766,23767],{"align":23726},[262,23768,23769],{},"有模型强化学习智能体",[302,23771,23772],{"align":23726},[1451,23773],{"alt":23,"src":23774},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[256,23776,23777,23782],{},[302,23778,23779],{"align":23726},[262,23780,23781],{},"免模型强化学习智能体",[302,23783,23784],{"align":23726},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,23786,23788],{"id":23787},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,23790,23791],{},"学习和规划是序列决策的两个基本问题",[19,23793,23794],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,23796,23797],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,23799,23800],{},"强化学习用到的库：Gym",[19,23802,23803],{},"Gym可以检验强化学习算法的优劣",[19,23805,23806,23809],{},[262,23807,23808],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[93,23811,23815],{"className":23812,"code":23813,"language":23814,"meta":23,"style":23},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[99,23816,23817],{"__ignoreMap":23},[102,23818,23819,23822,23825,23828],{"class":104,"line":105},[102,23820,23821],{"class":1952},"pip",[102,23823,23824],{"class":217}," install",[102,23826,23827],{"class":217}," gym==",[102,23829,23830],{"class":161},"0.25.2\n",[19,23832,23833],{},"显示图形界面需要",[93,23835,23837],{"className":23812,"code":23836,"language":23814,"meta":23,"style":23},"pip install pygame\n",[99,23838,23839],{"__ignoreMap":23},[102,23840,23841,23843,23845],{"class":104,"line":105},[102,23842,23821],{"class":1952},[102,23844,23824],{"class":217},[102,23846,23847],{"class":217}," pygame\n",[19,23849,23850,23851],{},"有关Gym库的相关文档介绍：",[351,23852,23856],{"href":23853,"rel":23854},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23855],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,23858,23860],{"id":23859},"_18一些补充基础概念","1.8.一些补充基础概念",[19,23862,23863],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,23865,23866],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,23868,23869],{},[1451,23870],{"alt":23,"src":23871},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,23873,23874],{},"折扣率需要自己来设定",[19,23876,23877],{},[1451,23878],{"alt":23,"src":23879},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[56,23881,23882],{},[59,23883,23884],{},"状态转移函数：",[19,23886,23887],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,23889,23890],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,23892,23893],{},[1451,23894],{"alt":23,"src":23895},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[56,23897,23898],{"start":24},[59,23899,23900],{},"动作价值函数：",[19,23902,23903],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,23905,23906],{},[1451,23907],{"alt":23,"src":23908},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[56,23910,23911],{"start":1168},[59,23912,23913],{},"最优动作价值函数：",[19,23915,23916],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,23918,23919],{},[1451,23920],{"alt":23,"src":23921},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[56,23923,23924],{"start":1183},[59,23925,23926],{},"状态价值函数:",[19,23928,23929],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,23931,23932],{},"它衡量的是“一个具体动作”的长期价值",[19,23934,23935],{},[1451,23936],{"alt":23,"src":23937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,23939,23940],{},"几个价值函数之间的比较：",[19,23942,23943],{},[1451,23944],{"alt":23,"src":23945},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5116,23947,23948],{},"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":23,"searchDepth":24,"depth":24,"links":23950},[23951,23952,23953,23958,23959,23964,23965,23966],{"id":23383,"depth":24,"text":23384},{"id":23450,"depth":24,"text":23451},{"id":23487,"depth":24,"text":23488,"children":23954},[23955,23956,23957],{"id":23491,"depth":1168,"text":23492},{"id":23506,"depth":1168,"text":23507},{"id":23529,"depth":1168,"text":23530},{"id":23637,"depth":24,"text":23638},{"id":23656,"depth":24,"text":23657,"children":23960},[23961,23962,23963],{"id":23671,"depth":1168,"text":23672},{"id":23689,"depth":1168,"text":23690},{"id":23707,"depth":1168,"text":23708},{"id":23716,"depth":24,"text":23717},{"id":23787,"depth":24,"text":23788},{"id":23859,"depth":24,"text":23860},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23375,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23973,"title":23974,"body":23975,"description":23982,"extension":28,"meta":23993,"navigation":30,"path":23994,"seo":23995,"stem":23996,"__hash__":23997},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23976,"toc":23991},[23977,23980,23983,23988],[10,23978,23974],{"id":23979},"_2马尔可夫决策过程",[19,23981,23982],{},"这是强化学习的基本框架",[19,23984,23985],{},[1451,23986],{"alt":23,"src":23987},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,23989,23990],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":23,"searchDepth":24,"depth":24,"links":23992},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23974,"description":23982},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23999,"title":24000,"body":24001,"description":23,"extension":28,"meta":24117,"navigation":30,"path":24118,"seo":24119,"stem":24120,"__hash__":24121},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24002,"toc":24112},[24003,24006,24010,24013,24018,24023,24026,24031,24034,24039,24042,24046,24051,24054,24059,24064,24069,24072,24076,24081,24084,24089,24094,24099,24104,24107],[10,24004,24000],{"id":24005},"_3动作价值函数",[14,24007,24009],{"id":24008},"_31dqn","3.1.DQN",[19,24011,24012],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24014,24015],{},[1451,24016],{"alt":23,"src":24017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24019,24020],{},[1451,24021],{"alt":23,"src":24022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24024,24025],{},"DQN算法的描述：",[19,24027,24028],{},[1451,24029],{"alt":23,"src":24030},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24032,24033],{},"这里的Dense指的是全连接层",[19,24035,24036],{},[1451,24037],{"alt":23,"src":24038},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24040,24041],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,24043,24045],{"id":24044},"_32dqn的举例","3.2.DQN的举例",[19,24047,24048],{},[1451,24049],{"alt":23,"src":24050},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24052,24053],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24055,24056],{},[1451,24057],{"alt":23,"src":24058},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24060,24061],{},[1451,24062],{"alt":23,"src":24063},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24065,24066],{},[1451,24067],{"alt":23,"src":24068},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24070,24071],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24073,24075],{"id":24074},"_33td算法","3.3.TD算法",[19,24077,24078],{},[1451,24079],{"alt":23,"src":24080},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24082,24083],{},"强化学习TD算法公式的粗略解释：",[19,24085,24086],{},[1451,24087],{"alt":23,"src":24088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24090,24091],{},[1451,24092],{"alt":23,"src":24093},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24095,24096],{},[1451,24097],{"alt":23,"src":24098},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24100,24101],{},[1451,24102],{"alt":23,"src":24103},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24105,24106],{},"TD算法总结：",[19,24108,24109],{},[1451,24110],{"alt":23,"src":24111},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":23,"searchDepth":24,"depth":24,"links":24113},[24114,24115,24116],{"id":24008,"depth":24,"text":24009},{"id":24044,"depth":24,"text":24045},{"id":24074,"depth":24,"text":24075},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24000,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24123,"title":24124,"body":24125,"description":23,"extension":28,"meta":24358,"navigation":30,"path":24359,"seo":24360,"stem":24361,"__hash__":24362},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24126,"toc":24354},[24127,24130,24134,24137,24140,24145,24150,24153,24158,24163,24166,24171,24174,24179,24182,24187,24190,24195,24198,24203,24208,24211,24216,24219,24222,24227,24230,24235,24240,24244,24247,24250,24255,24260,24263,24268,24273,24276,24281,24284,24287,24292,24295,24300,24303,24308,24313,24316,24321,24326,24329,24334,24337,24342,24345],[10,24128,24124],{"id":24129},"_4策略学习",[14,24131,24133],{"id":24132},"_41概念描述","4.1.概念描述",[19,24135,24136],{},"用神经网络（策略网络）近似策略函数",[19,24138,24139],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24141,24142],{},[1451,24143],{"alt":23,"src":24144},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24146,24147],{},[1451,24148],{"alt":23,"src":24149},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24151,24152],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24154,24155],{},[1451,24156],{"alt":23,"src":24157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24159,24160],{},[1451,24161],{"alt":23,"src":24162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24164,24165],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24167,24168],{},[1451,24169],{"alt":23,"src":24170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24172,24173],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24175,24176],{},[1451,24177],{"alt":23,"src":24178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24180,24181],{},"改进theta要用到策略梯度算法",[19,24183,24184],{},[1451,24185],{"alt":23,"src":24186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24188,24189],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24191,24192],{},[1451,24193],{"alt":23,"src":24194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24196,24197],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24199,24200],{},[1451,24201],{"alt":23,"src":24202},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24204,24205],{},[1451,24206],{"alt":23,"src":24207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24209,24210],{},"梯度公式总结：",[19,24212,24213],{},[1451,24214],{"alt":23,"src":24215},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24217,24218],{},"两个公式的分别应用场景：",[19,24220,24221],{},"对于离散的动作：",[19,24223,24224],{},[1451,24225],{"alt":23,"src":24226},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24228,24229],{},"对于连续的动作：",[19,24231,24232],{},[1451,24233],{"alt":23,"src":24234},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24236,24237],{},[1451,24238],{"alt":23,"src":24239},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24241,24243],{"id":24242},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24245,24246],{},"使用蒙特卡洛来近似计算策略梯度",[19,24248,24249],{},"蒙特卡洛法的解释如下：",[19,24251,24252],{},[1451,24253],{"alt":23,"src":24254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24256,24257],{},[1451,24258],{"alt":23,"src":24259},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24261,24262],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[56,24264,24265],{},[59,24266,24267],{},"方法一：reinforce算法",[19,24269,24270],{},[1451,24271],{"alt":23,"src":24272},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24274,24275],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[56,24277,24278],{"start":24},[59,24279,24280],{},"方法二：actor-critic算法",[19,24282,24283],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24285,24286],{},"两个网络的构建：",[19,24288,24289],{},[1451,24290],{"alt":23,"src":24291},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24293,24294],{},"actor网路：",[19,24296,24297],{},[1451,24298],{"alt":23,"src":24299},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24301,24302],{},"critic网络",[19,24304,24305],{},[1451,24306],{"alt":23,"src":24307},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[56,24309,24310],{"start":1168},[59,24311,24312],{},"网络的训练",[19,24314,24315],{},"网络描述",[19,24317,24318],{},[1451,24319],{"alt":23,"src":24320},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24322,24323],{},[1451,24324],{"alt":23,"src":24325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24327,24328],{},"TD算法更新梯度：",[19,24330,24331],{},[1451,24332],{"alt":23,"src":24333},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24335,24336],{},"策略网络更新梯度：",[19,24338,24339],{},[1451,24340],{"alt":23,"src":24341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24343,24344],{},"训练整个流程的具体描述：",[19,24346,24347,24350,24351],{},[1451,24348],{"alt":23,"src":24349},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1451,24352],{"alt":23,"src":24353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":23,"searchDepth":24,"depth":24,"links":24355},[24356,24357],{"id":24132,"depth":24,"text":24133},{"id":24242,"depth":24,"text":24243},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24124,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24364,"title":24365,"body":24366,"description":24373,"extension":28,"meta":24423,"navigation":30,"path":24424,"seo":24425,"stem":24426,"__hash__":24427},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24367,"toc":24419},[24368,24371,24374,24378,24381,24386,24390,24393,24398,24401,24406,24411,24414],[10,24369,24365],{"id":24370},"_5alphago算法",[19,24372,24373],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24375,24377],{"id":24376},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24379,24380],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24382,24383],{},[1451,24384],{"alt":23,"src":24385},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24387,24389],{"id":24388},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24391,24392],{},"采用强化学习的方式训练策略网络",[19,24394,24395],{},[1451,24396],{"alt":23,"src":24397},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24399,24400],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24402,24403],{},[1451,24404],{"alt":23,"src":24405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24407,24408],{},[1451,24409],{"alt":23,"src":24410},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24412,24413],{},"强化学习训练策略网络的总结：",[19,24415,24416],{},[1451,24417],{"alt":23,"src":24418},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":23,"searchDepth":24,"depth":24,"links":24420},[24421,24422],{"id":24376,"depth":24,"text":24377},{"id":24388,"depth":24,"text":24389},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24365,"description":24373},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24429,"title":24430,"body":24431,"description":24438,"extension":28,"meta":24441,"navigation":30,"path":24442,"seo":24443,"stem":24444,"__hash__":24445},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24432,"toc":24439},[24433,24436],[10,24434,24430],{"id":24435},"_6价值网络",[19,24437,24438],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":23,"searchDepth":24,"depth":24,"links":24440},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24430,"description":24438},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24447,"title":24448,"body":24449,"description":24453,"extension":28,"meta":24454,"navigation":30,"path":24455,"seo":24456,"stem":24457,"__hash__":24458},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24450,"toc":24451},[],{"title":23,"searchDepth":24,"depth":24,"links":24452},[],"记录自己的强化学习笔记。",{"category":23368},"\u002Fwiki\u002F2025-12-04",{"title":24448,"description":24453},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24460,"title":24461,"body":24462,"description":27,"extension":28,"meta":24501,"navigation":30,"path":24502,"seo":24503,"stem":24504,"__hash__":24505},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24463,"toc":24499},[24464,24467,24470,24476,24479,24485,24488,24493,24496],[10,24465,24461],{"id":24466},"_1-项目概览与官方资源",[19,24468,24469],{},"官方文档：",[19,24471,24472],{},[351,24473,24474],{"href":24474,"rel":24475},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23855],[19,24477,24478],{},"官方代码仓库：",[19,24480,24481],{},[351,24482,24483],{"href":24483,"rel":24484},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23855],[19,24486,24487],{},"复现大体流程：",[19,24489,24490],{},[1451,24491],{"alt":23,"src":24492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24494,24495],{},"本教程的目标是打通这条链路：",[19,24497,24498],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":23,"searchDepth":24,"depth":24,"links":24500},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24461,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24507,"title":24508,"body":24509,"description":27,"extension":28,"meta":24625,"navigation":30,"path":24626,"seo":24627,"stem":24628,"__hash__":24629},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24510,"toc":24620},[24511,24514,24518,24521,24528,24532,24535,24544,24554,24558,24588,24591,24617],[10,24512,24508],{"id":24513},"_2-环境准备与设备连接",[14,24515,24517],{"id":24516},"_21-系统与环境","2.1 系统与环境",[19,24519,24520],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24522,24523,24524,24527],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[99,24525,24526],{},"lerobot"," 依赖。",[14,24529,24531],{"id":24530},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24533,24534],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[93,24536,24538],{"className":23812,"code":24537,"language":23814,"meta":23,"style":23},"lerobot-find-out\n",[99,24539,24540],{"__ignoreMap":23},[102,24541,24542],{"class":104,"line":105},[102,24543,24537],{"class":1952},[19,24545,24546,24547,325,24550,24553],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[99,24548,24549],{},"\u002Fdev\u002FttyACM0",[99,24551,24552],{},"\u002Fdev\u002FttyACM1","）。",[14,24555,24557],{"id":24556},"_23-串口授权","2.3 串口授权",[93,24559,24561],{"className":23812,"code":24560,"language":23814,"meta":23,"style":23},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[99,24562,24563,24577],{"__ignoreMap":23},[102,24564,24565,24568,24571,24574],{"class":104,"line":105},[102,24566,24567],{"class":1952},"sudo",[102,24569,24570],{"class":217}," chmod",[102,24572,24573],{"class":161}," 666",[102,24575,24576],{"class":217}," \u002Fdev\u002FttyACM0\n",[102,24578,24579,24581,24583,24585],{"class":104,"line":24},[102,24580,24567],{"class":1952},[102,24582,24570],{"class":217},[102,24584,24573],{"class":161},[102,24586,24587],{"class":217}," \u002Fdev\u002FttyACM1\n",[19,24589,24590],{},"说明：",[1120,24592,24593,24598,24604,24614],{},[59,24594,24595,24597],{},[99,24596,24567],{},"：以 root 权限执行命令。",[59,24599,24600,24603],{},[99,24601,24602],{},"chmod","：修改设备节点权限。",[59,24605,24606,24609,24610,24613],{},[99,24607,24608],{},"666","：",[99,24611,24612],{},"rw-rw-rw-","，所有用户可读写。",[59,24615,24616],{},"串口号必须替换为你机器上的真实端口。",[5116,24618,24619],{},"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":23,"searchDepth":24,"depth":24,"links":24621},[24622,24623,24624],{"id":24516,"depth":24,"text":24517},{"id":24530,"depth":24,"text":24531},{"id":24556,"depth":24,"text":24557},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24508,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24631,"title":24632,"body":24633,"description":27,"extension":28,"meta":24794,"navigation":30,"path":24795,"seo":24796,"stem":24797,"__hash__":24798},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24634,"toc":24790},[24635,24639,24643,24649,24652,24709,24712,24716,24719,24787],[10,24636,24638],{"id":24637},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24640,24642],{"id":24641},"_31-配置电机-id","3.1 配置电机 ID",[19,24644,24645,24646,24648],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[99,24647,330],{},"，需要改成机械臂链路里不冲突的编号。",[19,24650,24651],{},"方式一：用 LeRobot 命令逐步写入。",[93,24653,24655],{"className":23812,"code":24654,"language":23814,"meta":23,"style":23},"# 主臂舵机配置 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",[99,24656,24657,24662,24670,24677,24682,24686,24691,24697,24704],{"__ignoreMap":23},[102,24658,24659],{"class":104,"line":105},[102,24660,24661],{"class":171},"# 主臂舵机配置 ID\n",[102,24663,24664,24667],{"class":104,"line":24},[102,24665,24666],{"class":1952},"lerobot-setup-motors",[102,24668,24669],{"class":161}," \\\n",[102,24671,24672,24675],{"class":104,"line":1168},[102,24673,24674],{"class":161},"  --teleop.type=so101_leader",[102,24676,24669],{"class":161},[102,24678,24679],{"class":104,"line":1183},[102,24680,24681],{"class":161},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[102,24683,24684],{"class":104,"line":1189},[102,24685,2389],{"emptyLinePlaceholder":30},[102,24687,24688],{"class":104,"line":1203},[102,24689,24690],{"class":171},"# 从臂舵机配置 ID\n",[102,24692,24693,24695],{"class":104,"line":1209},[102,24694,24666],{"class":1952},[102,24696,24669],{"class":161},[102,24698,24699,24702],{"class":104,"line":1300},[102,24700,24701],{"class":161},"  --robot.type=so101_follower",[102,24703,24669],{"class":161},[102,24705,24706],{"class":104,"line":1306},[102,24707,24708],{"class":161},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24710,24711],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24713,24715],{"id":24714},"_32-机械臂校准","3.2 机械臂校准",[19,24717,24718],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[93,24720,24722],{"className":23812,"code":24721,"language":23814,"meta":23,"style":23},"# 主臂校准\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",[99,24723,24724,24729,24736,24742,24749,24754,24758,24763,24769,24775,24782],{"__ignoreMap":23},[102,24725,24726],{"class":104,"line":105},[102,24727,24728],{"class":171},"# 主臂校准\n",[102,24730,24731,24734],{"class":104,"line":24},[102,24732,24733],{"class":1952},"lerobot-calibrate",[102,24735,24669],{"class":161},[102,24737,24738,24740],{"class":104,"line":1168},[102,24739,24674],{"class":161},[102,24741,24669],{"class":161},[102,24743,24744,24747],{"class":104,"line":1183},[102,24745,24746],{"class":161},"  --teleop.port=\u002Fdev\u002FttyACM0",[102,24748,24669],{"class":161},[102,24750,24751],{"class":104,"line":1189},[102,24752,24753],{"class":161},"  --teleop.id=my_awesome_leader_arm\n",[102,24755,24756],{"class":104,"line":1203},[102,24757,2389],{"emptyLinePlaceholder":30},[102,24759,24760],{"class":104,"line":1209},[102,24761,24762],{"class":171},"# 从臂校准\n",[102,24764,24765,24767],{"class":104,"line":1300},[102,24766,24733],{"class":1952},[102,24768,24669],{"class":161},[102,24770,24771,24773],{"class":104,"line":1306},[102,24772,24701],{"class":161},[102,24774,24669],{"class":161},[102,24776,24777,24780],{"class":104,"line":1318},[102,24778,24779],{"class":161},"  --robot.port=\u002Fdev\u002FttyACM1",[102,24781,24669],{"class":161},[102,24783,24784],{"class":104,"line":1601},[102,24785,24786],{"class":161},"  --robot.id=my_awesome_follower_arm\n",[5116,24788,24789],{},"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":23,"searchDepth":24,"depth":24,"links":24791},[24792,24793],{"id":24641,"depth":24,"text":24642},{"id":24714,"depth":24,"text":24715},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24632,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24800,"title":24801,"body":24802,"description":27,"extension":28,"meta":24993,"navigation":30,"path":24994,"seo":24995,"stem":24996,"__hash__":24997},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24803,"toc":24989},[24804,24807,24811,24858,24862,24875,24938,24941,24986],[10,24805,24801],{"id":24806},"_4-遥操与相机接入",[14,24808,24810],{"id":24809},"_41-不带相机遥操","4.1 不带相机遥操",[93,24812,24814],{"className":23812,"code":24813,"language":23814,"meta":23,"style":23},"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",[99,24815,24816,24823,24829,24835,24842,24848,24854],{"__ignoreMap":23},[102,24817,24818,24821],{"class":104,"line":105},[102,24819,24820],{"class":1952},"lerobot-teleoperate",[102,24822,24669],{"class":161},[102,24824,24825,24827],{"class":104,"line":24},[102,24826,24701],{"class":161},[102,24828,24669],{"class":161},[102,24830,24831,24833],{"class":104,"line":1168},[102,24832,24779],{"class":161},[102,24834,24669],{"class":161},[102,24836,24837,24840],{"class":104,"line":1183},[102,24838,24839],{"class":161},"  --robot.id=my_awesome_follower_arm",[102,24841,24669],{"class":161},[102,24843,24844,24846],{"class":104,"line":1189},[102,24845,24674],{"class":161},[102,24847,24669],{"class":161},[102,24849,24850,24852],{"class":104,"line":1203},[102,24851,24746],{"class":161},[102,24853,24669],{"class":161},[102,24855,24856],{"class":104,"line":1209},[102,24857,24753],{"class":161},[14,24859,24861],{"id":24860},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[93,24863,24865],{"className":23812,"code":24864,"language":23814,"meta":23,"style":23},"lerobot-find-cameras opencv\n",[99,24866,24867],{"__ignoreMap":23},[102,24868,24869,24872],{"class":104,"line":105},[102,24870,24871],{"class":1952},"lerobot-find-cameras",[102,24873,24874],{"class":217}," opencv\n",[93,24876,24878],{"className":23812,"code":24877,"language":23814,"meta":23,"style":23},"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",[99,24879,24880,24886,24892,24898,24904,24914,24920,24926,24933],{"__ignoreMap":23},[102,24881,24882,24884],{"class":104,"line":105},[102,24883,24820],{"class":1952},[102,24885,24669],{"class":161},[102,24887,24888,24890],{"class":104,"line":24},[102,24889,24701],{"class":161},[102,24891,24669],{"class":161},[102,24893,24894,24896],{"class":104,"line":1168},[102,24895,24779],{"class":161},[102,24897,24669],{"class":161},[102,24899,24900,24902],{"class":104,"line":1183},[102,24901,24839],{"class":161},[102,24903,24669],{"class":161},[102,24905,24906,24909,24912],{"class":104,"line":1189},[102,24907,24908],{"class":161},"  --robot.cameras=",[102,24910,24911],{"class":217},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[102,24913,24669],{"class":161},[102,24915,24916,24918],{"class":104,"line":1203},[102,24917,24674],{"class":161},[102,24919,24669],{"class":161},[102,24921,24922,24924],{"class":104,"line":1209},[102,24923,24746],{"class":161},[102,24925,24669],{"class":161},[102,24927,24928,24931],{"class":104,"line":1300},[102,24929,24930],{"class":161},"  --teleop.id=my_awesome_leader_arm",[102,24932,24669],{"class":161},[102,24934,24935],{"class":104,"line":1306},[102,24936,24937],{"class":161},"  --display_data=true\n",[19,24939,24940],{},"相机参数说明：",[1120,24942,24943,24949,24955,24964,24974,24980],{},[59,24944,24945,24948],{},[99,24946,24947],{},"front","：相机名称。",[59,24950,24951,24954],{},[99,24952,24953],{},"type: opencv","：相机驱动类型。",[59,24956,24957,24960,24961,24553],{},[99,24958,24959],{},"index_or_path","：设备编号或设备路径（如 ",[99,24962,24963],{},"\u002Fdev\u002Fvideo4",[59,24965,24966,24969,24970,24973],{},[99,24967,24968],{},"width"," \u002F ",[99,24971,24972],{},"height","：图像分辨率。",[59,24975,24976,24979],{},[99,24977,24978],{},"fps","：采样帧率。",[59,24981,24982,24985],{},[99,24983,24984],{},"--display_data=true","：启用实时可视化。",[5116,24987,24988],{},"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":23,"searchDepth":24,"depth":24,"links":24990},[24991,24992],{"id":24809,"depth":24,"text":24810},{"id":24860,"depth":24,"text":24861},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24801,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24999,"title":25000,"body":25001,"description":27,"extension":28,"meta":25173,"navigation":30,"path":25174,"seo":25175,"stem":25176,"__hash__":25177},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25002,"toc":25168},[25003,25007,25011,25016,25021,25024,25066,25072,25076,25125,25130,25134,25137,25145,25150,25155,25160,25165],[10,25004,25006],{"id":25005},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25008,25010],{"id":25009},"_51-生成访问令牌","5.1 生成访问令牌",[19,25012,25013],{},[1451,25014],{"alt":23,"src":25015},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25017,25018],{},[1451,25019],{"alt":23,"src":25020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25022,25023],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[93,25025,25027],{"className":23812,"code":25026,"language":23814,"meta":23,"style":23},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[99,25028,25029,25042],{"__ignoreMap":23},[102,25030,25031,25034,25037,25039],{"class":104,"line":105},[102,25032,25033],{"class":108},"export",[102,25035,25036],{"class":112}," HF_TOKEN",[102,25038,158],{"class":108},[102,25040,25041],{"class":217},"\"your_huggingface_token\"\n",[102,25043,25044,25047,25050,25053,25056,25058,25061,25063],{"class":104,"line":24},[102,25045,25046],{"class":1952},"hf",[102,25048,25049],{"class":217}," auth",[102,25051,25052],{"class":217}," login",[102,25054,25055],{"class":161}," --token",[102,25057,9714],{"class":217},[102,25059,25060],{"class":112},"$HF_TOKEN",[102,25062,364],{"class":217},[102,25064,25065],{"class":161}," --add-to-git-credential\n",[19,25067,25068,25071],{},[99,25069,25070],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25073,25075],{"id":25074},"_52-验证登录","5.2 验证登录",[93,25077,25079],{"className":23812,"code":25078,"language":23814,"meta":23,"style":23},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[99,25080,25081,25112],{"__ignoreMap":23},[102,25082,25083,25086,25088,25091,25093,25095,25098,25101,25104,25107,25110],{"class":104,"line":105},[102,25084,25085],{"class":112},"HF_USER",[102,25087,158],{"class":108},[102,25089,25090],{"class":112},"$(",[102,25092,25046],{"class":1952},[102,25094,25049],{"class":217},[102,25096,25097],{"class":217}," whoami",[102,25099,25100],{"class":108}," |",[102,25102,25103],{"class":1952}," head",[102,25105,25106],{"class":161}," -n",[102,25108,25109],{"class":161}," 1",[102,25111,119],{"class":112},[102,25113,25114,25117,25119,25122],{"class":104,"line":24},[102,25115,25116],{"class":161},"echo",[102,25118,9714],{"class":217},[102,25120,25121],{"class":112},"$HF_USER",[102,25123,25124],{"class":217},"\"\n",[19,25126,25127],{},[1451,25128],{"alt":23,"src":25129},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25131,25133],{"id":25132},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25135,25136],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1120,25138,25139,25142],{},[59,25140,25141],{},"Dataset Repo（用于上传演示数据）",[59,25143,25144],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25146,25147],{},[1451,25148],{"alt":23,"src":25149},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25151,25152],{},[1451,25153],{"alt":23,"src":25154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25156,25157],{},[1451,25158],{"alt":23,"src":25159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25161,25162],{},[1451,25163],{"alt":23,"src":25164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5116,25166,25167],{},"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":23,"searchDepth":24,"depth":24,"links":25169},[25170,25171,25172],{"id":25009,"depth":24,"text":25010},{"id":25074,"depth":24,"text":25075},{"id":25132,"depth":24,"text":25133},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25000,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25179,"title":25180,"body":25181,"description":27,"extension":28,"meta":25378,"navigation":30,"path":25379,"seo":25380,"stem":25381,"__hash__":25382},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25182,"toc":25373},[25183,25187,25191,25287,25295,25300,25304,25320,25323,25327,25370],[10,25184,25186],{"id":25185},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25188,25190],{"id":25189},"_61-录制示教数据","6.1 录制示教数据",[93,25192,25194],{"className":23812,"code":25193,"language":23814,"meta":23,"style":23},"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",[99,25195,25196,25203,25209,25215,25221,25230,25236,25242,25248,25255,25265,25272,25282],{"__ignoreMap":23},[102,25197,25198,25201],{"class":104,"line":105},[102,25199,25200],{"class":1952},"lerobot-record",[102,25202,24669],{"class":161},[102,25204,25205,25207],{"class":104,"line":24},[102,25206,24701],{"class":161},[102,25208,24669],{"class":161},[102,25210,25211,25213],{"class":104,"line":1168},[102,25212,24779],{"class":161},[102,25214,24669],{"class":161},[102,25216,25217,25219],{"class":104,"line":1183},[102,25218,24839],{"class":161},[102,25220,24669],{"class":161},[102,25222,25223,25225,25228],{"class":104,"line":1189},[102,25224,24908],{"class":161},[102,25226,25227],{"class":217},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[102,25229,24669],{"class":161},[102,25231,25232,25234],{"class":104,"line":1203},[102,25233,24674],{"class":161},[102,25235,24669],{"class":161},[102,25237,25238,25240],{"class":104,"line":1209},[102,25239,24746],{"class":161},[102,25241,24669],{"class":161},[102,25243,25244,25246],{"class":104,"line":1300},[102,25245,24930],{"class":161},[102,25247,24669],{"class":161},[102,25249,25250,25253],{"class":104,"line":1306},[102,25251,25252],{"class":161},"  --display_data=true",[102,25254,24669],{"class":161},[102,25256,25257,25260,25263],{"class":104,"line":1318},[102,25258,25259],{"class":161},"  --dataset.repo_id=",[102,25261,25262],{"class":217},"\"Embodied-AI-6\u002Fso101_test\"",[102,25264,24669],{"class":161},[102,25266,25267,25270],{"class":104,"line":1601},[102,25268,25269],{"class":161},"  --dataset.num_episodes=10",[102,25271,24669],{"class":161},[102,25273,25274,25277,25280],{"class":104,"line":1606},[102,25275,25276],{"class":161},"  --dataset.single_task=",[102,25278,25279],{"class":217},"\"Grab the green cube\"",[102,25281,24669],{"class":161},[102,25283,25284],{"class":104,"line":1612},[102,25285,25286],{"class":161},"  --resume=true\n",[1120,25288,25289],{},[59,25290,25291,25294],{},[99,25292,25293],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25296,25297],{},[1451,25298],{"alt":23,"src":25299},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25301,25303],{"id":25302},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[93,25305,25307],{"className":23812,"code":25306,"language":23814,"meta":23,"style":23},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[99,25308,25309],{"__ignoreMap":23},[102,25310,25311,25314,25317],{"class":104,"line":105},[102,25312,25313],{"class":1952},"rm",[102,25315,25316],{"class":161}," -rf",[102,25318,25319],{"class":217}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25321,25322],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25324,25326],{"id":25325},"_63-回放指定-episode","6.3 回放指定 episode",[93,25328,25330],{"className":23812,"code":25329,"language":23814,"meta":23,"style":23},"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",[99,25331,25332,25339,25345,25351,25357,25365],{"__ignoreMap":23},[102,25333,25334,25337],{"class":104,"line":105},[102,25335,25336],{"class":1952},"lerobot-replay",[102,25338,24669],{"class":161},[102,25340,25341,25343],{"class":104,"line":24},[102,25342,24701],{"class":161},[102,25344,24669],{"class":161},[102,25346,25347,25349],{"class":104,"line":1168},[102,25348,24779],{"class":161},[102,25350,24669],{"class":161},[102,25352,25353,25355],{"class":104,"line":1183},[102,25354,24839],{"class":161},[102,25356,24669],{"class":161},[102,25358,25359,25361,25363],{"class":104,"line":1189},[102,25360,25259],{"class":161},[102,25362,25262],{"class":217},[102,25364,24669],{"class":161},[102,25366,25367],{"class":104,"line":1203},[102,25368,25369],{"class":161},"  --dataset.episode=0\n",[5116,25371,25372],{},"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":23,"searchDepth":24,"depth":24,"links":25374},[25375,25376,25377],{"id":25189,"depth":24,"text":25190},{"id":25302,"depth":24,"text":25303},{"id":25325,"depth":24,"text":25326},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25180,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25384,"title":25385,"body":25386,"description":27,"extension":28,"meta":25514,"navigation":30,"path":25515,"seo":25516,"stem":25517,"__hash__":25518},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25387,"toc":25512},[25388,25392,25455,25458,25505,25510],[10,25389,25391],{"id":25390},"_7-act-模型训练","7. ACT 模型训练",[93,25393,25395],{"className":23812,"code":25394,"language":23814,"meta":23,"style":23},"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",[99,25396,25397,25404,25412,25419,25426,25433,25440,25447],{"__ignoreMap":23},[102,25398,25399,25402],{"class":104,"line":105},[102,25400,25401],{"class":1952},"lerobot-train",[102,25403,24669],{"class":161},[102,25405,25406,25408,25410],{"class":104,"line":24},[102,25407,25259],{"class":161},[102,25409,25262],{"class":217},[102,25411,24669],{"class":161},[102,25413,25414,25417],{"class":104,"line":1168},[102,25415,25416],{"class":161},"  --policy.type=act",[102,25418,24669],{"class":161},[102,25420,25421,25424],{"class":104,"line":1183},[102,25422,25423],{"class":161},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[102,25425,24669],{"class":161},[102,25427,25428,25431],{"class":104,"line":1189},[102,25429,25430],{"class":161},"  --job_name=act_so101_test",[102,25432,24669],{"class":161},[102,25434,25435,25438],{"class":104,"line":1203},[102,25436,25437],{"class":161},"  --policy.device=cuda",[102,25439,24669],{"class":161},[102,25441,25442,25445],{"class":104,"line":1209},[102,25443,25444],{"class":161},"  --wandb.enable=false",[102,25446,24669],{"class":161},[102,25448,25449,25452],{"class":104,"line":1300},[102,25450,25451],{"class":161},"  --policy.repo_id=",[102,25453,25454],{"class":217},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25456,25457],{},"参数说明：",[1120,25459,25460,25466,25472,25478,25484,25493,25499],{},[59,25461,25462,25465],{},[99,25463,25464],{},"--dataset.repo_id","：训练数据集仓库。",[59,25467,25468,25471],{},[99,25469,25470],{},"--policy.type=act","：策略模型类型为 ACT。",[59,25473,25474,25477],{},[99,25475,25476],{},"--output_dir","：本地训练输出目录。",[59,25479,25480,25483],{},[99,25481,25482],{},"--job_name","：训练任务名称。",[59,25485,25486,25489,25490,24553],{},[99,25487,25488],{},"--policy.device","：训练设备（如 ",[99,25491,25492],{},"cuda",[59,25494,25495,25498],{},[99,25496,25497],{},"--wandb.enable","：是否启用 WandB 可视化。",[59,25500,25501,25504],{},[99,25502,25503],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25506,25507],{},[1451,25508],{"alt":23,"src":25509},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5116,25511,25372],{},{"title":23,"searchDepth":24,"depth":24,"links":25513},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25385,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25520,"title":25521,"body":25522,"description":27,"extension":28,"meta":25609,"navigation":30,"path":25610,"seo":25611,"stem":25612,"__hash__":25613},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25523,"toc":25607},[25524,25527,25530,25597,25605],[10,25525,25521],{"id":25526},"_8-策略部署与自动采集",[19,25528,25529],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[93,25531,25533],{"className":23812,"code":25532,"language":23814,"meta":23,"style":23},"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",[99,25534,25535,25541,25547,25553,25561,25567,25574,25582,25590],{"__ignoreMap":23},[102,25536,25537,25539],{"class":104,"line":105},[102,25538,25200],{"class":1952},[102,25540,24669],{"class":161},[102,25542,25543,25545],{"class":104,"line":24},[102,25544,24701],{"class":161},[102,25546,24669],{"class":161},[102,25548,25549,25551],{"class":104,"line":1168},[102,25550,24779],{"class":161},[102,25552,24669],{"class":161},[102,25554,25555,25557,25559],{"class":104,"line":1183},[102,25556,24908],{"class":161},[102,25558,25227],{"class":217},[102,25560,24669],{"class":161},[102,25562,25563,25565],{"class":104,"line":1189},[102,25564,24839],{"class":161},[102,25566,24669],{"class":161},[102,25568,25569,25572],{"class":104,"line":1203},[102,25570,25571],{"class":161},"  --display_data=false",[102,25573,24669],{"class":161},[102,25575,25576,25578,25580],{"class":104,"line":1209},[102,25577,25259],{"class":161},[102,25579,25262],{"class":217},[102,25581,24669],{"class":161},[102,25583,25584,25586,25588],{"class":104,"line":1300},[102,25585,25276],{"class":161},[102,25587,25279],{"class":217},[102,25589,24669],{"class":161},[102,25591,25592,25595],{"class":104,"line":1306},[102,25593,25594],{"class":161},"  --policy.path=",[102,25596,25454],{"class":217},[1120,25598,25599],{},[59,25600,25601,25604],{},[99,25602,25603],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5116,25606,25372],{},{"title":23,"searchDepth":24,"depth":24,"links":25608},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25521,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25615,"title":25616,"body":25617,"description":27,"extension":28,"meta":25646,"navigation":30,"path":25647,"seo":25648,"stem":25649,"__hash__":25650},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25618,"toc":25644},[25619,25623,25626,25632,25635,25641],[10,25620,25622],{"id":25621},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25624,25625],{},"项目地址：",[19,25627,25628],{},[351,25629,25630],{"href":25630,"rel":25631},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23855],[19,25633,25634],{},"参考教程：",[19,25636,25637],{},[351,25638,25639],{"href":25639,"rel":25640},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23855],[19,25642,25643],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":23,"searchDepth":24,"depth":24,"links":25645},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25616,"description":27},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25652,"title":25653,"body":25654,"description":25658,"extension":28,"meta":25659,"navigation":30,"path":25660,"seo":25661,"stem":25662,"__hash__":25663},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25655,"toc":25656},[],{"title":23,"searchDepth":24,"depth":24,"links":25657},[],"act复现",{"category":23368},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25653,"description":25658},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25665,"title":25666,"body":25667,"description":23,"extension":28,"meta":25969,"navigation":30,"path":25970,"seo":25971,"stem":25972,"__hash__":25973},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25668,"toc":25961},[25669,25672,25676,25686,25693,25700,25703,25710,25713,25716,25720,25732,25736,25782,25785,25788,25791,25794,25797,25801,25839,25845,25849,25903,25908,25911,25914,25919,25922,25927,25930,25933,25937,25940,25943,25947],[10,25670,25666],{"id":25671},"_1简介",[73,25673,25675],{"id":25674},"_11什么是-docker","1.1什么是 Docker？",[19,25677,25678,25679,25682,25683],{},"Docker 是一个开源的 ",[262,25680,25681],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[262,25684,25685],{},"一次构建，到处运行。",[19,25687,25688,25689,25692],{},"“ ",[262,25690,25691],{},"一次构建，到处运行"," ”也就是说：",[56,25694,25695],{},[59,25696,25697],{},[262,25698,25699],{},"之前：",[19,25701,25702],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[56,25704,25705],{},[59,25706,25707],{},[262,25708,25709],{},"使用docker后：",[19,25711,25712],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,25714,25715],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[73,25717,25719],{"id":25718},"_12它是怎么工作的","1.2.它是怎么工作的？",[1120,25721,25722,25725],{},[59,25723,25724],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[59,25726,25727,25728,25731],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[262,25729,25730],{},"无论在哪运行都一样稳定"," 。",[73,25733,25735],{"id":25734},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[250,25737,25738,25748],{},[253,25739,25740],{},[256,25741,25742,25745],{},[259,25743,25744],{"align":23726},"概念",[259,25746,25747],{"align":23726},"解释",[297,25749,25750,25758,25766,25774],{},[256,25751,25752,25755],{},[302,25753,25754],{"align":23726},"镜像",[302,25756,25757],{"align":23726},"Image，运行容器的模板，像是一个应用快照",[256,25759,25760,25763],{},[302,25761,25762],{"align":23726},"容器",[302,25764,25765],{"align":23726},"Container，运行中的镜像实例，有自己的文件系统、网络等",[256,25767,25768,25771],{},[302,25769,25770],{"align":23726},"Dockerfile",[302,25772,25773],{"align":23726},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[256,25775,25776,25779],{},[302,25777,25778],{"align":23726},"仓库",[302,25780,25781],{"align":23726},"Registry，存放镜像的地方，比如 Docker Hub",[19,25783,25784],{},"抽象化理解:",[19,25786,25787],{},"Docker镜像≈C++类",[19,25789,25790],{},"Docker容器≈C++类实例(即对象)",[19,25792,25793],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,25795,25796],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[73,25798,25800],{"id":25799},"_14类比理解","1.4.类比理解",[250,25802,25803,25813],{},[253,25804,25805],{},[256,25806,25807,25810],{},[259,25808,25809],{"align":23726},"传统部署",[259,25811,25812],{"align":23726},"Docker部署",[297,25814,25815,25823,25831],{},[256,25816,25817,25820],{},[302,25818,25819],{"align":23726},"手动安装依赖、调试版本不一致问题",[302,25821,25822],{"align":23726},"一次打包环境和代码",[256,25824,25825,25828],{},[302,25826,25827],{"align":23726},"程序“裸奔”跑在系统上",[302,25829,25830],{"align":23726},"程序“穿着容器”隔离运行",[256,25832,25833,25836],{},[302,25834,25835],{"align":23726},"容易“在我电脑上能跑”",[302,25837,25838],{"align":23726},"保证“无论在哪都能跑”",[19,25840,25841,25842],{},"就像快递包裹： ",[262,25843,25844],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[73,25846,25848],{"id":25847},"_15docker-的核心优势","1.5.Docker 的核心优势",[250,25850,25851,25861],{},[253,25852,25853],{},[256,25854,25855,25858],{},[259,25856,25857],{"align":23726},"优势",[259,25859,25860],{"align":23726},"说明",[297,25862,25863,25871,25879,25887,25895],{},[256,25864,25865,25868],{},[302,25866,25867],{"align":23726},"轻量级",[302,25869,25870],{"align":23726},"基于系统内核共享，启动速度快，占资源少",[256,25872,25873,25876],{},[302,25874,25875],{"align":23726},"跨平台",[302,25877,25878],{"align":23726},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[256,25880,25881,25884],{},[302,25882,25883],{"align":23726},"易于迁移部署",[302,25885,25886],{"align":23726},"应用和环境一起封装，不怕依赖不一致",[256,25888,25889,25892],{},[302,25890,25891],{"align":23726},"易于版本控制",[302,25893,25894],{"align":23726},"镜像版本可控，支持回滚",[256,25896,25897,25900],{},[302,25898,25899],{"align":23726},"生态丰富",[302,25901,25902],{"align":23726},"Docker Hub 上有成千上万的现成镜像可用",[56,25904,25905],{},[59,25906,25907],{},"在Linux上可以几乎实现无性能损失。",[19,25909,25910],{},"docker里的发行版和本机共用Linux内核。",[19,25912,25913],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[56,25915,25916],{},[59,25917,25918],{},"可以快速部署在绝大多数Linux发行版",[19,25920,25921],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[56,25923,25924],{},[59,25925,25926],{},"配置环境简单",[19,25928,25929],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,25931,25932],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[56,25934,25935],{},[59,25936,25899],{},[19,25938,25939],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,25941,25942],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[73,25944,25946],{"id":25945},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1120,25948,25949,25952,25955,25958],{},[59,25950,25951],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[59,25953,25954],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[59,25956,25957],{},"微服务架构：每个服务一个容器，灵活组合",[59,25959,25960],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":23,"searchDepth":24,"depth":24,"links":25962},[25963,25964,25965,25966,25967,25968],{"id":25674,"depth":1168,"text":25675},{"id":25718,"depth":1168,"text":25719},{"id":25734,"depth":1168,"text":25735},{"id":25799,"depth":1168,"text":25800},{"id":25847,"depth":1168,"text":25848},{"id":25945,"depth":1168,"text":25946},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25666,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25975,"title":25976,"body":25977,"description":23,"extension":28,"meta":26710,"navigation":30,"path":26711,"seo":26712,"stem":26713,"__hash__":26714},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25978,"toc":26705},[25979,25982,25986,25989,25992,25998,26004,26008,26017,26020,26077,26080,26131,26134,26217,26220,26257,26261,26272,26285,26292,26295,26375,26378,26428,26431,26454,26458,26465,26468,26484,26490,26493,26509,26515,26518,26534,26548,26554,26574,26580,26583,26595,26601,26604,26618,26624,26627,26647,26652,26655,26658,26662,26665,26668,26671,26678,26681,26684,26687,26692,26697,26702],[10,25980,25976],{"id":25981},"_2安装docker",[73,25983,25985],{"id":25984},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,25987,25988],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,25990,25991],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,25993,25994],{},[351,25995,25996],{"href":25996,"rel":25997},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23855],[19,25999,26000],{},[351,26001,26002],{"href":26002,"rel":26003},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23855],[21988,26005,26007],{"id":26006},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26009,26010,26011,26016],{},"以下内容根据 ",[351,26012,26015],{"href":26013,"rel":26014},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23855],"官方文档"," 修改而来。",[19,26018,26019],{},"如果你过去安装过 docker，先删掉：",[93,26021,26023],{"className":23812,"code":26022,"language":23814,"meta":23,"style":23},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[99,26024,26025],{"__ignoreMap":23},[102,26026,26027,26029,26032,26035,26038,26041,26044,26047,26050,26053,26056,26059,26062,26065,26068,26071,26074],{"class":104,"line":105},[102,26028,3014],{"class":108},[102,26030,26031],{"class":112}," pkg ",[102,26033,26034],{"class":108},"in",[102,26036,26037],{"class":217}," docker.io",[102,26039,26040],{"class":217}," docker-doc",[102,26042,26043],{"class":217}," docker-compose",[102,26045,26046],{"class":217}," docker-compose-v2",[102,26048,26049],{"class":217}," podman-docker",[102,26051,26052],{"class":217}," containerd",[102,26054,26055],{"class":217}," runc",[102,26057,26058],{"class":112},"; ",[102,26060,26061],{"class":108},"do",[102,26063,26064],{"class":1952}," sudo",[102,26066,26067],{"class":217}," apt-get",[102,26069,26070],{"class":217}," remove",[102,26072,26073],{"class":112}," $pkg; ",[102,26075,26076],{"class":108},"done\n",[19,26078,26079],{},"首先安装依赖和GPG：",[93,26081,26085],{"className":26082,"code":26083,"language":26084,"meta":23,"style":23},"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",[99,26086,26087,26092,26097,26102,26107,26112,26117,26121,26126],{"__ignoreMap":23},[102,26088,26089],{"class":104,"line":105},[102,26090,26091],{},"# Add Docker's official GPG key:\n",[102,26093,26094],{"class":104,"line":24},[102,26095,26096],{},"sudo apt-get update\n",[102,26098,26099],{"class":104,"line":1168},[102,26100,26101],{},"sudo apt-get install ca-certificates curl\n",[102,26103,26104],{"class":104,"line":1183},[102,26105,26106],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[102,26108,26109],{"class":104,"line":1189},[102,26110,26111],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[102,26113,26114],{"class":104,"line":1203},[102,26115,26116],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[102,26118,26119],{"class":104,"line":1209},[102,26120,2389],{"emptyLinePlaceholder":30},[102,26122,26123],{"class":104,"line":1300},[102,26124,26125],{},"# 如果上面这行报错就弄下面这行\n",[102,26127,26128],{"class":104,"line":1306},[102,26129,26130],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26132,26133],{},"信任 Docker 的 GPG 公钥并添加仓库：",[93,26135,26137],{"className":23812,"code":26136,"language":23814,"meta":23,"style":23},"# 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",[99,26138,26139,26144,26150,26167,26200],{"__ignoreMap":23},[102,26140,26141],{"class":104,"line":105},[102,26142,26143],{"class":171},"# Add the repository to Apt sources:\n",[102,26145,26146,26148],{"class":104,"line":24},[102,26147,25116],{"class":161},[102,26149,24669],{"class":161},[102,26151,26152,26155,26158,26161,26164],{"class":104,"line":1168},[102,26153,26154],{"class":217},"  \"deb [arch=$(",[102,26156,26157],{"class":1952},"dpkg",[102,26159,26160],{"class":161}," --print-architecture",[102,26162,26163],{"class":217},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[102,26165,26166],{"class":161},"\\\n",[102,26168,26169,26172,26174,26176,26179,26182,26184,26186,26189,26191,26193,26196,26198],{"class":104,"line":1183},[102,26170,26171],{"class":217},"  \"",[102,26173,25090],{"class":112},[102,26175,671],{"class":161},[102,26177,26178],{"class":217}," \u002Fetc\u002Fos-release",[102,26180,26181],{"class":112}," && ",[102,26183,25116],{"class":161},[102,26185,9714],{"class":217},[102,26187,26188],{"class":112},"$VERSION_CODENAME",[102,26190,364],{"class":217},[102,26192,542],{"class":112},[102,26194,26195],{"class":217},"\" stable\"",[102,26197,25100],{"class":108},[102,26199,24669],{"class":161},[102,26201,26202,26205,26208,26211,26214],{"class":104,"line":1189},[102,26203,26204],{"class":1952},"  sudo",[102,26206,26207],{"class":217}," tee",[102,26209,26210],{"class":217}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[102,26212,26213],{"class":108}," >",[102,26215,26216],{"class":217}," \u002Fdev\u002Fnull\n",[19,26218,26219],{},"最后安装",[93,26221,26223],{"className":23812,"code":26222,"language":23814,"meta":23,"style":23},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[99,26224,26225,26234],{"__ignoreMap":23},[102,26226,26227,26229,26231],{"class":104,"line":105},[102,26228,24567],{"class":1952},[102,26230,26067],{"class":217},[102,26232,26233],{"class":217}," update\n",[102,26235,26236,26238,26240,26242,26245,26248,26251,26254],{"class":104,"line":24},[102,26237,24567],{"class":1952},[102,26239,26067],{"class":217},[102,26241,23824],{"class":217},[102,26243,26244],{"class":217}," docker-ce",[102,26246,26247],{"class":217}," docker-ce-cli",[102,26249,26250],{"class":217}," containerd.io",[102,26252,26253],{"class":217}," docker-buildx-plugin",[102,26255,26256],{"class":217}," docker-compose-plugin\n",[21988,26258,26260],{"id":26259},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26262,26263,26264,26267,26268,26271],{},"查看自己自己包管理工具版本（dnf是 ",[262,26265,26266],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[262,26269,26270],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[93,26273,26275],{"className":23812,"code":26274,"language":23814,"meta":23,"style":23},"dnf --version\n",[99,26276,26277],{"__ignoreMap":23},[102,26278,26279,26282],{"class":104,"line":105},[102,26280,26281],{"class":1952},"dnf",[102,26283,26284],{"class":161}," --version\n",[19,26286,26010,26287,26291],{},[351,26288,26015],{"href":26289,"rel":26290},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23855]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26293,26294],{},"如果你之前安装过 docker，请先删掉",[93,26296,26298],{"className":23812,"code":26297,"language":23814,"meta":23,"style":23},"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",[99,26299,26300,26314,26321,26328,26335,26342,26349,26356,26363,26370],{"__ignoreMap":23},[102,26301,26302,26304,26307,26309,26312],{"class":104,"line":105},[102,26303,24567],{"class":1952},[102,26305,26306],{"class":217}," dnf",[102,26308,26070],{"class":217},[102,26310,26311],{"class":217}," docker",[102,26313,24669],{"class":161},[102,26315,26316,26319],{"class":104,"line":24},[102,26317,26318],{"class":217},"                  docker-client",[102,26320,24669],{"class":161},[102,26322,26323,26326],{"class":104,"line":1168},[102,26324,26325],{"class":217},"                  docker-client-latest",[102,26327,24669],{"class":161},[102,26329,26330,26333],{"class":104,"line":1183},[102,26331,26332],{"class":217},"                  docker-common",[102,26334,24669],{"class":161},[102,26336,26337,26340],{"class":104,"line":1189},[102,26338,26339],{"class":217},"                  docker-latest",[102,26341,24669],{"class":161},[102,26343,26344,26347],{"class":104,"line":1203},[102,26345,26346],{"class":217},"                  docker-latest-logrotate",[102,26348,24669],{"class":161},[102,26350,26351,26354],{"class":104,"line":1209},[102,26352,26353],{"class":217},"                  docker-logrotate",[102,26355,24669],{"class":161},[102,26357,26358,26361],{"class":104,"line":1300},[102,26359,26360],{"class":217},"                  docker-selinux",[102,26362,24669],{"class":161},[102,26364,26365,26368],{"class":104,"line":1306},[102,26366,26367],{"class":217},"                  docker-engine-selinux",[102,26369,24669],{"class":161},[102,26371,26372],{"class":104,"line":1318},[102,26373,26374],{"class":217},"                  docker-engine\n",[19,26376,26377],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[93,26379,26381],{"className":23812,"code":26380,"language":23814,"meta":23,"style":23},"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",[99,26382,26383,26397,26412],{"__ignoreMap":23},[102,26384,26385,26387,26389,26392,26394],{"class":104,"line":105},[102,26386,24567],{"class":1952},[102,26388,26306],{"class":217},[102,26390,26391],{"class":161}," -y",[102,26393,23824],{"class":217},[102,26395,26396],{"class":217}," dnf-plugins-core\n",[102,26398,26399,26401,26403,26406,26409],{"class":104,"line":24},[102,26400,24567],{"class":1952},[102,26402,26306],{"class":217},[102,26404,26405],{"class":217}," config-manager",[102,26407,26408],{"class":217}," addrepo",[102,26410,26411],{"class":161}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[102,26413,26414,26416,26419,26422,26425],{"class":104,"line":1168},[102,26415,24567],{"class":1952},[102,26417,26418],{"class":217}," sed",[102,26420,26421],{"class":161}," -i",[102,26423,26424],{"class":217}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[102,26426,26427],{"class":217}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26429,26430],{},"最后安装：",[93,26432,26434],{"className":23812,"code":26433,"language":23814,"meta":23,"style":23},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[99,26435,26436],{"__ignoreMap":23},[102,26437,26438,26440,26442,26444,26446,26448,26450,26452],{"class":104,"line":105},[102,26439,24567],{"class":1952},[102,26441,26306],{"class":217},[102,26443,23824],{"class":217},[102,26445,26244],{"class":217},[102,26447,26247],{"class":217},[102,26449,26250],{"class":217},[102,26451,26253],{"class":217},[102,26453,26256],{"class":217},[73,26455,26457],{"id":26456},"_22配置环境","2.2.配置环境",[21988,26459,26461,26464],{"id":26460},"_221检查-docker-服务状态",[262,26462,26463],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26466,26467],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[93,26469,26471],{"className":23812,"code":26470,"language":23814,"meta":23,"style":23},"systemctl status docker\n",[99,26472,26473],{"__ignoreMap":23},[102,26474,26475,26478,26481],{"class":104,"line":105},[102,26476,26477],{"class":1952},"systemctl",[102,26479,26480],{"class":217}," status",[102,26482,26483],{"class":217}," docker\n",[21988,26485,26487,26464],{"id":26486},"_222启动-docker-服务",[262,26488,26489],{},"2.2.2.启动 Docker 服务",[19,26491,26492],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[93,26494,26496],{"className":23812,"code":26495,"language":23814,"meta":23,"style":23},"sudo systemctl start docker\n",[99,26497,26498],{"__ignoreMap":23},[102,26499,26500,26502,26505,26507],{"class":104,"line":105},[102,26501,24567],{"class":1952},[102,26503,26504],{"class":217}," systemctl",[102,26506,4173],{"class":217},[102,26508,26483],{"class":217},[21988,26510,26512,26464],{"id":26511},"_223设置-docker-开机自启",[262,26513,26514],{},"2.2.3.设置 Docker 开机自启",[19,26516,26517],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[93,26519,26521],{"className":23812,"code":26520,"language":23814,"meta":23,"style":23},"sudo systemctl enable docker\n",[99,26522,26523],{"__ignoreMap":23},[102,26524,26525,26527,26529,26532],{"class":104,"line":105},[102,26526,24567],{"class":1952},[102,26528,26504],{"class":217},[102,26530,26531],{"class":217}," enable",[102,26533,26483],{"class":217},[21988,26535,26537,13785,26540,13785,26545,26464],{"id":26536},"_224将用户添加到-docker-组",[262,26538,26539],{},"2.2.4.将用户添加到",[262,26541,26542],{},[99,26543,26544],{},"docker",[262,26546,26547],{},"组",[19,26549,26550,26551,26553],{},"使用以下命令将当前用户添加到 ",[99,26552,26544],{}," 组：",[93,26555,26557],{"className":23812,"code":26556,"language":23814,"meta":23,"style":23},"sudo usermod -aG docker $USER\n",[99,26558,26559],{"__ignoreMap":23},[102,26560,26561,26563,26566,26569,26571],{"class":104,"line":105},[102,26562,24567],{"class":1952},[102,26564,26565],{"class":217}," usermod",[102,26567,26568],{"class":161}," -aG",[102,26570,26311],{"class":217},[102,26572,26573],{"class":112}," $USER\n",[21988,26575,26577,26464],{"id":26576},"_225退出并重新登录",[262,26578,26579],{},"2.2.5.退出并重新登录",[19,26581,26582],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[93,26584,26586],{"className":23812,"code":26585,"language":23814,"meta":23,"style":23},"newgrp docker\n",[99,26587,26588],{"__ignoreMap":23},[102,26589,26590,26593],{"class":104,"line":105},[102,26591,26592],{"class":1952},"newgrp",[102,26594,26483],{"class":217},[21988,26596,26598,26464],{"id":26597},"_226重新启动-docker-服务如果需要",[262,26599,26600],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26602,26603],{},"确保 Docker 服务正在运行，可以使用以下命令：",[93,26605,26606],{"className":23812,"code":26495,"language":23814,"meta":23,"style":23},[99,26607,26608],{"__ignoreMap":23},[102,26609,26610,26612,26614,26616],{"class":104,"line":105},[102,26611,24567],{"class":1952},[102,26613,26504],{"class":217},[102,26615,4173],{"class":217},[102,26617,26483],{"class":217},[21988,26619,26621,26464],{"id":26620},"_227重启电脑后检查-docker-服务状态",[262,26622,26623],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26625,26626],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[93,26628,26630],{"className":23812,"code":26629,"language":23814,"meta":23,"style":23},"sudo reboot\nsystemctl status docker\n",[99,26631,26632,26639],{"__ignoreMap":23},[102,26633,26634,26636],{"class":104,"line":105},[102,26635,24567],{"class":1952},[102,26637,26638],{"class":217}," reboot\n",[102,26640,26641,26643,26645],{"class":104,"line":24},[102,26642,26477],{"class":1952},[102,26644,26480],{"class":217},[102,26646,26483],{"class":217},[19,26648,26649],{},[1451,26650],{"alt":23,"src":26651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26653,26654],{},"第三行显示enabled说明开机自启动成功",[19,26656,26657],{},"按q退出",[73,26659,26661],{"id":26660},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26663,26664],{},"优先使用linux来使用docker是比较好的",[19,26666,26667],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26669,26670],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26672,26673,26674],{},"官方下载安装:",[351,26675,26676],{"href":26676,"rel":26677},"https:\u002F\u002Fwww.docker.com\u002F",[23855],[19,26679,26680],{},"Windows的Docker显卡直通与USB直通:",[19,26682,26683],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26685,26686],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26688,26689],{},[1451,26690],{"alt":23,"src":26691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26693,26694],{},[1451,26695],{"alt":23,"src":26696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26698,26699],{},[1451,26700],{"alt":23,"src":26701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5116,26703,26704],{},"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":23,"searchDepth":24,"depth":24,"links":26706},[26707,26708,26709],{"id":25984,"depth":1168,"text":25985},{"id":26456,"depth":1168,"text":26457},{"id":26660,"depth":1168,"text":26661},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25976,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26716,"title":26717,"body":26718,"description":26725,"extension":28,"meta":27418,"navigation":30,"path":27419,"seo":27420,"stem":27421,"__hash__":27422},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26719,"toc":27412},[26720,26723,26726,26730,26735,26740,26743,26771,26776,26785,26788,26793,26797,26804,26809,26815,26819,26822,26826,26831,26923,26928,26946,26951,26972,26977,26993,26997,27002,27031,27036,27082,27087,27131,27139,27156,27161,27177,27182,27196,27199,27202,27205,27208,27237,27240,27245,27249,27252,27255,27261,27264,27267,27270,27332,27339,27344,27347,27365,27369,27372,27389,27392,27395,27409],[10,26721,26717],{"id":26722},"_3docker直通",[19,26724,26725],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[73,26727,26729],{"id":26728},"_31usb直通","3.1.USB直通",[19,26731,26732],{},[1451,26733],{"alt":23,"src":26734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[56,26736,26737],{},[59,26738,26739],{},"方法一(不是很推荐新手)：",[19,26741,26742],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[93,26744,26746],{"className":23812,"code":26745,"language":23814,"meta":23,"style":23},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[99,26747,26748,26756,26761],{"__ignoreMap":23},[102,26749,26750,26753],{"class":104,"line":105},[102,26751,26752],{"class":1952},"ls",[102,26754,26755],{"class":217}," \u002Fdev\n",[102,26757,26758],{"class":104,"line":24},[102,26759,26760],{"class":171},"#例如\n",[102,26762,26763,26766,26768],{"class":104,"line":1168},[102,26764,26765],{"class":112},"--device",[102,26767,158],{"class":108},[102,26769,26770],{"class":217},"\u002Fdev\u002Ftty_USB0\n",[56,26772,26773],{"start":24},[59,26774,26775],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[93,26777,26779],{"className":23812,"code":26778,"language":23814,"meta":23,"style":23},"--privileged\n",[99,26780,26781],{"__ignoreMap":23},[102,26782,26783],{"class":104,"line":105},[102,26784,26778],{"class":1952},[19,26786,26787],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,26789,26790],{},[1451,26791],{"alt":23,"src":26792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[73,26794,26796],{"id":26795},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,26798,26799,26800,26803],{},"NVIDIA Container Toolkit使用户 ",[262,26801,26802],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,26805,26806],{},[1451,26807],{"alt":23,"src":26808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,26810,26811],{},[351,26812,26813],{"href":26813,"rel":26814},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23855],[21988,26816,26818],{"id":26817},"_321安装","3.2.1.安装",[19,26820,26821],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22900,26823,26825],{"id":26824},"_3211ubuntu","3.2.1.1.Ubuntu",[56,26827,26828],{},[59,26829,26830],{},"配置存储库 并更新",[93,26832,26834],{"className":23812,"code":26833,"language":23814,"meta":23,"style":23},"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",[99,26835,26836,26865,26885,26897,26909,26915],{"__ignoreMap":23},[102,26837,26838,26841,26844,26847,26849,26851,26854,26857,26860,26863],{"class":104,"line":105},[102,26839,26840],{"class":1952},"curl",[102,26842,26843],{"class":161}," -fsSL",[102,26845,26846],{"class":217}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[102,26848,25100],{"class":108},[102,26850,26064],{"class":1952},[102,26852,26853],{"class":217}," gpg",[102,26855,26856],{"class":161}," --dearmor",[102,26858,26859],{"class":161}," -o",[102,26861,26862],{"class":217}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[102,26864,24669],{"class":161},[102,26866,26867,26870,26872,26875,26878,26881,26883],{"class":104,"line":24},[102,26868,26869],{"class":112},"  && ",[102,26871,26840],{"class":1952},[102,26873,26874],{"class":161}," -s",[102,26876,26877],{"class":161}," -L",[102,26879,26880],{"class":217}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[102,26882,25100],{"class":108},[102,26884,24669],{"class":161},[102,26886,26887,26890,26893,26895],{"class":104,"line":1168},[102,26888,26889],{"class":1952},"    sed",[102,26891,26892],{"class":217}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[102,26894,25100],{"class":108},[102,26896,24669],{"class":161},[102,26898,26899,26902,26904,26907],{"class":104,"line":1183},[102,26900,26901],{"class":1952},"    sudo",[102,26903,26207],{"class":217},[102,26905,26906],{"class":217}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[102,26908,24669],{"class":161},[102,26910,26911,26913],{"class":104,"line":1189},[102,26912,26869],{"class":112},[102,26914,26166],{"class":161},[102,26916,26917,26919,26921],{"class":104,"line":1203},[102,26918,26901],{"class":1952},[102,26920,26067],{"class":217},[102,26922,26233],{"class":217},[56,26924,26925],{"start":24},[59,26926,26927],{},"安装nvidia-docker2",[93,26929,26931],{"className":23812,"code":26930,"language":23814,"meta":23,"style":23},"sudo apt-get install -y nvidia-docker2\n",[99,26932,26933],{"__ignoreMap":23},[102,26934,26935,26937,26939,26941,26943],{"class":104,"line":105},[102,26936,24567],{"class":1952},[102,26938,26067],{"class":217},[102,26940,23824],{"class":217},[102,26942,26391],{"class":161},[102,26944,26945],{"class":217}," nvidia-docker2\n",[56,26947,26948],{"start":1168},[59,26949,26950],{},"使用nvidia-ctk命令配置container runtime",[93,26952,26954],{"className":23812,"code":26953,"language":23814,"meta":23,"style":23},"sudo nvidia-ctk runtime configure --runtime=docker\n",[99,26955,26956],{"__ignoreMap":23},[102,26957,26958,26960,26963,26966,26969],{"class":104,"line":105},[102,26959,24567],{"class":1952},[102,26961,26962],{"class":217}," nvidia-ctk",[102,26964,26965],{"class":217}," runtime",[102,26967,26968],{"class":217}," configure",[102,26970,26971],{"class":161}," --runtime=docker\n",[56,26973,26974],{"start":1183},[59,26975,26976],{},"重启docker服务:",[93,26978,26980],{"className":23812,"code":26979,"language":23814,"meta":23,"style":23},"sudo systemctl restart docker\n",[99,26981,26982],{"__ignoreMap":23},[102,26983,26984,26986,26988,26991],{"class":104,"line":105},[102,26985,24567],{"class":1952},[102,26987,26504],{"class":217},[102,26989,26990],{"class":217}," restart",[102,26992,26483],{"class":217},[22900,26994,26996],{"id":26995},"_3212fedora","3.2.1.2.Fedora",[56,26998,26999],{},[59,27000,27001],{},"配置存储库",[93,27003,27005],{"className":23812,"code":27004,"language":23814,"meta":23,"style":23},"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",[99,27006,27007,27022],{"__ignoreMap":23},[102,27008,27009,27011,27013,27015,27018,27020],{"class":104,"line":105},[102,27010,26840],{"class":1952},[102,27012,26874],{"class":161},[102,27014,26877],{"class":161},[102,27016,27017],{"class":217}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[102,27019,25100],{"class":108},[102,27021,24669],{"class":161},[102,27023,27024,27026,27028],{"class":104,"line":24},[102,27025,24567],{"class":1952},[102,27027,26207],{"class":217},[102,27029,27030],{"class":217}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[56,27032,27033],{"start":24},[59,27034,27035],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[93,27037,27039],{"className":23812,"code":27038,"language":23814,"meta":23,"style":23},"# 如果是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",[99,27040,27041,27046,27060,27064,27069],{"__ignoreMap":23},[102,27042,27043],{"class":104,"line":105},[102,27044,27045],{"class":171},"# 如果是RHEL或者Rocky（DNF4）\n",[102,27047,27048,27050,27052,27054,27057],{"class":104,"line":24},[102,27049,24567],{"class":1952},[102,27051,26306],{"class":217},[102,27053,26405],{"class":217},[102,27055,27056],{"class":161}," --add-repo",[102,27058,27059],{"class":217}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[102,27061,27062],{"class":104,"line":1168},[102,27063,2389],{"emptyLinePlaceholder":30},[102,27065,27066],{"class":104,"line":1183},[102,27067,27068],{"class":171},"# 如果是Feodra41+（DNF5）\n",[102,27070,27071,27073,27075,27077,27079],{"class":104,"line":1189},[102,27072,24567],{"class":1952},[102,27074,26306],{"class":217},[102,27076,26405],{"class":217},[102,27078,26408],{"class":217},[102,27080,27081],{"class":161}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[56,27083,27084],{"start":1168},[59,27085,27086],{},"安装NVIDIA Container Toolki包",[93,27088,27090],{"className":23812,"code":27089,"language":23814,"meta":23,"style":23},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[99,27091,27092,27097,27110,27114,27119],{"__ignoreMap":23},[102,27093,27094],{"class":104,"line":105},[102,27095,27096],{"class":171},"# 如果是RHEL或者Rocky\n",[102,27098,27099,27101,27103,27105,27107],{"class":104,"line":24},[102,27100,24567],{"class":1952},[102,27102,26306],{"class":217},[102,27104,23824],{"class":217},[102,27106,26391],{"class":161},[102,27108,27109],{"class":217}," nvidia-container-toolkit\n",[102,27111,27112],{"class":104,"line":1168},[102,27113,2389],{"emptyLinePlaceholder":30},[102,27115,27116],{"class":104,"line":1183},[102,27117,27118],{"class":171},"# 如果是Fedora\n",[102,27120,27121,27123,27125,27127,27129],{"class":104,"line":1189},[102,27122,24567],{"class":1952},[102,27124,26306],{"class":217},[102,27126,23824],{"class":217},[102,27128,26391],{"class":161},[102,27130,27109],{"class":217},[56,27132,27133],{"start":1183},[59,27134,27135,27136,27138],{},"安装nvidia-docker2 ： 在Fedora上使用",[99,27137,26281],{},"进行安装",[93,27140,27142],{"className":23812,"code":27141,"language":23814,"meta":23,"style":23},"sudo dnf install -y nvidia-docker2\n",[99,27143,27144],{"__ignoreMap":23},[102,27145,27146,27148,27150,27152,27154],{"class":104,"line":105},[102,27147,24567],{"class":1952},[102,27149,26306],{"class":217},[102,27151,23824],{"class":217},[102,27153,26391],{"class":161},[102,27155,26945],{"class":217},[56,27157,27158],{"start":1189},[59,27159,27160],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[93,27162,27163],{"className":23812,"code":26953,"language":23814,"meta":23,"style":23},[99,27164,27165],{"__ignoreMap":23},[102,27166,27167,27169,27171,27173,27175],{"class":104,"line":105},[102,27168,24567],{"class":1952},[102,27170,26962],{"class":217},[102,27172,26965],{"class":217},[102,27174,26968],{"class":217},[102,27176,26971],{"class":161},[56,27178,27179],{"start":1203},[59,27180,27181],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[93,27183,27184],{"className":23812,"code":26979,"language":23814,"meta":23,"style":23},[99,27185,27186],{"__ignoreMap":23},[102,27187,27188,27190,27192,27194],{"class":104,"line":105},[102,27189,24567],{"class":1952},[102,27191,26504],{"class":217},[102,27193,26990],{"class":217},[102,27195,26483],{"class":217},[19,27197,27198],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27200,27201],{},"方法：",[19,27203,27204],{},"1️⃣nvidia-smi",[19,27206,27207],{},"2️⃣运行nvidia cuda 容器进行测试",[93,27209,27211],{"className":23812,"code":27210,"language":23814,"meta":23,"style":23},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[99,27212,27213],{"__ignoreMap":23},[102,27214,27215,27217,27219,27222,27225,27228,27231,27234],{"class":104,"line":105},[102,27216,24567],{"class":1952},[102,27218,26311],{"class":217},[102,27220,27221],{"class":217}," run",[102,27223,27224],{"class":161}," --rm",[102,27226,27227],{"class":161}," --gpus",[102,27229,27230],{"class":217}," all",[102,27232,27233],{"class":217}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[102,27235,27236],{"class":217}," nvidia-smi\n",[19,27238,27239],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27241,27242],{},[1451,27243],{"alt":23,"src":27244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[73,27246,27248],{"id":27247},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27250,27251],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27253,27254],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27256,27257],{},[351,27258,27259],{"href":27259,"rel":27260},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23855],[19,27262,27263],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27265,27266],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27268,27269],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[250,27271,27272,27288],{},[253,27273,27274],{},[256,27275,27276,27279,27282,27285],{},[259,27277,27278],{"align":23726},"镜像类型",[259,27280,27281],{"align":23726},"适用场景",[259,27283,27284],{"align":23726},"示例标签",[259,27286,27287],{"align":23726},"大小",[297,27289,27290,27304,27318],{},[256,27291,27292,27295,27298,27301],{},[302,27293,27294],{"align":23726},"base",[302,27296,27297],{"align":23726},"仅需 CUDA 运行时库",[302,27299,27300],{"align":23726},"12.4.0-base-ubuntu22.04",[302,27302,27303],{"align":23726},"~240MB",[256,27305,27306,27309,27312,27315],{},[302,27307,27308],{"align":23726},"runtime",[302,27310,27311],{"align":23726},"部署编译后的应用（含数学库）",[302,27313,27314],{"align":23726},"12.4.0-runtime-ubuntu22.04",[302,27316,27317],{"align":23726},"~2GB",[256,27319,27320,27323,27326,27329],{},[302,27321,27322],{"align":23726},"devel",[302,27324,27325],{"align":23726},"开发环境（含编译工具）",[302,27327,27328],{"align":23726},"12.4.0-devel-ubuntu22.04",[302,27330,27331],{"align":23726},"~3GB",[19,27333,27334,27335,27338],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[99,27336,27337],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27340,27341],{},[1451,27342],{"alt":23,"src":27343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27345,27346],{},"在dockerfile里就可以开头这么写：",[93,27348,27350],{"className":23812,"code":27349,"language":23814,"meta":23,"style":23},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[99,27351,27352,27357],{"__ignoreMap":23},[102,27353,27354],{"class":104,"line":105},[102,27355,27356],{"class":171},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[102,27358,27359,27362],{"class":104,"line":24},[102,27360,27361],{"class":1952},"FROM",[102,27363,27364],{"class":217}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[73,27366,27368],{"id":27367},"_34配置以太网","3.4.配置以太网",[19,27370,27371],{},"指定网络模式",[93,27373,27375],{"className":23812,"code":27374,"language":23814,"meta":23,"style":23},"--net=host \\\n",[99,27376,27377],{"__ignoreMap":23},[102,27378,27379,27382,27384,27387],{"class":104,"line":105},[102,27380,27381],{"class":112},"--net",[102,27383,158],{"class":108},[102,27385,27386],{"class":217},"host",[102,27388,24669],{"class":1952},[19,27390,27391],{},"启动参数里加上这行即可。具体在下方",[19,27393,27394],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1120,27396,27397,27400,27403,27406],{},[59,27398,27399],{},"--net=bridge:默认选项，表示连接到默认的网桥",[59,27401,27402],{},"--net=host:容器使用宿主机的网络",[59,27404,27405],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[59,27407,27408],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5116,27410,27411],{},"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":23,"searchDepth":24,"depth":24,"links":27413},[27414,27415,27416,27417],{"id":26728,"depth":1168,"text":26729},{"id":26795,"depth":1168,"text":26796},{"id":27247,"depth":1168,"text":27248},{"id":27367,"depth":1168,"text":27368},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26717,"description":26725},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27424,"title":27425,"body":27426,"description":27433,"extension":28,"meta":27439,"navigation":30,"path":27440,"seo":27441,"stem":27442,"__hash__":27443},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27427,"toc":27437},[27428,27431,27434],[10,27429,27425],{"id":27430},"_4dockerhub换源",[19,27432,27433],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27435,27436],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":23,"searchDepth":24,"depth":24,"links":27438},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27425,"description":27433},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27445,"title":27446,"body":27447,"description":23,"extension":28,"meta":28459,"navigation":30,"path":28460,"seo":28461,"stem":28462,"__hash__":28463},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27448,"toc":28454},[27449,27452,27456,27462,27466,27469,27809,27812,27815,27818,27823,27828,27831,27834,27837,27840,27859,27862,27873,27879,28061,28071,28087,28350,28352,28377,28392,28401,28451],[10,27450,27446],{"id":27451},"_5docker命令学习",[73,27453,27455],{"id":27454},"_51参考文档","5.1.参考文档",[19,27457,27458],{},[351,27459,27460],{"href":27460,"rel":27461},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23855],[73,27463,27465],{"id":27464},"_52常用命令","5.2.常用命令",[19,27467,27468],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[250,27470,27471,27484],{},[253,27472,27473],{},[256,27474,27475,27478,27481],{},[259,27476,27477],{"align":23726},"命令",[259,27479,27480],{"align":23726},"描述",[259,27482,27483],{"align":23726},"示例",[297,27485,27486,27497,27508,27519,27530,27541,27552,27563,27573,27584,27595,27606,27616,27627,27638,27649,27659,27669,27679,27689,27700,27711,27722,27733,27744,27755,27765,27776,27787,27798],{},[256,27487,27488,27491,27494],{},[302,27489,27490],{"align":23726},"docker run",[302,27492,27493],{"align":23726},"创建并启动一个新的容器。",[302,27495,27496],{"align":23726},"docker run -it ubuntu bash",[256,27498,27499,27502,27505],{},[302,27500,27501],{"align":23726},"docker build",[302,27503,27504],{"align":23726},"通过指定的 Dockerfile 创建一个新的镜像。",[302,27506,27507],{"align":23726},"docker build -t myimage .",[256,27509,27510,27513,27516],{},[302,27511,27512],{"align":23726},"docker pull",[302,27514,27515],{"align":23726},"从 Docker 仓库拉取镜像。",[302,27517,27518],{"align":23726},"docker pull ubuntu",[256,27520,27521,27524,27527],{},[302,27522,27523],{"align":23726},"docker push",[302,27525,27526],{"align":23726},"将本地镜像推送到 Docker 仓库。",[302,27528,27529],{"align":23726},"docker push myimage",[256,27531,27532,27535,27538],{},[302,27533,27534],{"align":23726},"docker stop",[302,27536,27537],{"align":23726},"停止一个正在运行的容器。",[302,27539,27540],{"align":23726},"docker stop container_id",[256,27542,27543,27546,27549],{},[302,27544,27545],{"align":23726},"docker start",[302,27547,27548],{"align":23726},"启动一个已经存在的容器。",[302,27550,27551],{"align":23726},"docker start container_id",[256,27553,27554,27557,27560],{},[302,27555,27556],{"align":23726},"docker restart",[302,27558,27559],{"align":23726},"重新启动容器。",[302,27561,27562],{"align":23726},"docker restart container_id",[256,27564,27565,27568,27571],{},[302,27566,27567],{"align":23726},"docker ps",[302,27569,27570],{"align":23726},"列出当前正在运行的容器。",[302,27572,27567],{"align":23726},[256,27574,27575,27578,27581],{},[302,27576,27577],{"align":23726},"docker rm",[302,27579,27580],{"align":23726},"删除一个或多个停止的容器。",[302,27582,27583],{"align":23726},"docker rm container_id",[256,27585,27586,27589,27592],{},[302,27587,27588],{"align":23726},"docker exec",[302,27590,27591],{"align":23726},"在一个正在运行的容器中执行命令。",[302,27593,27594],{"align":23726},"docker exec -it container_id bash",[256,27596,27597,27600,27603],{},[302,27598,27599],{"align":23726},"docker logs",[302,27601,27602],{"align":23726},"查看容器的日志输出。",[302,27604,27605],{"align":23726},"docker logs container_id",[256,27607,27608,27611,27614],{},[302,27609,27610],{"align":23726},"docker images",[302,27612,27613],{"align":23726},"列出本地所有镜像。",[302,27615,27610],{"align":23726},[256,27617,27618,27621,27624],{},[302,27619,27620],{"align":23726},"docker rmi",[302,27622,27623],{"align":23726},"删除一个或多个镜像。",[302,27625,27626],{"align":23726},"docker rmi myimage",[256,27628,27629,27632,27635],{},[302,27630,27631],{"align":23726},"docker network",[302,27633,27634],{"align":23726},"管理 Docker 网络。",[302,27636,27637],{"align":23726},"docker network ls",[256,27639,27640,27643,27646],{},[302,27641,27642],{"align":23726},"docker volume",[302,27644,27645],{"align":23726},"管理 Docker 数据卷。",[302,27647,27648],{"align":23726},"docker volume ls",[256,27650,27651,27654,27657],{},[302,27652,27653],{"align":23726},"docker-compose up",[302,27655,27656],{"align":23726},"启动 docker-compose.yml 中定义的所有服务。",[302,27658,27653],{"align":23726},[256,27660,27661,27664,27667],{},[302,27662,27663],{"align":23726},"docker-compose down",[302,27665,27666],{"align":23726},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[302,27668,27663],{"align":23726},[256,27670,27671,27674,27677],{},[302,27672,27673],{"align":23726},"docker info",[302,27675,27676],{"align":23726},"显示 Docker 系统的详细信息。",[302,27678,27673],{"align":23726},[256,27680,27681,27684,27687],{},[302,27682,27683],{"align":23726},"docker stats",[302,27685,27686],{"align":23726},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[302,27688,27683],{"align":23726},[256,27690,27691,27694,27697],{},[302,27692,27693],{"align":23726},"docker inspect",[302,27695,27696],{"align":23726},"查看容器或镜像的详细信息（JSON 格式）。",[302,27698,27699],{"align":23726},"docker inspect container_id",[256,27701,27702,27705,27708],{},[302,27703,27704],{"align":23726},"docker save",[302,27706,27707],{"align":23726},"将一个镜像保存为 tar 文件。",[302,27709,27710],{"align":23726},"docker save -o myimage.tar myimage",[256,27712,27713,27716,27719],{},[302,27714,27715],{"align":23726},"docker load",[302,27717,27718],{"align":23726},"从 tar 文件中加载镜像。",[302,27720,27721],{"align":23726},"docker load -i myimage.tar",[256,27723,27724,27727,27730],{},[302,27725,27726],{"align":23726},"docker tag",[302,27728,27729],{"align":23726},"为镜像添加标签（tag）。",[302,27731,27732],{"align":23726},"docker tag myimage myimage:v1",[256,27734,27735,27738,27741],{},[302,27736,27737],{"align":23726},"docker buildx build",[302,27739,27740],{"align":23726},"使用 Buildx 构建多架构镜像。",[302,27742,27743],{"align":23726},"docker buildx build -t myimage .",[256,27745,27746,27749,27752],{},[302,27747,27748],{"align":23726},"docker buildx create",[302,27750,27751],{"align":23726},"创建一个新的 Buildx 构建实例。",[302,27753,27754],{"align":23726},"docker buildx create –use",[256,27756,27757,27760,27763],{},[302,27758,27759],{"align":23726},"docker buildx ls",[302,27761,27762],{"align":23726},"列出所有可用的 Buildx 构建实例。",[302,27764,27759],{"align":23726},[256,27766,27767,27770,27773],{},[302,27768,27769],{"align":23726},"docker buildx use",[302,27771,27772],{"align":23726},"设置当前的 Buildx 构建实例。",[302,27774,27775],{"align":23726},"docker buildx use mybuilder",[256,27777,27778,27781,27784],{},[302,27779,27780],{"align":23726},"docker buildx bake",[302,27782,27783],{"align":23726},"使用 Bake 文件批量构建镜像。",[302,27785,27786],{"align":23726},"docker buildx bake -f bake.hcl",[256,27788,27789,27792,27795],{},[302,27790,27791],{"align":23726},"docker buildx build –push",[302,27793,27794],{"align":23726},"构建镜像并推送到镜像仓库。",[302,27796,27797],{"align":23726},"docker buildx build –push -t myimage .",[256,27799,27800,27803,27806],{},[302,27801,27802],{"align":23726},"docker buildx build –platform",[302,27804,27805],{"align":23726},"构建镜像并为多个平台生成支持。",[302,27807,27808],{"align":23726},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,27810,27811],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,27813,27814],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,27816,27817],{},"docker images 可以查看已经下载的镜像",[19,27819,27820],{},[1451,27821],{"alt":23,"src":27822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,27824,27825],{},[262,27826,27827],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,27829,27830],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,27832,27833],{},"docker container logs 查看容器日志",[19,27835,27836],{},"docker top 查看容器里的进程",[19,27838,27839],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[93,27841,27843],{"className":23812,"code":27842,"language":23814,"meta":23,"style":23},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[99,27844,27845],{"__ignoreMap":23},[102,27846,27847,27850,27853,27856],{"class":104,"line":105},[102,27848,27849],{"class":1952},"如：docker",[102,27851,27852],{"class":217}," cp",[102,27854,27855],{"class":217}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[102,27857,27858],{"class":217}," \u002Fmydata\u002Fnginx\n",[19,27860,27861],{},"docker run时在启动容器的时候会有几个常用的选项：",[1120,27863,27864,27867,27870],{},[59,27865,27866],{},"-d选项：表示后台运行",[59,27868,27869],{},"-P选项：随机端口映射",[59,27871,27872],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[73,27874,27876],{"id":27875},"_53run命令的参数非常重要",[262,27877,27878],{},"5.3.run命令的参数（非常重要）",[250,27880,27881,27894],{},[253,27882,27883],{},[256,27884,27885,27888,27891],{},[259,27886,27887],{"align":23726},"参数\u002F配置",[259,27889,27890],{"align":23726},"功能说明",[259,27892,27893],{"align":23726},"重要性与参考依据",[297,27895,27896,27907,27918,27929,27940,27951,27962,27973,27984,27995,28006,28017,28028,28039,28050],{},[256,27897,27898,27901,27904],{},[302,27899,27900],{"align":23726},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[302,27902,27903],{"align":23726},"指定容器名称，便于后续管理",[302,27905,27906],{"align":23726},"替代随机生成的容器名。",[256,27908,27909,27912,27915],{},[302,27910,27911],{"align":23726},"–gpus all",[302,27913,27914],{"align":23726},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[302,27916,27917],{"align":23726},"用于CUDA加速等GPU依赖任务。",[256,27919,27920,27923,27926],{},[302,27921,27922],{"align":23726},"-e NVIDIA_DRIVER_CAPABILITIES=all",[302,27924,27925],{"align":23726},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[302,27927,27928],{"align":23726},"确保容器内GPU功能完整67。",[256,27930,27931,27934,27937],{},[302,27932,27933],{"align":23726},"-dit",[302,27935,27936],{"align":23726},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[302,27938,27939],{"align":23726},"允许容器在后台运行并支持交互操作。",[256,27941,27942,27945,27948],{},[302,27943,27944],{"align":23726},"–privileged",[302,27946,27947],{"align":23726},"赋予容器完全主机权限（可访问设备、内核模块等）",[302,27949,27950],{"align":23726},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[256,27952,27953,27956,27959],{},[302,27954,27955],{"align":23726},"–net=host",[302,27957,27958],{"align":23726},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[302,27960,27961],{"align":23726},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[256,27963,27964,27967,27970],{},[302,27965,27966],{"align":23726},"–group-add audio–group-add video–group-add dialout",[302,27968,27969],{"align":23726},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[302,27971,27972],{"align":23726},"避免权限问题（如避免无法调用摄像头、麦克风）。",[256,27974,27975,27978,27981],{},[302,27976,27977],{"align":23726},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[302,27979,27980],{"align":23726},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[302,27982,27983],{"align":23726},"支持容器内运行图形界面应用（如OpenCV可视化）。",[256,27985,27986,27989,27992],{},[302,27987,27988],{"align":23726},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[302,27990,27991],{"align":23726},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[302,27993,27994],{"align":23726},"实现容器内图形显示。",[256,27996,27997,28000,28003],{},[302,27998,27999],{"align":23726},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[302,28001,28002],{"align":23726},"挂载X11认证文件（只读）",[302,28004,28005],{"align":23726},"确保容器有权连接宿主机显示服务。",[256,28007,28008,28011,28014],{},[302,28009,28010],{"align":23726},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[302,28012,28013],{"align":23726},"挂载Wayland显示协议相关目录",[302,28015,28016],{"align":23726},"支持Wayland协议的图形显示。",[256,28018,28019,28022,28025],{},[302,28020,28021],{"align":23726},"–ulimit nofile=1024:524288",[302,28023,28024],{"align":23726},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[302,28026,28027],{"align":23726},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[256,28029,28030,28033,28036],{},[302,28031,28032],{"align":23726},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[302,28034,28035],{"align":23726},"挂载宿主机用户目录到容器内同名路径",[302,28037,28038],{"align":23726},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[256,28040,28041,28044,28047],{},[302,28042,28043],{"align":23726},"-w \u002Fhome\u002Ftungchiahui",[302,28045,28046],{"align":23726},"设置容器启动后的默认工作目录",[302,28048,28049],{"align":23726},"直接进入项目路径，方便执行命令2324。",[256,28051,28052,28055,28058],{},[302,28053,28054],{"align":23726},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[302,28056,28057],{"align":23726},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[302,28059,28060],{"align":23726},"提供预配置的深度学习与机器人开发环境。",[19,28062,28063,28064,28066,28067,28070],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[99,28065,24567],{},"加不加",[99,28068,28069],{},"sudo -E","都无所谓。",[19,28072,28073,28074,28076,28077,28079,28080,28083,28084,28086],{},"用户已经被加到docker组了，不用",[99,28075,24567],{},"也行跑，其次，",[99,28078,24567],{},"运行的话，你的",[99,28081,28082],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[99,28085,28082],{},"更不可能变了。",[93,28088,28090],{"className":23812,"code":28089,"language":23814,"meta":23,"style":23},"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",[99,28091,28092,28105,28115,28125,28137,28144,28151,28158,28168,28177,28186,28200,28212,28224,28233,28243,28252,28267,28300,28327,28338,28345],{"__ignoreMap":23},[102,28093,28094,28096,28098,28100,28103],{"class":104,"line":105},[102,28095,24567],{"class":1952},[102,28097,26311],{"class":217},[102,28099,27221],{"class":217},[102,28101,28102],{"class":161}," --name=ros_opencv_cuda",[102,28104,24669],{"class":161},[102,28106,28107,28110,28113],{"class":104,"line":24},[102,28108,28109],{"class":112},"--gpus ",[102,28111,28112],{"class":217},"all",[102,28114,24669],{"class":161},[102,28116,28117,28120,28123],{"class":104,"line":1168},[102,28118,28119],{"class":112},"-e ",[102,28121,28122],{"class":217},"NVIDIA_DRIVER_CAPABILITIES=all",[102,28124,24669],{"class":161},[102,28126,28127,28129,28132,28135],{"class":104,"line":1183},[102,28128,28119],{"class":112},[102,28130,28131],{"class":217},"DISPLAY=",[102,28133,28134],{"class":112},"$DISPLAY ",[102,28136,26166],{"class":161},[102,28138,28139,28142],{"class":104,"line":1189},[102,28140,28141],{"class":112},"-dit ",[102,28143,26166],{"class":161},[102,28145,28146,28149],{"class":104,"line":1203},[102,28147,28148],{"class":112},"--privileged ",[102,28150,26166],{"class":161},[102,28152,28153,28156],{"class":104,"line":1209},[102,28154,28155],{"class":112},"--net=host ",[102,28157,26166],{"class":161},[102,28159,28160,28163,28166],{"class":104,"line":1300},[102,28161,28162],{"class":112},"--group-add ",[102,28164,28165],{"class":217},"audio",[102,28167,24669],{"class":161},[102,28169,28170,28172,28175],{"class":104,"line":1306},[102,28171,28162],{"class":112},[102,28173,28174],{"class":217},"video",[102,28176,24669],{"class":161},[102,28178,28179,28181,28184],{"class":104,"line":1318},[102,28180,28162],{"class":112},[102,28182,28183],{"class":217},"dialout",[102,28185,24669],{"class":161},[102,28187,28188,28190,28193,28195,28198],{"class":104,"line":1601},[102,28189,28119],{"class":112},[102,28191,28192],{"class":217},"XAUTHORITY=",[102,28194,28082],{"class":112},[102,28196,28197],{"class":217},"\u002F.Xauthority",[102,28199,24669],{"class":161},[102,28201,28202,28204,28207,28210],{"class":104,"line":1606},[102,28203,28119],{"class":112},[102,28205,28206],{"class":217},"WAYLAND_DISPLAY=",[102,28208,28209],{"class":112},"$WAYLAND_DISPLAY ",[102,28211,26166],{"class":161},[102,28213,28214,28216,28219,28222],{"class":104,"line":1612},[102,28215,28119],{"class":112},[102,28217,28218],{"class":217},"XDG_RUNTIME_DIR=",[102,28220,28221],{"class":112},"$XDG_RUNTIME_DIR ",[102,28223,26166],{"class":161},[102,28225,28226,28228,28231],{"class":104,"line":1617},[102,28227,28119],{"class":112},[102,28229,28230],{"class":217},"QT_QPA_PLATFORM=xcb",[102,28232,24669],{"class":161},[102,28234,28235,28238,28241],{"class":104,"line":1631},[102,28236,28237],{"class":112},"-v ",[102,28239,28240],{"class":217},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[102,28242,24669],{"class":161},[102,28244,28245,28247,28250],{"class":104,"line":1636},[102,28246,28237],{"class":112},[102,28248,28249],{"class":217},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[102,28251,24669],{"class":161},[102,28253,28254,28257,28260,28262,28265],{"class":104,"line":1642},[102,28255,28256],{"class":112},"-v $HOME",[102,28258,28259],{"class":217},"\u002F.Xauthority:",[102,28261,28082],{"class":112},[102,28263,28264],{"class":217},"\u002F.Xauthority:ro",[102,28266,24669],{"class":161},[102,28268,28269,28271,28274,28276,28279,28282,28284,28287,28289,28291,28293,28295,28298],{"class":104,"line":1663},[102,28270,28237],{"class":112},[102,28272,28273],{"class":217},"\u002Frun\u002Fuser\u002F",[102,28275,25090],{"class":112},[102,28277,28278],{"class":1952},"id",[102,28280,28281],{"class":161}," -u",[102,28283,542],{"class":112},[102,28285,28286],{"class":217},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[102,28288,25090],{"class":112},[102,28290,28278],{"class":1952},[102,28292,28281],{"class":161},[102,28294,542],{"class":112},[102,28296,28297],{"class":217},"\u002Fwayland-0",[102,28299,24669],{"class":161},[102,28301,28302,28304,28306,28308,28310,28312,28314,28317,28319,28321,28323,28325],{"class":104,"line":1668},[102,28303,28237],{"class":112},[102,28305,28273],{"class":217},[102,28307,25090],{"class":112},[102,28309,28278],{"class":1952},[102,28311,28281],{"class":161},[102,28313,542],{"class":112},[102,28315,28316],{"class":217},":\u002Frun\u002Fuser\u002F",[102,28318,25090],{"class":112},[102,28320,28278],{"class":1952},[102,28322,28281],{"class":161},[102,28324,13704],{"class":112},[102,28326,26166],{"class":161},[102,28328,28329,28331,28333,28336],{"class":104,"line":1682},[102,28330,28256],{"class":112},[102,28332,972],{"class":217},[102,28334,28335],{"class":112},"$HOME ",[102,28337,26166],{"class":161},[102,28339,28340,28343],{"class":104,"line":1687},[102,28341,28342],{"class":112},"-w $HOME ",[102,28344,26166],{"class":161},[102,28346,28347],{"class":104,"line":1716},[102,28348,28349],{"class":112},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28351,9015],{},[56,28353,28354,28362,28365,28368],{},[59,28355,28356,13785,28358,28361],{},[99,28357,28122],{},[99,28359,28360],{},"--gpus all","没有英伟达显卡请注释。",[59,28363,28364],{},"--name后面请自己为容器起名。",[59,28366,28367],{},"最后一行仓库名称请你自己找对应的镜像填上。",[59,28369,28370,28371,28376],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23543,28372,28373],{},[262,28374,28375],{},"请不要加","。",[93,28378,28380],{"className":23812,"code":28379,"language":23814,"meta":23,"style":23},"--ulimit nofile=1024:524288 \\\n",[99,28381,28382],{"__ignoreMap":23},[102,28383,28384,28387,28390],{"class":104,"line":105},[102,28385,28386],{"class":1952},"--ulimit",[102,28388,28389],{"class":217}," nofile=1024:524288",[102,28391,24669],{"class":161},[19,28393,28394,28395,28400],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23543,28396,28397],{},[262,28398,28399],{},"不建议","**.**",[93,28402,28404],{"className":23812,"code":28403,"language":23814,"meta":23,"style":23},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[99,28405,28406,28433,28442],{"__ignoreMap":23},[102,28407,28408,28411,28414,28416,28418,28420,28422,28424,28426,28429,28431],{"class":104,"line":105},[102,28409,28410],{"class":1952},"--user",[102,28412,28413],{"class":112}," $(",[102,28415,28278],{"class":1952},[102,28417,28281],{"class":161},[102,28419,542],{"class":112},[102,28421,972],{"class":217},[102,28423,25090],{"class":112},[102,28425,28278],{"class":1952},[102,28427,28428],{"class":161}," -g",[102,28430,13704],{"class":112},[102,28432,26166],{"class":161},[102,28434,28435,28437,28440],{"class":104,"line":24},[102,28436,28237],{"class":112},[102,28438,28439],{"class":217},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[102,28441,24669],{"class":161},[102,28443,28444,28446,28449],{"class":104,"line":1168},[102,28445,28237],{"class":112},[102,28447,28448],{"class":217},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[102,28450,24669],{"class":161},[5116,28452,28453],{},"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":23,"searchDepth":24,"depth":24,"links":28455},[28456,28457,28458],{"id":27454,"depth":1168,"text":27455},{"id":27464,"depth":1168,"text":27465},{"id":27875,"depth":1168,"text":27878},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27446,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28465,"title":28466,"body":28467,"description":23,"extension":28,"meta":30090,"navigation":30,"path":30091,"seo":30092,"stem":30093,"__hash__":30094},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28468,"toc":30085},[28469,28472,28476,28479,28701,28705,28709,28712,28818,28823,28826,28831,28834,28839,28842,28847,28850,28862,28865,28870,28877,28905,28912,28988,28993,28996,29019,29021,29096,29101,29104,29108,29116,29121,29126,29130,29141,29147,29150,29153,29177,29180,29183,29211,29214,29217,29682,29685,29690,29695,29699,29722,29727,29731,29735,29738,29741,29744,29771,29774,29777,29795,29798,29801,29823,29831,29836,29841,29845,29848,29851,29854,29857,29902,29905,29923,29926,29931,29934,29955,29958,30014,30017,30022,30026,30029,30036,30039,30042,30047,30050,30066,30069,30082],[10,28470,28466],{"id":28471},"_6手动创建docker镜像",[73,28473,28475],{"id":28474},"_61dockerfile","6.1.DockerFile",[19,28477,28478],{},"常用命令：",[250,28480,28481,28492],{},[253,28482,28483],{},[256,28484,28485,28488,28490],{},[259,28486,28487],{"align":23726},"指令",[259,28489,25860],{"align":23726},[259,28491,27483],{"align":23726},[297,28493,28494,28504,28520,28531,28542,28553,28564,28575,28586,28600,28614,28625,28639,28650,28661,28675,28690],{},[256,28495,28496,28498,28501],{},[302,28497,27361],{"align":23726},[302,28499,28500],{"align":23726},"指定基础镜像，是 Dockerfile 的起点",[302,28502,28503],{"align":23726},"FROM ubuntu:22.04",[256,28505,28506,28509,28512],{},[302,28507,28508],{"align":23726},"LABEL",[302,28510,28511],{"align":23726},"添加元数据（如作者、版本等）",[302,28513,28514,28515,28519],{"align":23726},"LABEL maintainer=”",[351,28516,28518],{"href":28517},"mailto:you@example.com","you@example.com","”",[256,28521,28522,28525,28528],{},[302,28523,28524],{"align":23726},"ENV",[302,28526,28527],{"align":23726},"设置环境变量",[302,28529,28530],{"align":23726},"ENV PORT=8080",[256,28532,28533,28536,28539],{},[302,28534,28535],{"align":23726},"ARG",[302,28537,28538],{"align":23726},"构建参数，只在构建期间可用",[302,28540,28541],{"align":23726},"ARG VERSION=1.0",[256,28543,28544,28547,28550],{},[302,28545,28546],{"align":23726},"RUN",[302,28548,28549],{"align":23726},"构建镜像时运行命令",[302,28551,28552],{"align":23726},"RUN apt-get update && apt-get install -y curl",[256,28554,28555,28558,28561],{},[302,28556,28557],{"align":23726},"COPY",[302,28559,28560],{"align":23726},"复制文件到镜像中",[302,28562,28563],{"align":23726},"COPY . \u002Fapp",[256,28565,28566,28569,28572],{},[302,28567,28568],{"align":23726},"ADD",[302,28570,28571],{"align":23726},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[302,28573,28574],{"align":23726},"ADD archive.tar.gz \u002Fdata\u002F",[256,28576,28577,28580,28583],{},[302,28578,28579],{"align":23726},"WORKDIR",[302,28581,28582],{"align":23726},"设置工作目录",[302,28584,28585],{"align":23726},"WORKDIR \u002Fopt",[256,28587,28588,28591,28594],{},[302,28589,28590],{"align":23726},"CMD",[302,28592,28593],{"align":23726},"设置容器启动时默认命令（可被 docker run 覆盖）",[302,28595,28596,28597],{"align":23726},"CMD ",[102,28598,28599],{},"“node”, “index.js”",[256,28601,28602,28605,28608],{},[302,28603,28604],{"align":23726},"ENTRYPOINT",[302,28606,28607],{"align":23726},"设置容器启动时固定命令（通常用于 CLI 工具等）",[302,28609,28610,28611],{"align":23726},"ENTRYPOINT ",[102,28612,28613],{},"“python3”",[256,28615,28616,28619,28622],{},[302,28617,28618],{"align":23726},"EXPOSE",[302,28620,28621],{"align":23726},"声明镜像内服务监听的端口（不会自动映射）",[302,28623,28624],{"align":23726},"EXPOSE 80",[256,28626,28627,28630,28633],{},[302,28628,28629],{"align":23726},"VOLUME",[302,28631,28632],{"align":23726},"声明数据卷挂载点",[302,28634,28635,28636],{"align":23726},"VOLUME ",[102,28637,28638],{},"“\u002Fdata”",[256,28640,28641,28644,28647],{},[302,28642,28643],{"align":23726},"USER",[302,28645,28646],{"align":23726},"设置后续命令执行的用户",[302,28648,28649],{"align":23726},"USER appuser",[256,28651,28652,28655,28658],{},[302,28653,28654],{"align":23726},"ONBUILD",[302,28656,28657],{"align":23726},"当镜像作为其他镜像基础镜像时触发的构建指令",[302,28659,28660],{"align":23726},"ONBUILD COPY . \u002Fsrc",[256,28662,28663,28666,28669],{},[302,28664,28665],{"align":23726},"SHELL",[302,28667,28668],{"align":23726},"更改默认 shell，比如将 sh -c 改为 bash -c",[302,28670,28671,28672],{"align":23726},"SHELL ",[102,28673,28674],{},"“\u002Fbin\u002Fbash”, “-c”",[256,28676,28677,28680,28683],{},[302,28678,28679],{"align":23726},"HEALTHCHECK",[302,28681,28682],{"align":23726},"定义容器运行时的健康检查命令",[302,28684,28685,28686],{"align":23726},"`HEALTHCHECK CMD curl –fail ",[351,28687,28688],{"href":28688,"rel":28689},"http:\u002F\u002Flocalhost:8080",[23855],[256,28691,28692,28695,28698],{},[302,28693,28694],{"align":23726},"STOPSIGNAL",[302,28696,28697],{"align":23726},"容器停止时发送的信号",[302,28699,28700],{"align":23726},"STOPSIGNAL SIGKILL",[73,28702,28704],{"id":28703},"_62自己创建容器","6.2.自己创建容器",[21988,28706,28708],{"id":28707},"_621手动创建","6.2.1.手动创建",[19,28710,28711],{},"在x86电脑上编译x86的：",[93,28713,28715],{"className":23812,"code":28714,"language":23814,"meta":23,"style":23},"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",[99,28716,28717,28733,28737,28750,28754,28767,28771,28784,28788,28801,28805],{"__ignoreMap":23},[102,28718,28719,28721,28724,28727,28730],{"class":104,"line":105},[102,28720,26544],{"class":1952},[102,28722,28723],{"class":217}," build",[102,28725,28726],{"class":161}," -t",[102,28728,28729],{"class":217}," ros-melodic-cuda118-cudnn8-bionic:latest",[102,28731,28732],{"class":217}," .\n",[102,28734,28735],{"class":104,"line":24},[102,28736,2389],{"emptyLinePlaceholder":30},[102,28738,28739,28741,28743,28745,28748],{"class":104,"line":1168},[102,28740,26544],{"class":1952},[102,28742,28723],{"class":217},[102,28744,28726],{"class":161},[102,28746,28747],{"class":217}," ros-noetic-focal:latest",[102,28749,28732],{"class":217},[102,28751,28752],{"class":104,"line":1183},[102,28753,2389],{"emptyLinePlaceholder":30},[102,28755,28756,28758,28760,28762,28765],{"class":104,"line":1189},[102,28757,26544],{"class":1952},[102,28759,28723],{"class":217},[102,28761,28726],{"class":161},[102,28763,28764],{"class":217}," ros-humble-jammy:latest",[102,28766,28732],{"class":217},[102,28768,28769],{"class":104,"line":1203},[102,28770,2389],{"emptyLinePlaceholder":30},[102,28772,28773,28775,28777,28779,28782],{"class":104,"line":1209},[102,28774,26544],{"class":1952},[102,28776,28723],{"class":217},[102,28778,28726],{"class":161},[102,28780,28781],{"class":217}," ros-jazzy-noble:latest",[102,28783,28732],{"class":217},[102,28785,28786],{"class":104,"line":1300},[102,28787,2389],{"emptyLinePlaceholder":30},[102,28789,28790,28792,28794,28796,28799],{"class":104,"line":1306},[102,28791,26544],{"class":1952},[102,28793,28723],{"class":217},[102,28795,28726],{"class":161},[102,28797,28798],{"class":217}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[102,28800,28732],{"class":217},[102,28802,28803],{"class":104,"line":1318},[102,28804,2389],{"emptyLinePlaceholder":30},[102,28806,28807,28809,28811,28813,28816],{"class":104,"line":1601},[102,28808,26544],{"class":1952},[102,28810,28723],{"class":217},[102,28812,28726],{"class":161},[102,28814,28815],{"class":217}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[102,28817,28732],{"class":217},[19,28819,28820],{},[1451,28821],{"alt":23,"src":28822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,28824,28825],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,28827,28828],{},[1451,28829],{"alt":23,"src":28830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,28832,28833],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[56,28835,28836],{},[59,28837,28838],{},"创建 Docker Hub 账户",[19,28840,28841],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[56,28843,28844],{"start":24},[59,28845,28846],{},"登录 Docker Hub",[19,28848,28849],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[93,28851,28853],{"className":23812,"code":28852,"language":23814,"meta":23,"style":23},"docker login\n",[99,28854,28855],{"__ignoreMap":23},[102,28856,28857,28859],{"class":104,"line":105},[102,28858,26544],{"class":1952},[102,28860,28861],{"class":217}," login\n",[19,28863,28864],{},"输入你的 Docker Hub 用户名和密码进行验证。",[56,28866,28867],{},[59,28868,28869],{},"为你的镜像打标签",[19,28871,28872,28873,28876],{},"Docker Hub 使用 ",[99,28874,28875],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[93,28878,28880],{"className":23812,"code":28879,"language":23814,"meta":23,"style":23},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[99,28881,28882],{"__ignoreMap":23},[102,28883,28884,28886,28889,28891,28894,28897,28900,28902],{"class":104,"line":105},[102,28885,26544],{"class":1952},[102,28887,28888],{"class":217}," tag",[102,28890,28781],{"class":217},[102,28892,28893],{"class":108}," \u003C",[102,28895,28896],{"class":217},"你的用户",[102,28898,28899],{"class":112},"名",[102,28901,1073],{"class":108},[102,28903,28904],{"class":217},"\u002Fros-jazzy-noble:latest\n",[19,28906,28907,28908,28911],{},"例如，如果你的 Docker Hub 用户名是 ",[99,28909,28910],{},"tungchiahui","，你应该执行：",[93,28913,28915],{"className":23812,"code":28914,"language":23814,"meta":23,"style":23},"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",[99,28916,28917,28928,28932,28943,28947,28958,28962,28973,28977],{"__ignoreMap":23},[102,28918,28919,28921,28923,28925],{"class":104,"line":105},[102,28920,26544],{"class":1952},[102,28922,28888],{"class":217},[102,28924,28747],{"class":217},[102,28926,28927],{"class":217}," tungchiahui\u002Fros-noetic-focal:latest\n",[102,28929,28930],{"class":104,"line":24},[102,28931,2389],{"emptyLinePlaceholder":30},[102,28933,28934,28936,28938,28940],{"class":104,"line":1168},[102,28935,26544],{"class":1952},[102,28937,28888],{"class":217},[102,28939,28764],{"class":217},[102,28941,28942],{"class":217}," tungchiahui\u002Fros-humble-jammy:latest\n",[102,28944,28945],{"class":104,"line":1183},[102,28946,2389],{"emptyLinePlaceholder":30},[102,28948,28949,28951,28953,28955],{"class":104,"line":1189},[102,28950,26544],{"class":1952},[102,28952,28888],{"class":217},[102,28954,28781],{"class":217},[102,28956,28957],{"class":217}," tungchiahui\u002Fros-jazzy-noble:latest\n",[102,28959,28960],{"class":104,"line":1203},[102,28961,2389],{"emptyLinePlaceholder":30},[102,28963,28964,28966,28968,28970],{"class":104,"line":1209},[102,28965,26544],{"class":1952},[102,28967,28888],{"class":217},[102,28969,28798],{"class":217},[102,28971,28972],{"class":217}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[102,28974,28975],{"class":104,"line":1300},[102,28976,2389],{"emptyLinePlaceholder":30},[102,28978,28979,28981,28983,28985],{"class":104,"line":1306},[102,28980,26544],{"class":1952},[102,28982,28888],{"class":217},[102,28984,28815],{"class":217},[102,28986,28987],{"class":217}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[56,28989,28990],{"start":24},[59,28991,28992],{},"推送镜像到 Docker Hub",[19,28994,28995],{},"使用以下命令将镜像推送到 Docker Hub：",[93,28997,28999],{"className":23812,"code":28998,"language":23814,"meta":23,"style":23},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[99,29000,29001],{"__ignoreMap":23},[102,29002,29003,29005,29008,29010,29012,29014,29016],{"class":104,"line":105},[102,29004,26544],{"class":1952},[102,29006,29007],{"class":217}," push",[102,29009,28893],{"class":108},[102,29011,28896],{"class":217},[102,29013,28899],{"class":112},[102,29015,1073],{"class":108},[102,29017,29018],{"class":217},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29020,14623],{},[93,29022,29024],{"className":23812,"code":29023,"language":23814,"meta":23,"style":23},"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",[99,29025,29026,29034,29038,29046,29050,29058,29062,29071,29075,29083,29087],{"__ignoreMap":23},[102,29027,29028,29030,29032],{"class":104,"line":105},[102,29029,26544],{"class":1952},[102,29031,29007],{"class":217},[102,29033,28927],{"class":217},[102,29035,29036],{"class":104,"line":24},[102,29037,2389],{"emptyLinePlaceholder":30},[102,29039,29040,29042,29044],{"class":104,"line":1168},[102,29041,26544],{"class":1952},[102,29043,29007],{"class":217},[102,29045,28942],{"class":217},[102,29047,29048],{"class":104,"line":1183},[102,29049,2389],{"emptyLinePlaceholder":30},[102,29051,29052,29054,29056],{"class":104,"line":1189},[102,29053,26544],{"class":1952},[102,29055,29007],{"class":217},[102,29057,28957],{"class":217},[102,29059,29060],{"class":104,"line":1203},[102,29061,2389],{"emptyLinePlaceholder":30},[102,29063,29064,29066,29068],{"class":104,"line":1209},[102,29065,26544],{"class":1952},[102,29067,29007],{"class":217},[102,29069,29070],{"class":217}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[102,29072,29073],{"class":104,"line":1300},[102,29074,2389],{"emptyLinePlaceholder":30},[102,29076,29077,29079,29081],{"class":104,"line":1306},[102,29078,26544],{"class":1952},[102,29080,29007],{"class":217},[102,29082,28987],{"class":217},[102,29084,29085],{"class":104,"line":1318},[102,29086,2389],{"emptyLinePlaceholder":30},[102,29088,29089,29091,29093],{"class":104,"line":1601},[102,29090,26544],{"class":1952},[102,29092,29007],{"class":217},[102,29094,29095],{"class":217}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[56,29097,29098],{"start":1168},[59,29099,29100],{},"验证推送成功",[19,29102,29103],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29105,29106],{},[262,29107,3773],{},[1120,29109,29110,29113],{},[59,29111,29112],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[59,29114,29115],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29117,29118],{},[1451,29119],{"alt":23,"src":29120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29122,29123],{},[1451,29124],{"alt":23,"src":29125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21988,29127,29129],{"id":29128},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29131,29132,29133,29136,29137,29140],{},"如果您想在 ",[262,29134,29135],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[262,29138,29139],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29142,29143,29144],{},"1. ",[262,29145,29146],{},"启用 Docker 跨平台构建",[19,29148,29149],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29151,29152],{},"第一步：启用 buildx（只需执行一次）",[93,29154,29156],{"className":23812,"code":29155,"language":23814,"meta":23,"style":23},"docker buildx create --name multiarch_builder --use\n",[99,29157,29158],{"__ignoreMap":23},[102,29159,29160,29162,29165,29168,29171,29174],{"class":104,"line":105},[102,29161,26544],{"class":1952},[102,29163,29164],{"class":217}," buildx",[102,29166,29167],{"class":217}," create",[102,29169,29170],{"class":161}," --name",[102,29172,29173],{"class":217}," multiarch_builder",[102,29175,29176],{"class":161}," --use\n",[19,29178,29179],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29181,29182],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[93,29184,29186],{"className":23812,"code":29185,"language":23814,"meta":23,"style":23},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[99,29187,29188],{"__ignoreMap":23},[102,29189,29190,29192,29194,29196,29199,29202,29205,29208],{"class":104,"line":105},[102,29191,26544],{"class":1952},[102,29193,27221],{"class":217},[102,29195,27224],{"class":161},[102,29197,29198],{"class":161}," --privileged",[102,29200,29201],{"class":217}," multiarch\u002Fqemu-user-static",[102,29203,29204],{"class":161}," --reset",[102,29206,29207],{"class":161}," -p",[102,29209,29210],{"class":217}," yes\n",[19,29212,29213],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29215,29216],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[93,29218,29220],{"className":23812,"code":29219,"language":23814,"meta":23,"style":23},"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",[99,29221,29222,29264,29268,29273,29283,29293,29302,29308,29312,29316,29326,29334,29343,29349,29353,29357,29367,29375,29384,29390,29394,29398,29408,29416,29425,29431,29435,29439,29449,29457,29466,29472,29476,29480,29490,29498,29507,29513,29517,29521,29531,29539,29548,29554,29558,29562,29572,29580,29589,29595,29599,29603,29613,29621,29630,29636,29640,29644,29655,29663,29672,29678],{"__ignoreMap":23},[102,29223,29224,29226,29228,29230,29233,29236,29238,29240,29243,29245,29247,29249,29251,29254,29257,29259,29262],{"class":104,"line":105},[102,29225,26544],{"class":1952},[102,29227,29164],{"class":217},[102,29229,28723],{"class":217},[102,29231,29232],{"class":161}," --platform",[102,29234,29235],{"class":217}," linux\u002Famd64,linux\u002Farm64",[102,29237,28726],{"class":161},[102,29239,28893],{"class":108},[102,29241,29242],{"class":217},"你的镜像",[102,29244,28899],{"class":112},[102,29246,1073],{"class":108},[102,29248,972],{"class":217},[102,29250,1023],{"class":108},[102,29252,29253],{"class":217},"标",[102,29255,29256],{"class":112},"签",[102,29258,1073],{"class":108},[102,29260,29261],{"class":161}," --push",[102,29263,28732],{"class":217},[102,29265,29266],{"class":104,"line":24},[102,29267,2389],{"emptyLinePlaceholder":30},[102,29269,29270],{"class":104,"line":1168},[102,29271,29272],{"class":171},"# 例子：\n",[102,29274,29275,29277,29279,29281],{"class":104,"line":1183},[102,29276,26544],{"class":1952},[102,29278,29164],{"class":217},[102,29280,28723],{"class":217},[102,29282,24669],{"class":161},[102,29284,29285,29288,29291],{"class":104,"line":1189},[102,29286,29287],{"class":112},"--platform ",[102,29289,29290],{"class":217},"linux\u002Famd64,linux\u002Farm64",[102,29292,24669],{"class":161},[102,29294,29295,29297,29300],{"class":104,"line":1203},[102,29296,28726],{"class":161},[102,29298,29299],{"class":217}," tungchiahui\u002Fros:noetic-focal",[102,29301,24669],{"class":161},[102,29303,29304,29306],{"class":104,"line":1209},[102,29305,29261],{"class":161},[102,29307,24669],{"class":161},[102,29309,29310],{"class":104,"line":1300},[102,29311,28732],{"class":217},[102,29313,29314],{"class":104,"line":1306},[102,29315,2389],{"emptyLinePlaceholder":30},[102,29317,29318,29320,29322,29324],{"class":104,"line":1318},[102,29319,26544],{"class":1952},[102,29321,29164],{"class":217},[102,29323,28723],{"class":217},[102,29325,24669],{"class":161},[102,29327,29328,29330,29332],{"class":104,"line":1601},[102,29329,29287],{"class":112},[102,29331,29290],{"class":217},[102,29333,24669],{"class":161},[102,29335,29336,29338,29341],{"class":104,"line":1606},[102,29337,28726],{"class":161},[102,29339,29340],{"class":217}," tungchiahui\u002Fros:humble-jammy",[102,29342,24669],{"class":161},[102,29344,29345,29347],{"class":104,"line":1612},[102,29346,29261],{"class":161},[102,29348,24669],{"class":161},[102,29350,29351],{"class":104,"line":1617},[102,29352,28732],{"class":217},[102,29354,29355],{"class":104,"line":1631},[102,29356,2389],{"emptyLinePlaceholder":30},[102,29358,29359,29361,29363,29365],{"class":104,"line":1636},[102,29360,26544],{"class":1952},[102,29362,29164],{"class":217},[102,29364,28723],{"class":217},[102,29366,24669],{"class":161},[102,29368,29369,29371,29373],{"class":104,"line":1642},[102,29370,29287],{"class":112},[102,29372,29290],{"class":217},[102,29374,24669],{"class":161},[102,29376,29377,29379,29382],{"class":104,"line":1663},[102,29378,28726],{"class":161},[102,29380,29381],{"class":217}," tungchiahui\u002Fros:jazzy-noble",[102,29383,24669],{"class":161},[102,29385,29386,29388],{"class":104,"line":1668},[102,29387,29261],{"class":161},[102,29389,24669],{"class":161},[102,29391,29392],{"class":104,"line":1682},[102,29393,28732],{"class":217},[102,29395,29396],{"class":104,"line":1687},[102,29397,2389],{"emptyLinePlaceholder":30},[102,29399,29400,29402,29404,29406],{"class":104,"line":1716},[102,29401,26311],{"class":1952},[102,29403,29164],{"class":217},[102,29405,28723],{"class":217},[102,29407,24669],{"class":161},[102,29409,29410,29412,29414],{"class":104,"line":1721},[102,29411,29287],{"class":112},[102,29413,29290],{"class":217},[102,29415,24669],{"class":161},[102,29417,29418,29420,29423],{"class":104,"line":1738},[102,29419,28726],{"class":161},[102,29421,29422],{"class":217}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[102,29424,24669],{"class":161},[102,29426,29427,29429],{"class":104,"line":1743},[102,29428,29261],{"class":161},[102,29430,24669],{"class":161},[102,29432,29433],{"class":104,"line":1748},[102,29434,28732],{"class":217},[102,29436,29437],{"class":104,"line":1753},[102,29438,2389],{"emptyLinePlaceholder":30},[102,29440,29441,29443,29445,29447],{"class":104,"line":1767},[102,29442,26544],{"class":1952},[102,29444,29164],{"class":217},[102,29446,28723],{"class":217},[102,29448,24669],{"class":161},[102,29450,29451,29453,29455],{"class":104,"line":1772},[102,29452,29287],{"class":112},[102,29454,29290],{"class":217},[102,29456,24669],{"class":161},[102,29458,29459,29461,29464],{"class":104,"line":2566},[102,29460,28726],{"class":161},[102,29462,29463],{"class":217}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[102,29465,24669],{"class":161},[102,29467,29468,29470],{"class":104,"line":2580},[102,29469,29261],{"class":161},[102,29471,24669],{"class":161},[102,29473,29474],{"class":104,"line":2588},[102,29475,28732],{"class":217},[102,29477,29478],{"class":104,"line":2593},[102,29479,2389],{"emptyLinePlaceholder":30},[102,29481,29482,29484,29486,29488],{"class":104,"line":2599},[102,29483,26311],{"class":1952},[102,29485,29164],{"class":217},[102,29487,28723],{"class":217},[102,29489,24669],{"class":161},[102,29491,29492,29494,29496],{"class":104,"line":2605},[102,29493,29287],{"class":112},[102,29495,29290],{"class":217},[102,29497,24669],{"class":161},[102,29499,29500,29502,29505],{"class":104,"line":2610},[102,29501,28726],{"class":161},[102,29503,29504],{"class":217}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[102,29506,24669],{"class":161},[102,29508,29509,29511],{"class":104,"line":7938},[102,29510,29261],{"class":161},[102,29512,24669],{"class":161},[102,29514,29515],{"class":104,"line":7962},[102,29516,28732],{"class":217},[102,29518,29519],{"class":104,"line":7967},[102,29520,2389],{"emptyLinePlaceholder":30},[102,29522,29523,29525,29527,29529],{"class":104,"line":7973},[102,29524,26544],{"class":1952},[102,29526,29164],{"class":217},[102,29528,28723],{"class":217},[102,29530,24669],{"class":161},[102,29532,29533,29535,29537],{"class":104,"line":8000},[102,29534,29287],{"class":112},[102,29536,29290],{"class":217},[102,29538,24669],{"class":161},[102,29540,29541,29543,29546],{"class":104,"line":8005},[102,29542,28726],{"class":161},[102,29544,29545],{"class":217}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[102,29547,24669],{"class":161},[102,29549,29550,29552],{"class":104,"line":8011},[102,29551,29261],{"class":161},[102,29553,24669],{"class":161},[102,29555,29556],{"class":104,"line":8023},[102,29557,28732],{"class":217},[102,29559,29560],{"class":104,"line":8035},[102,29561,2389],{"emptyLinePlaceholder":30},[102,29563,29564,29566,29568,29570],{"class":104,"line":8047},[102,29565,26544],{"class":1952},[102,29567,29164],{"class":217},[102,29569,28723],{"class":217},[102,29571,24669],{"class":161},[102,29573,29574,29576,29578],{"class":104,"line":9706},[102,29575,29287],{"class":112},[102,29577,29290],{"class":217},[102,29579,24669],{"class":161},[102,29581,29582,29584,29587],{"class":104,"line":9731},[102,29583,28726],{"class":161},[102,29585,29586],{"class":217}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[102,29588,24669],{"class":161},[102,29590,29591,29593],{"class":104,"line":9754},[102,29592,29261],{"class":161},[102,29594,24669],{"class":161},[102,29596,29597],{"class":104,"line":9778},[102,29598,28732],{"class":217},[102,29600,29601],{"class":104,"line":9783},[102,29602,2389],{"emptyLinePlaceholder":30},[102,29604,29605,29607,29609,29611],{"class":104,"line":9788},[102,29606,26311],{"class":1952},[102,29608,29164],{"class":217},[102,29610,28723],{"class":217},[102,29612,24669],{"class":161},[102,29614,29615,29617,29619],{"class":104,"line":9793},[102,29616,29287],{"class":112},[102,29618,29290],{"class":217},[102,29620,24669],{"class":161},[102,29622,29623,29625,29628],{"class":104,"line":9802},[102,29624,28726],{"class":161},[102,29626,29627],{"class":217}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[102,29629,24669],{"class":161},[102,29631,29632,29634],{"class":104,"line":9807},[102,29633,29261],{"class":161},[102,29635,24669],{"class":161},[102,29637,29638],{"class":104,"line":9813},[102,29639,28732],{"class":217},[102,29641,29642],{"class":104,"line":9834},[102,29643,2389],{"emptyLinePlaceholder":30},[102,29645,29646,29649,29651,29653],{"class":104,"line":9840},[102,29647,29648],{"class":1952},"  docker",[102,29650,29164],{"class":217},[102,29652,28723],{"class":217},[102,29654,24669],{"class":161},[102,29656,29657,29659,29661],{"class":104,"line":9854},[102,29658,29287],{"class":112},[102,29660,29290],{"class":217},[102,29662,24669],{"class":161},[102,29664,29665,29667,29670],{"class":104,"line":9860},[102,29666,28726],{"class":161},[102,29668,29669],{"class":217}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[102,29671,24669],{"class":161},[102,29673,29674,29676],{"class":104,"line":9887},[102,29675,29261],{"class":161},[102,29677,24669],{"class":161},[102,29679,29680],{"class":104,"line":9896},[102,29681,28732],{"class":217},[19,29683,29684],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29686,29687],{},[1451,29688],{"alt":23,"src":29689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29691,29692],{},[1451,29693],{"alt":23,"src":29694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21988,29696,29698],{"id":29697},"_623清除构建缓存","6.2.3.清除构建缓存",[93,29700,29702],{"className":23812,"code":29701,"language":23814,"meta":23,"style":23},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[99,29703,29704,29709],{"__ignoreMap":23},[102,29705,29706],{"class":104,"line":105},[102,29707,29708],{"class":171},"# 清理BuildKit构建缓存\n",[102,29710,29711,29713,29716,29719],{"class":104,"line":24},[102,29712,26544],{"class":1952},[102,29714,29715],{"class":217}," builder",[102,29717,29718],{"class":217}," prune",[102,29720,29721],{"class":161}," -f\n",[19,29723,29724],{},[1451,29725],{"alt":23,"src":29726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[73,29728,29730],{"id":29729},"_63补充","6.3.补充",[21988,29732,29734],{"id":29733},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,29736,29737],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,29739,29740],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,29742,29743],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[93,29745,29747],{"className":23812,"code":29746,"language":23814,"meta":23,"style":23},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[99,29748,29749,29756],{"__ignoreMap":23},[102,29750,29751,29753],{"class":104,"line":105},[102,29752,27361],{"class":1952},[102,29754,29755],{"class":217}," nginx\n",[102,29757,29758,29760,29763,29766,29768],{"class":104,"line":24},[102,29759,28546],{"class":1952},[102,29761,29762],{"class":217}," echo",[102,29764,29765],{"class":217}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[102,29767,26213],{"class":108},[102,29769,29770],{"class":217}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,29772,29773],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,29775,29776],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[93,29778,29780],{"className":23812,"code":29779,"language":23814,"meta":23,"style":23},"docker build -t nginx:tuling .\n",[99,29781,29782],{"__ignoreMap":23},[102,29783,29784,29786,29788,29790,29793],{"class":104,"line":105},[102,29785,26544],{"class":1952},[102,29787,28723],{"class":217},[102,29789,28726],{"class":161},[102,29791,29792],{"class":217}," nginx:tuling",[102,29794,28732],{"class":217},[19,29796,29797],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,29799,29800],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[93,29802,29804],{"className":23812,"code":29803,"language":23814,"meta":23,"style":23},"docker run -d -p 92:80 nginx:tuling\n",[99,29805,29806],{"__ignoreMap":23},[102,29807,29808,29810,29812,29815,29817,29820],{"class":104,"line":105},[102,29809,26544],{"class":1952},[102,29811,27221],{"class":217},[102,29813,29814],{"class":161}," -d",[102,29816,29207],{"class":161},[102,29818,29819],{"class":217}," 92:80",[102,29821,29822],{"class":217}," nginx:tuling\n",[19,29824,29825,29826],{},"4、访问 ",[351,29827,29830],{"href":29828,"rel":29829},"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",[23855],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,29832,29833],{},[1451,29834],{"alt":23,"src":29835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,29837,29838],{},[1451,29839],{"alt":23,"src":29840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21988,29842,29844],{"id":29843},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,29846,29847],{},"只需要知道大体流程即可",[19,29849,29850],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,29852,29853],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,29855,29856],{},"2、在Dockerfile中添加以下内容",[93,29858,29860],{"className":26082,"code":29859,"language":26084,"meta":23,"style":23},"# 基于哪个镜像\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",[99,29861,29862,29867,29872,29877,29882,29887,29892,29897],{"__ignoreMap":23},[102,29863,29864],{"class":104,"line":105},[102,29865,29866],{},"# 基于哪个镜像\n",[102,29868,29869],{"class":104,"line":24},[102,29870,29871],{},"From java:8\n",[102,29873,29874],{"class":104,"line":1168},[102,29875,29876],{},"# 复制文件到容器\n",[102,29878,29879],{"class":104,"line":1183},[102,29880,29881],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[102,29883,29884],{"class":104,"line":1189},[102,29885,29886],{},"# 声明需要暴露的端口\n",[102,29888,29889],{"class":104,"line":1203},[102,29890,29891],{},"EXPOSE 8877\n",[102,29893,29894],{"class":104,"line":1209},[102,29895,29896],{},"# 配置容器启动后执行的命令\n",[102,29898,29899],{"class":104,"line":1300},[102,29900,29901],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,29903,29904],{},"3、使用docker build命令构建镜像",[93,29906,29908],{"className":23812,"code":29907,"language":23814,"meta":23,"style":23},"docker build -t tulingmall-member:0.0.5 .\n",[99,29909,29910],{"__ignoreMap":23},[102,29911,29912,29914,29916,29918,29921],{"class":104,"line":105},[102,29913,26544],{"class":1952},[102,29915,28723],{"class":217},[102,29917,28726],{"class":161},[102,29919,29920],{"class":217}," tulingmall-member:0.0.5",[102,29922,28732],{"class":217},[19,29924,29925],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,29927,29928],{},[1451,29929],{"alt":23,"src":29930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,29932,29933],{},"4、启动镜像，加-d可在后台启动",[93,29935,29937],{"className":23812,"code":29936,"language":23814,"meta":23,"style":23},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[99,29938,29939],{"__ignoreMap":23},[102,29940,29941,29943,29945,29947,29949,29952],{"class":104,"line":105},[102,29942,26544],{"class":1952},[102,29944,27221],{"class":217},[102,29946,29814],{"class":161},[102,29948,29207],{"class":161},[102,29950,29951],{"class":217}," 8877:8877",[102,29953,29954],{"class":217}," tulingmall-member:0.0.5\n",[19,29956,29957],{},"加上JVM参数：",[93,29959,29961],{"className":23812,"code":29960,"language":23814,"meta":23,"style":23},"# --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",[99,29962,29963,29968,29983,29993,30002,30009],{"__ignoreMap":23},[102,29964,29965],{"class":104,"line":105},[102,29966,29967],{"class":171},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[102,29969,29970,29972,29974,29977,29979,29981],{"class":104,"line":24},[102,29971,26544],{"class":1952},[102,29973,27221],{"class":217},[102,29975,29976],{"class":161},"  -d",[102,29978,29207],{"class":161},[102,29980,29951],{"class":217},[102,29982,24669],{"class":161},[102,29984,29985,29987,29990],{"class":104,"line":1168},[102,29986,28119],{"class":112},[102,29988,29989],{"class":217},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[102,29991,29992],{"class":161},"  \\\n",[102,29994,29995,29997,30000],{"class":104,"line":1183},[102,29996,28119],{"class":112},[102,29998,29999],{"class":217},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[102,30001,29992],{"class":161},[102,30003,30004,30007],{"class":104,"line":1189},[102,30005,30006],{"class":112},"--cap-add=SYS_PTRACE  ",[102,30008,26166],{"class":161},[102,30010,30011],{"class":104,"line":1203},[102,30012,30013],{"class":112},"tulingmall-member:0.0.5\n",[19,30015,30016],{},"5、访问会员服务接口",[19,30018,30019],{},[1451,30020],{"alt":23,"src":30021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21988,30023,30025],{"id":30024},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30027,30028],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30030,30031,30032],{},"阿里云docker镜像仓库：",[351,30033,30034],{"href":30034,"rel":30035},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23855],[19,30037,30038],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30040,30041],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30043,30044],{},[1451,30045],{"alt":23,"src":30046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30048,30049],{},"要把镜像推送到镜像仓库",[93,30051,30053],{"className":23812,"code":30052,"language":23814,"meta":23,"style":23},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[99,30054,30055],{"__ignoreMap":23},[102,30056,30057,30059,30061,30063],{"class":104,"line":105},[102,30058,26544],{"class":1952},[102,30060,28888],{"class":217},[102,30062,29920],{"class":217},[102,30064,30065],{"class":217}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30067,30068],{},"最后将镜像推送到远程仓库",[93,30070,30072],{"className":23812,"code":30071,"language":23814,"meta":23,"style":23},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[99,30073,30074],{"__ignoreMap":23},[102,30075,30076,30078,30080],{"class":104,"line":105},[102,30077,26544],{"class":1952},[102,30079,29007],{"class":217},[102,30081,30065],{"class":217},[5116,30083,30084],{},"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":23,"searchDepth":24,"depth":24,"links":30086},[30087,30088,30089],{"id":28474,"depth":1168,"text":28475},{"id":28703,"depth":1168,"text":28704},{"id":29729,"depth":1168,"text":29730},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28466,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30096,"title":30097,"body":30098,"description":23,"extension":28,"meta":30241,"navigation":30,"path":30242,"seo":30243,"stem":30244,"__hash__":30245},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30099,"toc":30239},[30100,30103,30108,30113,30116,30121,30126,30129,30134,30139,30142,30147,30150,30153,30156,30159,30162,30165,30185,30207,30210,30213,30233,30236],[10,30101,30097],{"id":30102},"_7vscode远程开发",[56,30104,30105],{},[59,30106,30107],{},"插件1：微软Docker工具",[19,30109,30110],{},[1451,30111],{"alt":23,"src":30112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30114,30115],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30117,30118],{},[1451,30119],{"alt":23,"src":30120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[56,30122,30123],{"start":24},[59,30124,30125],{},"插件2：微软Docker远程开发工具",[19,30127,30128],{},"下面这是远程开发的插件。",[19,30130,30131],{},[1451,30132],{"alt":23,"src":30133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30135,30136],{},[1451,30137],{"alt":23,"src":30138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30140,30141],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30143,30144],{},[1451,30145],{"alt":23,"src":30146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30148,30149],{},"安装完拓展之后，vscode进行链接：",[19,30151,30152],{},"1.按ctrl+shift+p",[19,30154,30155],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30157,30158],{},"3.选择目前运行的容器",[19,30160,30161],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30163,30164],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[93,30166,30168],{"className":23812,"code":30167,"language":23814,"meta":23,"style":23},"docker run -v 主机目录:容器目录 image-name\n",[99,30169,30170],{"__ignoreMap":23},[102,30171,30172,30174,30176,30179,30182],{"class":104,"line":105},[102,30173,26544],{"class":1952},[102,30175,27221],{"class":217},[102,30177,30178],{"class":161}," -v",[102,30180,30181],{"class":217}," 主机目录:容器目录",[102,30183,30184],{"class":217}," image-name\n",[93,30186,30188],{"className":23812,"code":30187,"language":23814,"meta":23,"style":23},"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",[99,30189,30190],{"__ignoreMap":23},[102,30191,30192,30194,30196,30199,30201,30204],{"class":104,"line":105},[102,30193,26544],{"class":1952},[102,30195,27221],{"class":217},[102,30197,30198],{"class":161}," -it",[102,30200,30178],{"class":161},[102,30202,30203],{"class":217}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[102,30205,30206],{"class":217}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30208,30209],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30211,30212],{},"查看挂载情况：",[93,30214,30216],{"className":23812,"code":30215,"language":23814,"meta":23,"style":23},"mount | grep -i project\n",[99,30217,30218],{"__ignoreMap":23},[102,30219,30220,30223,30225,30228,30230],{"class":104,"line":105},[102,30221,30222],{"class":1952},"mount",[102,30224,25100],{"class":108},[102,30226,30227],{"class":1952}," grep",[102,30229,26421],{"class":161},[102,30231,30232],{"class":217}," project\n",[19,30234,30235],{},"也可以通过ls来进行查看",[5116,30237,30238],{},"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":23,"searchDepth":24,"depth":24,"links":30240},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30097,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30247,"title":30248,"body":30249,"description":27,"extension":28,"meta":30253,"navigation":30,"path":30255,"seo":30256,"stem":30257,"__hash__":30258},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30250,"toc":30251},[],{"title":23,"searchDepth":24,"depth":24,"links":30252},[],{"category":30254},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30248,"description":27},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30260,"title":30261,"body":30262,"description":27,"extension":28,"meta":30266,"navigation":30,"path":30267,"seo":30268,"stem":30269,"__hash__":30270},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30263,"toc":30264},[],{"title":23,"searchDepth":24,"depth":24,"links":30265},[],{"category":30254},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30261,"description":27},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30272,"title":30273,"body":30274,"description":27,"extension":28,"meta":30567,"navigation":30,"path":30568,"seo":30569,"stem":30570,"__hash__":30571},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30275,"toc":30565},[30276,30279,30287,30302,30307,30358,30361,30367,30554,30559,30562],[10,30277,30273],{"id":30278},"_1验证深度学习环境",[19,30280,30281,30282],{},"关于环境的安装，看",[351,30283,30286],{"href":30284,"rel":30285},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23855],"Pytorch-->深度学习",[19,30288,30289,30290,30293,30294,30297,30298,30301],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[99,30291,30292],{},"pytorch-cuda=12.4"," 是一个“ ",[262,30295,30296],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[262,30299,30300],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30303,30304],{},[1451,30305],{"alt":23,"src":30306},"\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",[93,30308,30310],{"className":23812,"code":30309,"language":23814,"meta":23,"style":23},"# 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",[99,30311,30312,30317],{"__ignoreMap":23},[102,30313,30314],{"class":104,"line":105},[102,30315,30316],{"class":171},"# CUDA 12.4\n",[102,30318,30319,30322,30324,30327,30330,30333,30336,30339,30341,30344,30347,30350,30353,30355],{"class":104,"line":24},[102,30320,30321],{"class":1952},"conda",[102,30323,23824],{"class":217},[102,30325,30326],{"class":217}," pytorch==",[102,30328,30329],{"class":161},"2.5.1",[102,30331,30332],{"class":217}," torchvision==",[102,30334,30335],{"class":161},"0.20.1",[102,30337,30338],{"class":217}," torchaudio==",[102,30340,30329],{"class":161},[102,30342,30343],{"class":217}," pytorch-cuda=",[102,30345,30346],{"class":161},"12.4",[102,30348,30349],{"class":161}," -c",[102,30351,30352],{"class":217}," pytorch",[102,30354,30349],{"class":161},[102,30356,30357],{"class":217}," nvidia\n",[19,30359,30360],{},"）：",[19,30362,30363],{},[351,30364,30365],{"href":30365,"rel":30366},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23855],[93,30368,30372],{"className":30369,"code":30370,"language":30371,"meta":23,"style":23},"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",[99,30373,30374,30379,30387,30392,30402,30418,30423,30433,30470,30477,30489,30505,30510,30520,30532,30542],{"__ignoreMap":23},[102,30375,30376],{"class":104,"line":105},[102,30377,30378],{"class":171},"# 对深度学习环境进行测试\n",[102,30380,30381,30384],{"class":104,"line":24},[102,30382,30383],{"class":108},"import",[102,30385,30386],{"class":112}," torch\n",[102,30388,30389],{"class":104,"line":1168},[102,30390,30391],{"class":171},"# 查看cuda是否被激活\n",[102,30393,30394,30397,30399],{"class":104,"line":1183},[102,30395,30396],{"class":112},"flag",[102,30398,158],{"class":108},[102,30400,30401],{"class":112},"torch.cuda.is_available()\n",[102,30403,30404,30407,30409,30412,30415],{"class":104,"line":1189},[102,30405,30406],{"class":161},"print",[102,30408,113],{"class":112},[102,30410,30411],{"class":217},"\"cuda:\"",[102,30413,30414],{"class":112},", flag)   ",[102,30416,30417],{"class":171},"#返回true的话说明被激活\n",[102,30419,30420],{"class":104,"line":1203},[102,30421,30422],{"class":171},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[102,30424,30425,30428,30430],{"class":104,"line":1209},[102,30426,30427],{"class":112},"ngpu",[102,30429,158],{"class":108},[102,30431,30432],{"class":161},"1\n",[102,30434,30435,30438,30440,30443,30446,30448,30451,30454,30457,30459,30461,30463,30465,30468],{"class":104,"line":1300},[102,30436,30437],{"class":112},"device",[102,30439,158],{"class":108},[102,30441,30442],{"class":112},"torch.device(",[102,30444,30445],{"class":217},"\"cuda:0\"",[102,30447,1693],{"class":108},[102,30449,30450],{"class":112},"(torch.cuda.is_available() ",[102,30452,30453],{"class":108},"and",[102,30455,30456],{"class":112}," ngpu",[102,30458,1073],{"class":108},[102,30460,304],{"class":161},[102,30462,13704],{"class":112},[102,30464,1690],{"class":108},[102,30466,30467],{"class":217}," \"cpu\"",[102,30469,119],{"class":112},[102,30471,30472,30474],{"class":104,"line":1306},[102,30473,30406],{"class":161},[102,30475,30476],{"class":112},"(device)\n",[102,30478,30479,30481,30484,30486],{"class":104,"line":1318},[102,30480,30406],{"class":161},[102,30482,30483],{"class":112},"(torch.cuda.get_device_name(",[102,30485,304],{"class":161},[102,30487,30488],{"class":112},"))\n",[102,30490,30491,30493,30496,30498,30500,30502],{"class":104,"line":1601},[102,30492,30406],{"class":161},[102,30494,30495],{"class":112},"(torch.rand(",[102,30497,184],{"class":161},[102,30499,491],{"class":112},[102,30501,184],{"class":161},[102,30503,30504],{"class":112},").cuda())\n",[102,30506,30507],{"class":104,"line":1606},[102,30508,30509],{"class":171},"# 查看cuda和cudnn的版本\n",[102,30511,30512,30515,30517],{"class":104,"line":1612},[102,30513,30514],{"class":112},"cuda_version",[102,30516,158],{"class":108},[102,30518,30519],{"class":112},"torch.version.cuda\n",[102,30521,30522,30524,30526,30529],{"class":104,"line":1617},[102,30523,30406],{"class":161},[102,30525,113],{"class":112},[102,30527,30528],{"class":217},"\"cuda version\"",[102,30530,30531],{"class":112},",cuda_version)\n",[102,30533,30534,30537,30539],{"class":104,"line":1631},[102,30535,30536],{"class":112},"cudnn_version",[102,30538,158],{"class":108},[102,30540,30541],{"class":112},"torch.backends.cudnn.version()\n",[102,30543,30544,30546,30548,30551],{"class":104,"line":1636},[102,30545,30406],{"class":161},[102,30547,113],{"class":112},[102,30549,30550],{"class":217},"\"cudnn version\"",[102,30552,30553],{"class":112},",cudnn_version)\n",[19,30555,30556],{},[1451,30557],{"alt":23,"src":30558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,30560,30561],{},"cuda:0 指的是一块显卡",[5116,30563,30564],{},"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":23,"searchDepth":24,"depth":24,"links":30566},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30273,"description":27},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30573,"title":30574,"body":30575,"description":27,"extension":28,"meta":50379,"navigation":30,"path":50380,"seo":50381,"stem":50382,"__hash__":50383},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30576,"toc":50373},[30577,30580,30584,30588,30591,30596,30601,30604,30609,30614,30619,30622,30626,30631,30635,30640,30643,30648,30651,30654,30657,30660,30665,30668,30673,30678,30683,30688,30691,30695,30698,30703,31307,31312,31315,31320,31323,31326,31790,31793,31796,31799,31802,33853,33856,33861,33866,34661,34664,34669,35447,35451,37110,37114,37828,37832,37836,37841,37846,37851,37854,37859,37864,37869,37874,37879,37883,37888,39170,39175,39178,39181,39184,39339,39342,39345,40561,40566,41261,41265,41269,41274,41279,41282,41287,41292,41297,41302,41307,41312,41317,41322,41327,41332,41337,41342,41347,41352,41357,41362,41367,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41427,41432,41436,41440,41443,42921,42925,44572,44576,45270,45274,45277,45280,45824,45827,45831,45834,47231,47235,47238,47816,49603,49607,49610,50370],[10,30578,30574],{"id":30579},"_2经典神经网络",[73,30581,30583],{"id":30582},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21988,30585,30587],{"id":30586},"_211原理介绍","2.1.1.原理介绍",[19,30589,30590],{},"LeNet-5",[56,30592,30593],{},[59,30594,30595],{},"原理",[19,30597,30598],{},[1451,30599],{"alt":23,"src":30600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,30602,30603],{},"B是batch批次；C是channel通道",[56,30605,30606],{"start":24},[59,30607,30608],{},"网络参数详细",[19,30610,30611],{},[1451,30612],{"alt":23,"src":30613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,30615,30616],{},[1451,30617],{"alt":23,"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-005.png",[19,30620,30621],{},"AlexNet",[56,30623,30624],{},[59,30625,30595],{},[19,30627,30628],{},[1451,30629],{"alt":23,"src":30630},"\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",[56,30632,30633],{"start":24},[59,30634,30608],{},[19,30636,30637],{},[1451,30638],{"alt":23,"src":30639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,30641,30642],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30644,30645],{},[1451,30646],{"alt":23,"src":30647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,30649,30650],{},"数据处理中的图像增强操作:",[19,30652,30653],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30655,30656],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30658,30659],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30661,30662],{},[1451,30663],{"alt":23,"src":30664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,30666,30667],{},"提升网络精确度的方法：LRN正则化",[19,30669,30670],{},[1451,30671],{"alt":23,"src":30672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,30674,30675],{},[1451,30676],{"alt":23,"src":30677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[56,30679,30680],{"start":1168},[59,30681,30682],{},"AlexNet的总结",[19,30684,30685],{},[1451,30686],{"alt":23,"src":30687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,30689,30690],{},"比LeNet模型要深一丢丢",[21988,30692,30694],{"id":30693},"_212代码实现","2.1.2.代码实现",[19,30696,30697],{},"（1）LeNet",[56,30699,30700],{},[59,30701,30702],{},"模型搭建",[93,30704,30706],{"className":30369,"code":30705,"language":30371,"meta":23,"style":23},"# 导入库\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",[99,30707,30708,30713,30719,30724,30737,30742,30754,30758,30778,30783,30788,30799,30804,30823,30827,30832,30881,30893,30898,30927,30962,30989,30994,31006,31011,31031,31050,31069,31073,31078,31088,31105,31116,31131,31142,31153,31168,31183,31194,31201,31205,31219,31224,31247,31252,31257,31262,31266,31271,31276,31286],{"__ignoreMap":23},[102,30709,30710],{"class":104,"line":105},[102,30711,30712],{"class":171},"# 导入库\n",[102,30714,30715,30717],{"class":104,"line":24},[102,30716,30383],{"class":108},[102,30718,30386],{"class":112},[102,30720,30721],{"class":104,"line":1168},[102,30722,30723],{"class":171},"# 导入神经网络层\n",[102,30725,30726,30729,30732,30734],{"class":104,"line":1183},[102,30727,30728],{"class":108},"from",[102,30730,30731],{"class":112}," torch ",[102,30733,30383],{"class":108},[102,30735,30736],{"class":112}," nn\n",[102,30738,30739],{"class":104,"line":1189},[102,30740,30741],{"class":171},"# 导入展示神经网络参数的包\n",[102,30743,30744,30746,30749,30751],{"class":104,"line":1203},[102,30745,30728],{"class":108},[102,30747,30748],{"class":112}," torchsummary ",[102,30750,30383],{"class":108},[102,30752,30753],{"class":112}," summary\n",[102,30755,30756],{"class":104,"line":1209},[102,30757,2389],{"emptyLinePlaceholder":30},[102,30759,30760,30762,30765,30767,30770,30772,30775],{"class":104,"line":1300},[102,30761,14684],{"class":108},[102,30763,30764],{"class":1952}," LeNet",[102,30766,113],{"class":112},[102,30768,30769],{"class":1952},"nn",[102,30771,671],{"class":112},[102,30773,30774],{"class":1952},"Module",[102,30776,30777],{"class":112},"):\n",[102,30779,30780],{"class":104,"line":1306},[102,30781,30782],{"class":171},"    # 模型初始化:\n",[102,30784,30785],{"class":104,"line":1318},[102,30786,30787],{"class":171},"    # 定义一些网络层和激活函数\n",[102,30789,30790,30793,30796],{"class":104,"line":1601},[102,30791,30792],{"class":108},"    def",[102,30794,30795],{"class":161}," __init__",[102,30797,30798],{"class":112},"(self):\n",[102,30800,30801],{"class":104,"line":1606},[102,30802,30803],{"class":171},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[102,30805,30806,30809,30812,30815,30818,30821],{"class":104,"line":1612},[102,30807,30808],{"class":161},"        super",[102,30810,30811],{"class":112},"(LeNet,",[102,30813,30814],{"class":161},"self",[102,30816,30817],{"class":112},").",[102,30819,30820],{"class":161},"__init__",[102,30822,1965],{"class":112},[102,30824,30825],{"class":104,"line":1617},[102,30826,2389],{"emptyLinePlaceholder":30},[102,30828,30829],{"class":104,"line":1631},[102,30830,30831],{"class":171},"        # 定义网络层\n",[102,30833,30834,30837,30840,30842,30845,30848,30850,30852,30854,30857,30859,30861,30863,30866,30868,30870,30872,30875,30877,30879],{"class":104,"line":1636},[102,30835,30836],{"class":161},"        self",[102,30838,30839],{"class":112},".c1",[102,30841,158],{"class":108},[102,30843,30844],{"class":112},"nn.Conv2d(",[102,30846,30847],{"class":5206},"in_channels",[102,30849,158],{"class":108},[102,30851,330],{"class":161},[102,30853,491],{"class":112},[102,30855,30856],{"class":5206},"out_channels",[102,30858,158],{"class":108},[102,30860,457],{"class":161},[102,30862,491],{"class":112},[102,30864,30865],{"class":5206},"kernel_size",[102,30867,158],{"class":108},[102,30869,432],{"class":161},[102,30871,491],{"class":112},[102,30873,30874],{"class":5206},"padding",[102,30876,158],{"class":108},[102,30878,190],{"class":161},[102,30880,119],{"class":112},[102,30882,30883,30885,30888,30890],{"class":104,"line":1642},[102,30884,30836],{"class":161},[102,30886,30887],{"class":112},".sig",[102,30889,158],{"class":108},[102,30891,30892],{"class":112},"nn.Sigmoid()\n",[102,30894,30895],{"class":104,"line":1663},[102,30896,30897],{"class":171},"        # 定义池化\n",[102,30899,30900,30902,30905,30907,30910,30912,30914,30916,30918,30921,30923,30925],{"class":104,"line":1668},[102,30901,30836],{"class":161},[102,30903,30904],{"class":112},".s2",[102,30906,158],{"class":108},[102,30908,30909],{"class":112},"nn.AvgPool2d(",[102,30911,30865],{"class":5206},[102,30913,158],{"class":108},[102,30915,190],{"class":161},[102,30917,491],{"class":112},[102,30919,30920],{"class":5206},"stride",[102,30922,158],{"class":108},[102,30924,190],{"class":161},[102,30926,119],{"class":112},[102,30928,30929,30931,30934,30936,30938,30940,30942,30944,30946,30948,30950,30952,30954,30956,30958,30960],{"class":104,"line":1682},[102,30930,30836],{"class":161},[102,30932,30933],{"class":112},".c3",[102,30935,158],{"class":108},[102,30937,30844],{"class":112},[102,30939,30847],{"class":5206},[102,30941,158],{"class":108},[102,30943,457],{"class":161},[102,30945,491],{"class":112},[102,30947,30856],{"class":5206},[102,30949,158],{"class":108},[102,30951,714],{"class":161},[102,30953,491],{"class":112},[102,30955,30865],{"class":5206},[102,30957,158],{"class":108},[102,30959,432],{"class":161},[102,30961,119],{"class":112},[102,30963,30964,30966,30969,30971,30973,30975,30977,30979,30981,30983,30985,30987],{"class":104,"line":1687},[102,30965,30836],{"class":161},[102,30967,30968],{"class":112},".s4",[102,30970,158],{"class":108},[102,30972,30909],{"class":112},[102,30974,30865],{"class":5206},[102,30976,158],{"class":108},[102,30978,190],{"class":161},[102,30980,491],{"class":112},[102,30982,30920],{"class":5206},[102,30984,158],{"class":108},[102,30986,190],{"class":161},[102,30988,119],{"class":112},[102,30990,30991],{"class":104,"line":1716},[102,30992,30993],{"class":171},"        # 定义平展层\n",[102,30995,30996,30998,31001,31003],{"class":104,"line":1721},[102,30997,30836],{"class":161},[102,30999,31000],{"class":112},".flatten",[102,31002,158],{"class":108},[102,31004,31005],{"class":112},"nn.Flatten()\n",[102,31007,31008],{"class":104,"line":1738},[102,31009,31010],{"class":171},"        # 定义全连接层\n",[102,31012,31013,31015,31018,31020,31023,31025,31027,31029],{"class":104,"line":1743},[102,31014,30836],{"class":161},[102,31016,31017],{"class":112},".f5",[102,31019,158],{"class":108},[102,31021,31022],{"class":112},"nn.Linear(",[102,31024,3976],{"class":161},[102,31026,491],{"class":112},[102,31028,930],{"class":161},[102,31030,119],{"class":112},[102,31032,31033,31035,31038,31040,31042,31044,31046,31048],{"class":104,"line":1748},[102,31034,30836],{"class":161},[102,31036,31037],{"class":112},".f6",[102,31039,158],{"class":108},[102,31041,31022],{"class":112},[102,31043,930],{"class":161},[102,31045,491],{"class":112},[102,31047,824],{"class":161},[102,31049,119],{"class":112},[102,31051,31052,31054,31057,31059,31061,31063,31065,31067],{"class":104,"line":1753},[102,31053,30836],{"class":161},[102,31055,31056],{"class":112},".f7",[102,31058,158],{"class":108},[102,31060,31022],{"class":112},[102,31062,824],{"class":161},[102,31064,491],{"class":112},[102,31066,559],{"class":161},[102,31068,119],{"class":112},[102,31070,31071],{"class":104,"line":1767},[102,31072,2389],{"emptyLinePlaceholder":30},[102,31074,31075],{"class":104,"line":1772},[102,31076,31077],{"class":171},"    # 写工具->写前向传播\n",[102,31079,31080,31082,31085],{"class":104,"line":2566},[102,31081,30792],{"class":108},[102,31083,31084],{"class":1952}," forward",[102,31086,31087],{"class":112},"(self,x):\n",[102,31089,31090,31093,31095,31097,31100,31102],{"class":104,"line":2580},[102,31091,31092],{"class":112},"        x",[102,31094,158],{"class":108},[102,31096,30814],{"class":161},[102,31098,31099],{"class":112},".sig(",[102,31101,30814],{"class":161},[102,31103,31104],{"class":112},".c1(x))\n",[102,31106,31107,31109,31111,31113],{"class":104,"line":2588},[102,31108,31092],{"class":112},[102,31110,158],{"class":108},[102,31112,30814],{"class":161},[102,31114,31115],{"class":112},".s2(x)\n",[102,31117,31118,31120,31122,31124,31126,31128],{"class":104,"line":2593},[102,31119,31092],{"class":112},[102,31121,158],{"class":108},[102,31123,30814],{"class":161},[102,31125,31099],{"class":112},[102,31127,30814],{"class":161},[102,31129,31130],{"class":112},".c3(x))\n",[102,31132,31133,31135,31137,31139],{"class":104,"line":2599},[102,31134,31092],{"class":112},[102,31136,158],{"class":108},[102,31138,30814],{"class":161},[102,31140,31141],{"class":112},".s4(x)\n",[102,31143,31144,31146,31148,31150],{"class":104,"line":2605},[102,31145,31092],{"class":112},[102,31147,158],{"class":108},[102,31149,30814],{"class":161},[102,31151,31152],{"class":112},".flatten(x)\n",[102,31154,31155,31157,31159,31161,31163,31165],{"class":104,"line":2610},[102,31156,31092],{"class":112},[102,31158,158],{"class":108},[102,31160,30814],{"class":161},[102,31162,31099],{"class":112},[102,31164,30814],{"class":161},[102,31166,31167],{"class":112},".f5(x))\n",[102,31169,31170,31172,31174,31176,31178,31180],{"class":104,"line":7938},[102,31171,31092],{"class":112},[102,31173,158],{"class":108},[102,31175,30814],{"class":161},[102,31177,31099],{"class":112},[102,31179,30814],{"class":161},[102,31181,31182],{"class":112},".f6(x))\n",[102,31184,31185,31187,31189,31191],{"class":104,"line":7962},[102,31186,31092],{"class":112},[102,31188,158],{"class":108},[102,31190,30814],{"class":161},[102,31192,31193],{"class":112},".f7(x)\n",[102,31195,31196,31198],{"class":104,"line":7967},[102,31197,14742],{"class":108},[102,31199,31200],{"class":112}," x\n",[102,31202,31203],{"class":104,"line":7973},[102,31204,2389],{"emptyLinePlaceholder":30},[102,31206,31207,31209,31212,31214,31217],{"class":104,"line":8000},[102,31208,1520],{"class":108},[102,31210,31211],{"class":161}," __name__",[102,31213,2938],{"class":108},[102,31215,31216],{"class":217},"\"__main__\"",[102,31218,3728],{"class":112},[102,31220,31221],{"class":104,"line":8005},[102,31222,31223],{"class":171},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[102,31225,31226,31229,31231,31233,31236,31238,31241,31243,31245],{"class":104,"line":8011},[102,31227,31228],{"class":112},"    device",[102,31230,158],{"class":108},[102,31232,30442],{"class":112},[102,31234,31235],{"class":217},"\"cuda\"",[102,31237,1693],{"class":108},[102,31239,31240],{"class":112}," torch.cuda.is_available() ",[102,31242,1690],{"class":108},[102,31244,30467],{"class":217},[102,31246,119],{"class":112},[102,31248,31249],{"class":104,"line":8023},[102,31250,31251],{"class":171},"    # 如果就是想指定用cpu用下方代码:\n",[102,31253,31254],{"class":104,"line":8035},[102,31255,31256],{"class":171},"    # device=\"cpu\"\n",[102,31258,31259],{"class":104,"line":8047},[102,31260,31261],{"class":171},"    # print(device)\n",[102,31263,31264],{"class":104,"line":9706},[102,31265,2389],{"emptyLinePlaceholder":30},[102,31267,31268],{"class":104,"line":9731},[102,31269,31270],{"class":171},"    # 实例化模型\n",[102,31272,31273],{"class":104,"line":9754},[102,31274,31275],{"class":171},"    # 将模型放到设备中去运行\n",[102,31277,31278,31281,31283],{"class":104,"line":9778},[102,31279,31280],{"class":112},"    model",[102,31282,158],{"class":108},[102,31284,31285],{"class":112},"LeNet().to(device)\n",[102,31287,31288,31291,31294,31296,31298,31300,31302,31304],{"class":104,"line":9783},[102,31289,31290],{"class":161},"    print",[102,31292,31293],{"class":112},"(summary(model,(",[102,31295,330],{"class":161},[102,31297,491],{"class":112},[102,31299,1014],{"class":161},[102,31301,491],{"class":112},[102,31303,1014],{"class":161},[102,31305,31306],{"class":112},")))\n",[19,31308,31309],{},[1451,31310],{"alt":23,"src":31311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,31313,31314],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[56,31316,31317],{"start":24},[59,31318,31319],{},"训练",[19,31321,31322],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31324,31325],{},"在训练之前可以将数据展示看一下",[93,31327,31329],{"className":30369,"code":31328,"language":30371,"meta":23,"style":23},"# 建立画图的函数，用于展示数据\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",[99,31330,31331,31336,31341,31353,31365,31378,31383,31395,31400,31412,31417,31429,31433,31437,31458,31470,31475,31496,31507,31511,31516,31534,31545,31550,31561,31566,31577,31581,31586,31601,31614,31619,31624,31637,31650,31663,31668,31672,31677,31697,31714,31734,31747,31760,31770,31785],{"__ignoreMap":23},[102,31332,31333],{"class":104,"line":105},[102,31334,31335],{"class":171},"# 建立画图的函数，用于展示数据\n",[102,31337,31338],{"class":104,"line":24},[102,31339,31340],{"class":171},"# torchvision中包含很多内置的数据集\n",[102,31342,31343,31345,31348,31350],{"class":104,"line":1168},[102,31344,30728],{"class":108},[102,31346,31347],{"class":112}," sklearn.externals.array_api_compat.torch ",[102,31349,30383],{"class":108},[102,31351,31352],{"class":112}," squeeze\n",[102,31354,31355,31357,31360,31362],{"class":104,"line":1183},[102,31356,30728],{"class":108},[102,31358,31359],{"class":112}," torchvision.datasets ",[102,31361,30383],{"class":108},[102,31363,31364],{"class":112}," FashionMNIST\n",[102,31366,31367,31369,31372,31375],{"class":104,"line":1189},[102,31368,30383],{"class":108},[102,31370,31371],{"class":112}," numpy ",[102,31373,31374],{"class":108},"as",[102,31376,31377],{"class":112}," np\n",[102,31379,31380],{"class":104,"line":1203},[102,31381,31382],{"class":171},"# 引入处理数据集的包\n",[102,31384,31385,31387,31390,31392],{"class":104,"line":1209},[102,31386,30728],{"class":108},[102,31388,31389],{"class":112}," torchvision ",[102,31391,30383],{"class":108},[102,31393,31394],{"class":112}," transforms\n",[102,31396,31397],{"class":104,"line":1300},[102,31398,31399],{"class":171},"# 从torch库中引入数据处理的包\n",[102,31401,31402,31404,31407,31409],{"class":104,"line":1306},[102,31403,30383],{"class":108},[102,31405,31406],{"class":112}," torch.utils.data ",[102,31408,31374],{"class":108},[102,31410,31411],{"class":112}," Data\n",[102,31413,31414],{"class":104,"line":1318},[102,31415,31416],{"class":171},"# 导入画图的库\n",[102,31418,31419,31421,31424,31426],{"class":104,"line":1601},[102,31420,30383],{"class":108},[102,31422,31423],{"class":112}," matplotlib.pyplot ",[102,31425,31374],{"class":108},[102,31427,31428],{"class":112}," plt\n",[102,31430,31431],{"class":104,"line":1606},[102,31432,2389],{"emptyLinePlaceholder":30},[102,31434,31435],{"class":104,"line":1612},[102,31436,2389],{"emptyLinePlaceholder":30},[102,31438,31439,31442,31444,31447,31450,31452,31455],{"class":104,"line":1617},[102,31440,31441],{"class":112},"train_data",[102,31443,158],{"class":108},[102,31445,31446],{"class":112},"FashionMNIST(",[102,31448,31449],{"class":5206},"root",[102,31451,158],{"class":108},[102,31453,31454],{"class":217},"'.\u002Fdata'",[102,31456,31457],{"class":112},",\n",[102,31459,31460,31463,31465,31468],{"class":104,"line":1631},[102,31461,31462],{"class":5206},"                        train",[102,31464,158],{"class":108},[102,31466,31467],{"class":161},"True",[102,31469,31457],{"class":112},[102,31471,31472],{"class":104,"line":1636},[102,31473,31474],{"class":171},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[102,31476,31477,31480,31482,31485,31488,31490,31493],{"class":104,"line":1642},[102,31478,31479],{"class":5206},"                        transform",[102,31481,158],{"class":108},[102,31483,31484],{"class":112},"transforms.Compose([transforms.Resize(",[102,31486,31487],{"class":5206},"size",[102,31489,158],{"class":108},[102,31491,31492],{"class":161},"224",[102,31494,31495],{"class":112},"),transforms.ToTensor()]),\n",[102,31497,31498,31501,31503,31505],{"class":104,"line":1663},[102,31499,31500],{"class":5206},"                        download",[102,31502,158],{"class":108},[102,31504,31467],{"class":161},[102,31506,119],{"class":112},[102,31508,31509],{"class":104,"line":1668},[102,31510,2389],{"emptyLinePlaceholder":30},[102,31512,31513],{"class":104,"line":1682},[102,31514,31515],{"class":171},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[102,31517,31518,31521,31523,31526,31529,31531],{"class":104,"line":1687},[102,31519,31520],{"class":112},"train_loader",[102,31522,158],{"class":108},[102,31524,31525],{"class":112},"Data.DataLoader(",[102,31527,31528],{"class":5206},"dataset",[102,31530,158],{"class":108},[102,31532,31533],{"class":112},"train_data,\n",[102,31535,31536,31539,31541,31543],{"class":104,"line":1716},[102,31537,31538],{"class":5206},"                             batch_size",[102,31540,158],{"class":108},[102,31542,316],{"class":161},[102,31544,31457],{"class":112},[102,31546,31547],{"class":104,"line":1721},[102,31548,31549],{"class":171},"                             # 数据是否打乱\n",[102,31551,31552,31555,31557,31559],{"class":104,"line":1738},[102,31553,31554],{"class":5206},"                             shuffle",[102,31556,158],{"class":108},[102,31558,31467],{"class":161},[102,31560,31457],{"class":112},[102,31562,31563],{"class":104,"line":1743},[102,31564,31565],{"class":171},"                             # 规定加载数据的进程\n",[102,31567,31568,31571,31573,31575],{"class":104,"line":1748},[102,31569,31570],{"class":5206},"                             num_workers",[102,31572,158],{"class":108},[102,31574,304],{"class":161},[102,31576,119],{"class":112},[102,31578,31579],{"class":104,"line":1753},[102,31580,2389],{"emptyLinePlaceholder":30},[102,31582,31583],{"class":104,"line":1767},[102,31584,31585],{"class":171},"# 获得一个batch的数据\n",[102,31587,31588,31590,31593,31595,31598],{"class":104,"line":1772},[102,31589,3014],{"class":108},[102,31591,31592],{"class":112}," step,(b_x,b_y) ",[102,31594,26034],{"class":108},[102,31596,31597],{"class":161}," enumerate",[102,31599,31600],{"class":112},"(train_loader):\n",[102,31602,31603,31605,31608,31610,31612],{"class":104,"line":2566},[102,31604,3090],{"class":108},[102,31606,31607],{"class":112}," step ",[102,31609,1073],{"class":108},[102,31611,4082],{"class":161},[102,31613,3728],{"class":112},[102,31615,31616],{"class":104,"line":2580},[102,31617,31618],{"class":108},"        break\n",[102,31620,31621],{"class":104,"line":2588},[102,31622,31623],{"class":171},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[102,31625,31626,31629,31631,31634],{"class":104,"line":2593},[102,31627,31628],{"class":112},"batch_x",[102,31630,158],{"class":108},[102,31632,31633],{"class":112},"b_x.squeeze().numpy()  ",[102,31635,31636],{"class":171},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[102,31638,31639,31642,31644,31647],{"class":104,"line":2599},[102,31640,31641],{"class":112},"batch_y",[102,31643,158],{"class":108},[102,31645,31646],{"class":112},"b_y.numpy()   ",[102,31648,31649],{"class":171},"#将张量转换成功numpy数组\n",[102,31651,31652,31655,31657,31660],{"class":104,"line":2605},[102,31653,31654],{"class":112},"class_label",[102,31656,158],{"class":108},[102,31658,31659],{"class":112},"train_data.classes  ",[102,31661,31662],{"class":171},"#训练集标签\n",[102,31664,31665],{"class":104,"line":2610},[102,31666,31667],{"class":171},"# print(class_label)\n",[102,31669,31670],{"class":104,"line":7938},[102,31671,2389],{"emptyLinePlaceholder":30},[102,31673,31674],{"class":104,"line":7962},[102,31675,31676],{"class":171},"# 可视化一个batch的图像\n",[102,31678,31679,31682,31685,31687,31689,31691,31693,31695],{"class":104,"line":7967},[102,31680,31681],{"class":112},"plt.figure(",[102,31683,31684],{"class":5206},"figsize",[102,31686,158],{"class":108},[102,31688,113],{"class":112},[102,31690,611],{"class":161},[102,31692,491],{"class":112},[102,31694,432],{"class":161},[102,31696,30488],{"class":112},[102,31698,31699,31701,31704,31706,31709,31711],{"class":104,"line":7973},[102,31700,3014],{"class":108},[102,31702,31703],{"class":112}," ii ",[102,31705,26034],{"class":108},[102,31707,31708],{"class":112}," np.arange(",[102,31710,7348],{"class":161},[102,31712,31713],{"class":112},"(batch_y)):\n",[102,31715,31716,31719,31721,31723,31725,31728,31730,31732],{"class":104,"line":8000},[102,31717,31718],{"class":112},"    plt.subplot(",[102,31720,406],{"class":161},[102,31722,491],{"class":112},[102,31724,714],{"class":161},[102,31726,31727],{"class":112},",ii ",[102,31729,594],{"class":108},[102,31731,25109],{"class":161},[102,31733,119],{"class":112},[102,31735,31736,31739,31742,31744],{"class":104,"line":8005},[102,31737,31738],{"class":112},"    plt.imshow(batch_x[ii,:,:],",[102,31740,31741],{"class":5206},"cmap",[102,31743,158],{"class":108},[102,31745,31746],{"class":112},"plt.cm.gray)\n",[102,31748,31749,31752,31754,31756,31758],{"class":104,"line":8011},[102,31750,31751],{"class":112},"    plt.title(class_label[batch_y[ii]],",[102,31753,31487],{"class":5206},[102,31755,158],{"class":108},[102,31757,559],{"class":161},[102,31759,119],{"class":112},[102,31761,31762,31765,31768],{"class":104,"line":8023},[102,31763,31764],{"class":112},"    plt.axis(",[102,31766,31767],{"class":217},"\"off\"",[102,31769,119],{"class":112},[102,31771,31772,31775,31778,31780,31783],{"class":104,"line":8035},[102,31773,31774],{"class":112},"    plt.subplots_adjust(",[102,31776,31777],{"class":5206},"wspace",[102,31779,158],{"class":108},[102,31781,31782],{"class":161},"0.05",[102,31784,119],{"class":112},[102,31786,31787],{"class":104,"line":8047},[102,31788,31789],{"class":112},"plt.show()\n",[19,31791,31792],{},"用matplotlib进行展示的过程可以后续再补",[19,31794,31795],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,31797,31798],{},"训练次数就是按照批次过整个训练集数据的次数",[19,31800,31801],{},"模型训练：",[93,31803,31805],{"className":30369,"code":31804,"language":30371,"meta":23,"style":23},"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",[99,31806,31807,31814,31821,31825,31837,31843,31854,31864,31874,31884,31894,31899,31911,31921,31925,31929,31934,31945,31958,31969,31986,31997,32036,32052,32064,32075,32080,32091,32107,32118,32129,32140,32147,32151,32156,32161,32165,32170,32180,32201,32205,32209,32214,32219,32224,32244,32248,32253,32263,32267,32272,32281,32286,32291,32296,32306,32310,32314,32319,32324,32334,32339,32349,32354,32363,32368,32377,32382,32391,32395,32400,32410,32414,32418,32423,32438,32466,32481,32485,32490,32495,32504,32509,32518,32523,32532,32537,32546,32551,32560,32565,32574,32579,32592,32597,32607,32612,32622,32628,32634,32640,32646,32657,32663,32683,32689,32700,32706,32712,32718,32724,32730,32736,32742,32762,32768,32784,32790,32804,32810,32825,32831,32840,32846,32855,32861,32867,32876,32882,32893,32899,32918,32924,32935,32941,32961,32977,32983,32997,33003,33009,33020,33026,33032,33042,33048,33059,33065,33075,33080,33086,33135,33182,33187,33193,33212,33218,33238,33244,33250,33260,33265,33271,33287,33332,33338,33344,33350,33361,33367,33373,33379,33397,33411,33420,33429,33438,33447,33453,33459,33467,33472,33478,33489,33495,33515,33521,33527,33533,33550,33556,33562,33568,33574,33580,33607,33631,33637,33643,33649,33660,33671,33677,33694,33717,33740,33746,33751,33760,33770,33776,33781,33787,33800,33806,33817,33828,33847],{"__ignoreMap":23},[102,31808,31809,31811],{"class":104,"line":105},[102,31810,30383],{"class":108},[102,31812,31813],{"class":112}," copy\n",[102,31815,31816,31818],{"class":104,"line":24},[102,31817,30383],{"class":108},[102,31819,31820],{"class":112}," time\n",[102,31822,31823],{"class":104,"line":1168},[102,31824,2389],{"emptyLinePlaceholder":30},[102,31826,31827,31829,31832,31834],{"class":104,"line":1183},[102,31828,30383],{"class":108},[102,31830,31831],{"class":112}," pandas ",[102,31833,31374],{"class":108},[102,31835,31836],{"class":112}," pd\n",[102,31838,31839,31841],{"class":104,"line":1189},[102,31840,30383],{"class":108},[102,31842,30386],{"class":112},[102,31844,31845,31847,31849,31851],{"class":104,"line":1203},[102,31846,30728],{"class":108},[102,31848,31406],{"class":112},[102,31850,30383],{"class":108},[102,31852,31853],{"class":112}," Dataset\n",[102,31855,31856,31858,31860,31862],{"class":104,"line":1209},[102,31857,30728],{"class":108},[102,31859,31359],{"class":112},[102,31861,30383],{"class":108},[102,31863,31364],{"class":112},[102,31865,31866,31868,31870,31872],{"class":104,"line":1300},[102,31867,30728],{"class":108},[102,31869,31389],{"class":112},[102,31871,30383],{"class":108},[102,31873,31394],{"class":112},[102,31875,31876,31878,31880,31882],{"class":104,"line":1306},[102,31877,30383],{"class":108},[102,31879,31406],{"class":112},[102,31881,31374],{"class":108},[102,31883,31411],{"class":112},[102,31885,31886,31888,31890,31892],{"class":104,"line":1318},[102,31887,30383],{"class":108},[102,31889,31423],{"class":112},[102,31891,31374],{"class":108},[102,31893,31428],{"class":112},[102,31895,31896],{"class":104,"line":1601},[102,31897,31898],{"class":171},"# 导入模型\n",[102,31900,31901,31903,31906,31908],{"class":104,"line":1606},[102,31902,30728],{"class":108},[102,31904,31905],{"class":112}," model ",[102,31907,30383],{"class":108},[102,31909,31910],{"class":112}," LeNet\n",[102,31912,31913,31915,31917,31919],{"class":104,"line":1612},[102,31914,30728],{"class":108},[102,31916,30731],{"class":112},[102,31918,30383],{"class":108},[102,31920,30736],{"class":112},[102,31922,31923],{"class":104,"line":1617},[102,31924,2389],{"emptyLinePlaceholder":30},[102,31926,31927],{"class":104,"line":1631},[102,31928,2389],{"emptyLinePlaceholder":30},[102,31930,31931],{"class":104,"line":1636},[102,31932,31933],{"class":171},"# 处理训练集与验证集函数--->划分数据集\n",[102,31935,31936,31939,31942],{"class":104,"line":1642},[102,31937,31938],{"class":108},"def",[102,31940,31941],{"class":1952}," train_val_data_process",[102,31943,31944],{"class":112},"():\n",[102,31946,31947,31950,31952,31954,31956],{"class":104,"line":1663},[102,31948,31949],{"class":112},"    train_data",[102,31951,158],{"class":108},[102,31953,31446],{"class":112},[102,31955,31454],{"class":217},[102,31957,31457],{"class":112},[102,31959,31960,31963,31965,31967],{"class":104,"line":1668},[102,31961,31962],{"class":5206},"                            train",[102,31964,158],{"class":108},[102,31966,31467],{"class":161},[102,31968,31457],{"class":112},[102,31970,31971,31974,31976,31978,31980,31982,31984],{"class":104,"line":1682},[102,31972,31973],{"class":5206},"                            transform",[102,31975,158],{"class":108},[102,31977,31484],{"class":112},[102,31979,31487],{"class":5206},[102,31981,158],{"class":108},[102,31983,1014],{"class":161},[102,31985,31495],{"class":112},[102,31987,31988,31991,31993,31995],{"class":104,"line":1687},[102,31989,31990],{"class":5206},"                            download",[102,31992,158],{"class":108},[102,31994,31467],{"class":161},[102,31996,119],{"class":112},[102,31998,31999,32002,32004,32007,32010,32012,32015,32017,32019,32022,32024,32026,32029,32031,32033],{"class":104,"line":1716},[102,32000,32001],{"class":112},"    train_data,val_data",[102,32003,158],{"class":108},[102,32005,32006],{"class":112},"Data.random_split(train_data,[",[102,32008,32009],{"class":161},"round",[102,32011,113],{"class":112},[102,32013,32014],{"class":161},"0.8",[102,32016,568],{"class":108},[102,32018,7348],{"class":161},[102,32020,32021],{"class":112},"(train_data)),",[102,32023,32009],{"class":161},[102,32025,113],{"class":112},[102,32027,32028],{"class":161},"0.2",[102,32030,568],{"class":108},[102,32032,7348],{"class":161},[102,32034,32035],{"class":112},"(train_data))])\n",[102,32037,32038,32041,32043,32046,32048,32050],{"class":104,"line":1721},[102,32039,32040],{"class":112},"    train_dataloader ",[102,32042,158],{"class":108},[102,32044,32045],{"class":112}," Data.DataLoader(",[102,32047,31528],{"class":5206},[102,32049,158],{"class":108},[102,32051,31533],{"class":112},[102,32053,32054,32057,32059,32062],{"class":104,"line":1738},[102,32055,32056],{"class":5206},"                                       batch_size",[102,32058,158],{"class":108},[102,32060,32061],{"class":161},"128",[102,32063,31457],{"class":112},[102,32065,32066,32069,32071,32073],{"class":104,"line":1743},[102,32067,32068],{"class":5206},"                                       shuffle",[102,32070,158],{"class":108},[102,32072,31467],{"class":161},[102,32074,31457],{"class":112},[102,32076,32077],{"class":104,"line":1748},[102,32078,32079],{"class":171},"                                       # 规定8个进程\n",[102,32081,32082,32085,32087,32089],{"class":104,"line":1753},[102,32083,32084],{"class":5206},"                                       num_workers",[102,32086,158],{"class":108},[102,32088,508],{"class":161},[102,32090,119],{"class":112},[102,32092,32093,32096,32098,32100,32102,32104],{"class":104,"line":1767},[102,32094,32095],{"class":112},"    val_dataloader",[102,32097,158],{"class":108},[102,32099,31525],{"class":112},[102,32101,31528],{"class":5206},[102,32103,158],{"class":108},[102,32105,32106],{"class":112},"val_data,\n",[102,32108,32109,32112,32114,32116],{"class":104,"line":1772},[102,32110,32111],{"class":5206},"                                   batch_size",[102,32113,158],{"class":108},[102,32115,32061],{"class":161},[102,32117,31457],{"class":112},[102,32119,32120,32123,32125,32127],{"class":104,"line":2566},[102,32121,32122],{"class":5206},"                                   shuffle",[102,32124,158],{"class":108},[102,32126,31467],{"class":161},[102,32128,31457],{"class":112},[102,32130,32131,32134,32136,32138],{"class":104,"line":2580},[102,32132,32133],{"class":5206},"                                   num_workers",[102,32135,158],{"class":108},[102,32137,508],{"class":161},[102,32139,119],{"class":112},[102,32141,32142,32144],{"class":104,"line":2588},[102,32143,4079],{"class":108},[102,32145,32146],{"class":112}," train_dataloader,val_dataloader\n",[102,32148,32149],{"class":104,"line":2593},[102,32150,2389],{"emptyLinePlaceholder":30},[102,32152,32153],{"class":104,"line":2599},[102,32154,32155],{"class":171},"# 验证是否出错\n",[102,32157,32158],{"class":104,"line":2605},[102,32159,32160],{"class":171},"# train_val_data_process()\n",[102,32162,32163],{"class":104,"line":2610},[102,32164,2389],{"emptyLinePlaceholder":30},[102,32166,32167],{"class":104,"line":7938},[102,32168,32169],{"class":171},"# 定义模型训练函数\n",[102,32171,32172,32174,32177],{"class":104,"line":7962},[102,32173,31938],{"class":108},[102,32175,32176],{"class":1952}," train_model_process",[102,32178,32179],{"class":112},"(model,train_dataloader,val_dataloader,num_epochs):\n",[102,32181,32182,32184,32186,32188,32190,32192,32194,32196,32199],{"class":104,"line":7967},[102,32183,31228],{"class":112},[102,32185,158],{"class":108},[102,32187,30442],{"class":112},[102,32189,31235],{"class":217},[102,32191,1693],{"class":108},[102,32193,31240],{"class":112},[102,32195,1690],{"class":108},[102,32197,32198],{"class":217}," 'cpu'",[102,32200,119],{"class":112},[102,32202,32203],{"class":104,"line":7973},[102,32204,2389],{"emptyLinePlaceholder":30},[102,32206,32207],{"class":104,"line":8000},[102,32208,2389],{"emptyLinePlaceholder":30},[102,32210,32211],{"class":104,"line":8005},[102,32212,32213],{"class":171},"    # 定义优化器\n",[102,32215,32216],{"class":104,"line":8011},[102,32217,32218],{"class":171},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[102,32220,32221],{"class":104,"line":8023},[102,32222,32223],{"class":171},"    # lr为学习率\n",[102,32225,32226,32229,32231,32234,32237,32239,32242],{"class":104,"line":8035},[102,32227,32228],{"class":112},"    optimizer",[102,32230,158],{"class":108},[102,32232,32233],{"class":112},"torch.optim.Adam(model.parameters(),",[102,32235,32236],{"class":5206},"lr",[102,32238,158],{"class":108},[102,32240,32241],{"class":161},"0.001",[102,32243,119],{"class":112},[102,32245,32246],{"class":104,"line":8047},[102,32247,2389],{"emptyLinePlaceholder":30},[102,32249,32250],{"class":104,"line":9706},[102,32251,32252],{"class":171},"    # 定义损失函数使用交叉熵损失函数\n",[102,32254,32255,32258,32260],{"class":104,"line":9731},[102,32256,32257],{"class":112},"    criterion",[102,32259,158],{"class":108},[102,32261,32262],{"class":112},"nn.CrossEntropyLoss()\n",[102,32264,32265],{"class":104,"line":9754},[102,32266,2389],{"emptyLinePlaceholder":30},[102,32268,32269],{"class":104,"line":9778},[102,32270,32271],{"class":171},"    # 将模型放到GPU中进行训练\n",[102,32273,32274,32276,32278],{"class":104,"line":9783},[102,32275,31280],{"class":112},[102,32277,158],{"class":108},[102,32279,32280],{"class":112},"model.to(device)\n",[102,32282,32283],{"class":104,"line":9788},[102,32284,32285],{"class":171},"    # 复制当前模型的参数\n",[102,32287,32288],{"class":104,"line":9793},[102,32289,32290],{"class":171},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[102,32292,32293],{"class":104,"line":9802},[102,32294,32295],{"class":171},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[102,32297,32298,32301,32303],{"class":104,"line":9807},[102,32299,32300],{"class":112},"    best_model_wts",[102,32302,158],{"class":108},[102,32304,32305],{"class":112},"copy.deepcopy(model.state_dict())\n",[102,32307,32308],{"class":104,"line":9813},[102,32309,2389],{"emptyLinePlaceholder":30},[102,32311,32312],{"class":104,"line":9834},[102,32313,2389],{"emptyLinePlaceholder":30},[102,32315,32316],{"class":104,"line":9840},[102,32317,32318],{"class":171},"    # 初始化参数\n",[102,32320,32321],{"class":104,"line":9854},[102,32322,32323],{"class":171},"    # 最高准确度\n",[102,32325,32326,32329,32331],{"class":104,"line":9860},[102,32327,32328],{"class":112},"    best_acc",[102,32330,158],{"class":108},[102,32332,32333],{"class":161},"0.0\n",[102,32335,32336],{"class":104,"line":9887},[102,32337,32338],{"class":171},"    # 训练集损失列表\n",[102,32340,32341,32344,32346],{"class":104,"line":9896},[102,32342,32343],{"class":112},"    train_loss_all",[102,32345,158],{"class":108},[102,32347,32348],{"class":112},"[]\n",[102,32350,32351],{"class":104,"line":9902},[102,32352,32353],{"class":171},"    # 验证集函数列表\n",[102,32355,32356,32359,32361],{"class":104,"line":9910},[102,32357,32358],{"class":112},"    val_loss_all",[102,32360,158],{"class":108},[102,32362,32348],{"class":112},[102,32364,32365],{"class":104,"line":9915},[102,32366,32367],{"class":171},"    # 训练集准确度列表\n",[102,32369,32370,32373,32375],{"class":104,"line":16594},[102,32371,32372],{"class":112},"    train_acc_all",[102,32374,158],{"class":108},[102,32376,32348],{"class":112},[102,32378,32379],{"class":104,"line":16600},[102,32380,32381],{"class":171},"    # 验证集准确度列表\n",[102,32383,32384,32387,32389],{"class":104,"line":16623},[102,32385,32386],{"class":112},"    val_acc_all",[102,32388,158],{"class":108},[102,32390,32348],{"class":112},[102,32392,32393],{"class":104,"line":16629},[102,32394,2389],{"emptyLinePlaceholder":30},[102,32396,32397],{"class":104,"line":16652},[102,32398,32399],{"class":171},"    # 保存当前时间--->方便看每轮训练的时间\n",[102,32401,32402,32405,32407],{"class":104,"line":16666},[102,32403,32404],{"class":112},"    since",[102,32406,158],{"class":108},[102,32408,32409],{"class":112},"time.time()\n",[102,32411,32412],{"class":104,"line":16686},[102,32413,2389],{"emptyLinePlaceholder":30},[102,32415,32416],{"class":104,"line":16692},[102,32417,2389],{"emptyLinePlaceholder":30},[102,32419,32420],{"class":104,"line":16703},[102,32421,32422],{"class":171},"    # 准备工作完成--->开始训练模型\n",[102,32424,32425,32427,32430,32432,32435],{"class":104,"line":16726},[102,32426,3190],{"class":108},[102,32428,32429],{"class":112}," epoch ",[102,32431,26034],{"class":108},[102,32433,32434],{"class":161}," range",[102,32436,32437],{"class":112},"(num_epochs):\n",[102,32439,32440,32443,32445,32448,32451,32453,32455,32457,32460,32462,32464],{"class":104,"line":16748},[102,32441,32442],{"class":161},"        print",[102,32444,113],{"class":112},[102,32446,32447],{"class":217},"\"Epoch ",[102,32449,32450],{"class":161},"{}",[102,32452,697],{"class":217},[102,32454,32450],{"class":161},[102,32456,364],{"class":217},[102,32458,32459],{"class":112},".format(epoch,num_epochs",[102,32461,645],{"class":108},[102,32463,330],{"class":161},[102,32465,30488],{"class":112},[102,32467,32468,32470,32472,32475,32477,32479],{"class":104,"line":16753},[102,32469,32442],{"class":161},[102,32471,113],{"class":112},[102,32473,32474],{"class":217},"\"-\"",[102,32476,568],{"class":108},[102,32478,559],{"class":161},[102,32480,119],{"class":112},[102,32482,32483],{"class":104,"line":16759},[102,32484,2389],{"emptyLinePlaceholder":30},[102,32486,32487],{"class":104,"line":16773},[102,32488,32489],{"class":171},"        # 初始化参数\n",[102,32491,32492],{"class":104,"line":16786},[102,32493,32494],{"class":171},"        # 训练集损失函数\n",[102,32496,32497,32500,32502],{"class":104,"line":16791},[102,32498,32499],{"class":112},"        train_loss",[102,32501,158],{"class":108},[102,32503,32333],{"class":161},[102,32505,32506],{"class":104,"line":16805},[102,32507,32508],{"class":171},"        # 训练集准确度\n",[102,32510,32511,32514,32516],{"class":104,"line":16810},[102,32512,32513],{"class":112},"        train_corrects",[102,32515,158],{"class":108},[102,32517,3074],{"class":161},[102,32519,32520],{"class":104,"line":16816},[102,32521,32522],{"class":171},"        # 验证集损失函数\n",[102,32524,32525,32528,32530],{"class":104,"line":16821},[102,32526,32527],{"class":112},"        val_loss",[102,32529,158],{"class":108},[102,32531,32333],{"class":161},[102,32533,32534],{"class":104,"line":16835},[102,32535,32536],{"class":171},"        # 验证集准确度\n",[102,32538,32539,32542,32544],{"class":104,"line":16840},[102,32540,32541],{"class":112},"        val_corrects",[102,32543,158],{"class":108},[102,32545,3074],{"class":161},[102,32547,32548],{"class":104,"line":16845},[102,32549,32550],{"class":171},"        # 训练集样本数量\n",[102,32552,32553,32556,32558],{"class":104,"line":16859},[102,32554,32555],{"class":112},"        train_num",[102,32557,158],{"class":108},[102,32559,3074],{"class":161},[102,32561,32562],{"class":104,"line":16871},[102,32563,32564],{"class":171},"        # 验证集样本数量\n",[102,32566,32567,32570,32572],{"class":104,"line":16876},[102,32568,32569],{"class":112},"        val_num",[102,32571,158],{"class":108},[102,32573,3074],{"class":161},[102,32575,32576],{"class":104,"line":16889},[102,32577,32578],{"class":171},"        # 将数据放到设备,并开始训练\n",[102,32580,32581,32583,32585,32587,32589],{"class":104,"line":16894},[102,32582,3392],{"class":108},[102,32584,31592],{"class":112},[102,32586,26034],{"class":108},[102,32588,31597],{"class":161},[102,32590,32591],{"class":112},"(train_dataloader):\n",[102,32593,32594],{"class":104,"line":16899},[102,32595,32596],{"class":171},"            # 将特征放入到训练设备\n",[102,32598,32599,32602,32604],{"class":104,"line":16904},[102,32600,32601],{"class":112},"            b_x",[102,32603,158],{"class":108},[102,32605,32606],{"class":112},"b_x.to(device)\n",[102,32608,32609],{"class":104,"line":16917},[102,32610,32611],{"class":171},"            # 将标签放入到训练设备当中\n",[102,32613,32614,32617,32619],{"class":104,"line":16922},[102,32615,32616],{"class":112},"            b_y",[102,32618,158],{"class":108},[102,32620,32621],{"class":112},"b_y.to(device)\n",[102,32623,32625],{"class":104,"line":32624},98,[102,32626,32627],{"class":171},"            # 设置模型为训练模式\n",[102,32629,32631],{"class":104,"line":32630},99,[102,32632,32633],{"class":112},"            model.train()\n",[102,32635,32637],{"class":104,"line":32636},100,[102,32638,32639],{"class":171},"            # 将数据放到模型当中,开始前向传播\n",[102,32641,32643],{"class":104,"line":32642},101,[102,32644,32645],{"class":171},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[102,32647,32649,32652,32654],{"class":104,"line":32648},102,[102,32650,32651],{"class":112},"            output",[102,32653,158],{"class":108},[102,32655,32656],{"class":112},"model(b_x)\n",[102,32658,32660],{"class":104,"line":32659},103,[102,32661,32662],{"class":171},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[102,32664,32666,32669,32671,32674,32677,32679,32681],{"class":104,"line":32665},104,[102,32667,32668],{"class":112},"            pre_lab",[102,32670,158],{"class":108},[102,32672,32673],{"class":112},"torch.argmax(output,",[102,32675,32676],{"class":5206},"dim",[102,32678,158],{"class":108},[102,32680,330],{"class":161},[102,32682,119],{"class":112},[102,32684,32686],{"class":104,"line":32685},105,[102,32687,32688],{"class":171},"            # 计算每一个batch的损失函数\n",[102,32690,32692,32695,32697],{"class":104,"line":32691},106,[102,32693,32694],{"class":112},"            loss",[102,32696,158],{"class":108},[102,32698,32699],{"class":112},"criterion(output,b_y)\n",[102,32701,32703],{"class":104,"line":32702},107,[102,32704,32705],{"class":171},"            # 将梯度初始化为0\n",[102,32707,32709],{"class":104,"line":32708},108,[102,32710,32711],{"class":112},"            optimizer.zero_grad()\n",[102,32713,32715],{"class":104,"line":32714},109,[102,32716,32717],{"class":171},"            # 梯度置为0后再进行反向传播\n",[102,32719,32721],{"class":104,"line":32720},110,[102,32722,32723],{"class":112},"            loss.backward()\n",[102,32725,32727],{"class":104,"line":32726},111,[102,32728,32729],{"class":171},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[102,32731,32733],{"class":104,"line":32732},112,[102,32734,32735],{"class":112},"            optimizer.step()\n",[102,32737,32739],{"class":104,"line":32738},113,[102,32740,32741],{"class":171},"            # loss.item()指的是batch的平均损失\n",[102,32743,32745,32748,32750,32753,32755,32758,32760],{"class":104,"line":32744},114,[102,32746,32747],{"class":112},"            train_loss",[102,32749,9467],{"class":108},[102,32751,32752],{"class":112},"loss.item()",[102,32754,568],{"class":108},[102,32756,32757],{"class":112},"b_x.size(",[102,32759,304],{"class":161},[102,32761,119],{"class":112},[102,32763,32765],{"class":104,"line":32764},115,[102,32766,32767],{"class":171},"            # 计算每个批次中正确预测的数量\n",[102,32769,32771,32774,32776,32779,32781],{"class":104,"line":32770},116,[102,32772,32773],{"class":112},"            train_corrects",[102,32775,9467],{"class":108},[102,32777,32778],{"class":112},"torch.sum(pre_lab",[102,32780,2938],{"class":108},[102,32782,32783],{"class":112},"b_y.data)\n",[102,32785,32787],{"class":104,"line":32786},117,[102,32788,32789],{"class":171},"            # 计算目前为止一共处理了多少样本\n",[102,32791,32793,32796,32798,32800,32802],{"class":104,"line":32792},118,[102,32794,32795],{"class":112},"            train_num",[102,32797,9467],{"class":108},[102,32799,32757],{"class":112},[102,32801,304],{"class":161},[102,32803,119],{"class":112},[102,32805,32807],{"class":104,"line":32806},119,[102,32808,32809],{"class":171},"        # 验证数据\n",[102,32811,32813,32815,32818,32820,32822],{"class":104,"line":32812},120,[102,32814,3392],{"class":108},[102,32816,32817],{"class":112}," step ,(b_x,b_y) ",[102,32819,26034],{"class":108},[102,32821,31597],{"class":161},[102,32823,32824],{"class":112},"(val_dataloader):\n",[102,32826,32828],{"class":104,"line":32827},121,[102,32829,32830],{"class":171},"            # 将特征放到验证设备当中\n",[102,32832,32834,32836,32838],{"class":104,"line":32833},122,[102,32835,32601],{"class":112},[102,32837,158],{"class":108},[102,32839,32606],{"class":112},[102,32841,32843],{"class":104,"line":32842},123,[102,32844,32845],{"class":171},"            # 将标签放到放到训练设备当中\n",[102,32847,32849,32851,32853],{"class":104,"line":32848},124,[102,32850,32616],{"class":112},[102,32852,158],{"class":108},[102,32854,32621],{"class":112},[102,32856,32858],{"class":104,"line":32857},125,[102,32859,32860],{"class":171},"            # 开启验证模式，设置模型为评估模式\n",[102,32862,32864],{"class":104,"line":32863},126,[102,32865,32866],{"class":112},"            model.eval()\n",[102,32868,32870,32873],{"class":104,"line":32869},127,[102,32871,32872],{"class":108},"            with",[102,32874,32875],{"class":112}," torch.no_grad():\n",[102,32877,32879],{"class":104,"line":32878},128,[102,32880,32881],{"class":171},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[102,32883,32885,32888,32890],{"class":104,"line":32884},129,[102,32886,32887],{"class":112},"                output ",[102,32889,158],{"class":108},[102,32891,32892],{"class":112}," model(b_x)\n",[102,32894,32896],{"class":104,"line":32895},130,[102,32897,32898],{"class":171},"                # 查找每一行中最大值对应的下标\n",[102,32900,32902,32905,32907,32910,32912,32914,32916],{"class":104,"line":32901},131,[102,32903,32904],{"class":112},"                pre_lab ",[102,32906,158],{"class":108},[102,32908,32909],{"class":112}," torch.argmax(output, ",[102,32911,32676],{"class":5206},[102,32913,158],{"class":108},[102,32915,330],{"class":161},[102,32917,119],{"class":112},[102,32919,32921],{"class":104,"line":32920},132,[102,32922,32923],{"class":171},"                # 计算验证集上的当前 batch 损失\n",[102,32925,32927,32930,32932],{"class":104,"line":32926},133,[102,32928,32929],{"class":112},"                val_batch_loss ",[102,32931,158],{"class":108},[102,32933,32934],{"class":112}," criterion(output, b_y)\n",[102,32936,32938],{"class":104,"line":32937},134,[102,32939,32940],{"class":171},"                # 对损失函数进行累加（按样本数加权）\n",[102,32942,32944,32947,32949,32952,32954,32957,32959],{"class":104,"line":32943},135,[102,32945,32946],{"class":112},"                val_loss ",[102,32948,9467],{"class":108},[102,32950,32951],{"class":112}," val_batch_loss.item() ",[102,32953,568],{"class":108},[102,32955,32956],{"class":112}," b_x.size(",[102,32958,304],{"class":161},[102,32960,119],{"class":112},[102,32962,32964,32967,32969,32972,32974],{"class":104,"line":32963},136,[102,32965,32966],{"class":112},"                val_corrects ",[102,32968,9467],{"class":108},[102,32970,32971],{"class":112}," torch.sum(pre_lab ",[102,32973,2938],{"class":108},[102,32975,32976],{"class":112}," b_y.data)\n",[102,32978,32980],{"class":104,"line":32979},137,[102,32981,32982],{"class":171},"                # 当前用于验证的样本数量\n",[102,32984,32986,32989,32991,32993,32995],{"class":104,"line":32985},138,[102,32987,32988],{"class":112},"            val_num ",[102,32990,9467],{"class":108},[102,32992,32956],{"class":112},[102,32994,304],{"class":161},[102,32996,119],{"class":112},[102,32998,33000],{"class":104,"line":32999},139,[102,33001,33002],{"class":171},"        # 计算并保存每一次迭代的loss值和准确率\n",[102,33004,33006],{"class":104,"line":33005},140,[102,33007,33008],{"class":171},"        # 计算并保存训练集的loss值\n",[102,33010,33012,33015,33017],{"class":104,"line":33011},141,[102,33013,33014],{"class":112},"        train_loss_all.append(train_loss",[102,33016,697],{"class":108},[102,33018,33019],{"class":112},"train_num)\n",[102,33021,33023],{"class":104,"line":33022},142,[102,33024,33025],{"class":171},"        # 取双精度\n",[102,33027,33029],{"class":104,"line":33028},143,[102,33030,33031],{"class":171},"        # 计算并保存训练集的准确率\n",[102,33033,33035,33038,33040],{"class":104,"line":33034},144,[102,33036,33037],{"class":112},"        train_acc_all.append(train_corrects.double().item()",[102,33039,697],{"class":108},[102,33041,33019],{"class":112},[102,33043,33045],{"class":104,"line":33044},145,[102,33046,33047],{"class":171},"        # 计算并保存验证集的loss值\n",[102,33049,33051,33054,33056],{"class":104,"line":33050},146,[102,33052,33053],{"class":112},"        val_loss_all.append(val_loss",[102,33055,697],{"class":108},[102,33057,33058],{"class":112},"val_num)\n",[102,33060,33062],{"class":104,"line":33061},147,[102,33063,33064],{"class":171},"        # 计算并保存验证集的准确率\n",[102,33066,33068,33071,33073],{"class":104,"line":33067},148,[102,33069,33070],{"class":112},"        val_acc_all.append(val_corrects.double().item()",[102,33072,697],{"class":108},[102,33074,33058],{"class":112},[102,33076,33078],{"class":104,"line":33077},149,[102,33079,2389],{"emptyLinePlaceholder":30},[102,33081,33083],{"class":104,"line":33082},150,[102,33084,33085],{"class":171},"        # 打印训练一轮的loss值和准确率\n",[102,33087,33089,33091,33093,33095,33097,33100,33102,33105,33107,33110,33112,33114,33116,33118,33121,33123,33125,33128,33130,33132],{"class":104,"line":33088},151,[102,33090,32442],{"class":161},[102,33092,113],{"class":112},[102,33094,3581],{"class":217},[102,33096,32450],{"class":161},[102,33098,33099],{"class":217},"train loss:",[102,33101,1009],{"class":161},[102,33103,33104],{"class":108},":.4f",[102,33106,1059],{"class":161},[102,33108,33109],{"class":217}," train acc:",[102,33111,1009],{"class":161},[102,33113,33104],{"class":108},[102,33115,1059],{"class":161},[102,33117,3581],{"class":217},[102,33119,33120],{"class":112},".format(epoch,train_loss_all[",[102,33122,645],{"class":108},[102,33124,330],{"class":161},[102,33126,33127],{"class":112},"],train_acc_all[",[102,33129,645],{"class":108},[102,33131,330],{"class":161},[102,33133,33134],{"class":112},"]))\n",[102,33136,33138,33140,33142,33144,33146,33149,33151,33153,33155,33158,33160,33162,33164,33166,33169,33171,33173,33176,33178,33180],{"class":104,"line":33137},152,[102,33139,32442],{"class":161},[102,33141,113],{"class":112},[102,33143,3581],{"class":217},[102,33145,32450],{"class":161},[102,33147,33148],{"class":217},"val loss:",[102,33150,1009],{"class":161},[102,33152,33104],{"class":108},[102,33154,1059],{"class":161},[102,33156,33157],{"class":217}," val acc:",[102,33159,1009],{"class":161},[102,33161,33104],{"class":108},[102,33163,1059],{"class":161},[102,33165,3581],{"class":217},[102,33167,33168],{"class":112},".format(epoch,val_loss_all[",[102,33170,645],{"class":108},[102,33172,330],{"class":161},[102,33174,33175],{"class":112},"],val_acc_all[",[102,33177,645],{"class":108},[102,33179,330],{"class":161},[102,33181,33134],{"class":112},[102,33183,33185],{"class":104,"line":33184},153,[102,33186,2389],{"emptyLinePlaceholder":30},[102,33188,33190],{"class":104,"line":33189},154,[102,33191,33192],{"class":171},"        # 判断准确度--->保存最优模型\n",[102,33194,33196,33198,33201,33203,33205,33207,33209],{"class":104,"line":33195},155,[102,33197,2486],{"class":108},[102,33199,33200],{"class":112}," val_acc_all[",[102,33202,645],{"class":108},[102,33204,330],{"class":161},[102,33206,1053],{"class":112},[102,33208,1073],{"class":108},[102,33210,33211],{"class":112},"best_acc:\n",[102,33213,33215],{"class":104,"line":33214},156,[102,33216,33217],{"class":171},"            # 保存当前模型准确度\n",[102,33219,33221,33224,33226,33228,33231,33233,33235],{"class":104,"line":33220},157,[102,33222,33223],{"class":112},"            best_acc:",[102,33225,152],{"class":161},[102,33227,158],{"class":108},[102,33229,33230],{"class":112},"val_acc_all[",[102,33232,645],{"class":108},[102,33234,330],{"class":161},[102,33236,33237],{"class":112},"]\n",[102,33239,33241],{"class":104,"line":33240},158,[102,33242,33243],{"class":171},"            # 保存当前的准确度\n",[102,33245,33247],{"class":104,"line":33246},159,[102,33248,33249],{"class":171},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[102,33251,33253,33256,33258],{"class":104,"line":33252},160,[102,33254,33255],{"class":112},"            best_model_wts",[102,33257,158],{"class":108},[102,33259,32305],{"class":112},[102,33261,33263],{"class":104,"line":33262},161,[102,33264,2389],{"emptyLinePlaceholder":30},[102,33266,33268],{"class":104,"line":33267},162,[102,33269,33270],{"class":171},"        # 计算耗时\n",[102,33272,33274,33277,33279,33282,33284],{"class":104,"line":33273},163,[102,33275,33276],{"class":112},"        time_use",[102,33278,158],{"class":108},[102,33280,33281],{"class":112},"time.time()",[102,33283,645],{"class":108},[102,33285,33286],{"class":112},"since\n",[102,33288,33290,33292,33294,33297,33299,33302,33304,33306,33308,33310,33312,33315,33318,33321,33323,33326,33328,33330],{"class":104,"line":33289},164,[102,33291,32442],{"class":161},[102,33293,113],{"class":112},[102,33295,33296],{"class":217},"'训练和验证耗费的时间",[102,33298,1009],{"class":161},[102,33300,33301],{"class":108},":.0f",[102,33303,1059],{"class":161},[102,33305,657],{"class":217},[102,33307,1009],{"class":161},[102,33309,33301],{"class":108},[102,33311,1059],{"class":161},[102,33313,33314],{"class":217},"s'",[102,33316,33317],{"class":112},".format(time_use",[102,33319,33320],{"class":108},"\u002F\u002F",[102,33322,1020],{"class":161},[102,33324,33325],{"class":112},",time_use",[102,33327,441],{"class":108},[102,33329,1020],{"class":161},[102,33331,30488],{"class":112},[102,33333,33335],{"class":104,"line":33334},165,[102,33336,33337],{"class":171},"    # 选择最优参数\n",[102,33339,33341],{"class":104,"line":33340},166,[102,33342,33343],{"class":171},"    # 加载最高准确率下的模型参数\n",[102,33345,33347],{"class":104,"line":33346},167,[102,33348,33349],{"class":171},"    # model.load_state_dict(best_model_wts)\n",[102,33351,33353,33356,33359],{"class":104,"line":33352},168,[102,33354,33355],{"class":112},"    torch.save(model.state_dict(best_model_wts), ",[102,33357,33358],{"class":217},"'.\u002Fbest_model.pth'",[102,33360,119],{"class":112},[102,33362,33364],{"class":104,"line":33363},169,[102,33365,33366],{"class":171},"    # 或者写成\n",[102,33368,33370],{"class":104,"line":33369},170,[102,33371,33372],{"class":171},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[102,33374,33376],{"class":104,"line":33375},171,[102,33377,33378],{"class":171},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[102,33380,33382,33385,33387,33390,33393,33395],{"class":104,"line":33381},172,[102,33383,33384],{"class":112},"    train_process",[102,33386,158],{"class":108},[102,33388,33389],{"class":112},"pd.DataFrame(",[102,33391,33392],{"class":5206},"data",[102,33394,158],{"class":108},[102,33396,1535],{"class":112},[102,33398,33400,33403,33405,33408],{"class":104,"line":33399},173,[102,33401,33402],{"class":217},"        \"epoch\"",[102,33404,972],{"class":112},[102,33406,33407],{"class":161},"range",[102,33409,33410],{"class":112},"(num_epochs),\n",[102,33412,33414,33417],{"class":104,"line":33413},174,[102,33415,33416],{"class":217},"        \"train_loss_all\"",[102,33418,33419],{"class":112},":train_loss_all,\n",[102,33421,33423,33426],{"class":104,"line":33422},175,[102,33424,33425],{"class":217},"        \"val_loss_all\"",[102,33427,33428],{"class":112},":val_loss_all,\n",[102,33430,33432,33435],{"class":104,"line":33431},176,[102,33433,33434],{"class":217},"        \"train_acc_all\"",[102,33436,33437],{"class":112},":train_acc_all,\n",[102,33439,33441,33444],{"class":104,"line":33440},177,[102,33442,33443],{"class":217},"        \"val_acc_all\"",[102,33445,33446],{"class":112},":val_acc_all\n",[102,33448,33450],{"class":104,"line":33449},178,[102,33451,33452],{"class":112},"    })\n",[102,33454,33456],{"class":104,"line":33455},179,[102,33457,33458],{"class":171},"    # 返回训练保存的过程\n",[102,33460,33462,33464],{"class":104,"line":33461},180,[102,33463,4079],{"class":108},[102,33465,33466],{"class":112}," train_process\n",[102,33468,33470],{"class":104,"line":33469},181,[102,33471,2389],{"emptyLinePlaceholder":30},[102,33473,33475],{"class":104,"line":33474},182,[102,33476,33477],{"class":171},"# 将loss值和精度按照图片的形式展示出来\n",[102,33479,33481,33483,33486],{"class":104,"line":33480},183,[102,33482,31938],{"class":108},[102,33484,33485],{"class":1952}," matplot_acc_loss",[102,33487,33488],{"class":112},"(train_process):\n",[102,33490,33492],{"class":104,"line":33491},184,[102,33493,33494],{"class":171},"    # 设置图的大小\n",[102,33496,33498,33501,33503,33505,33507,33509,33511,33513],{"class":104,"line":33497},185,[102,33499,33500],{"class":112},"    plt.figure(",[102,33502,31684],{"class":5206},[102,33504,158],{"class":108},[102,33506,113],{"class":112},[102,33508,611],{"class":161},[102,33510,491],{"class":112},[102,33512,406],{"class":161},[102,33514,30488],{"class":112},[102,33516,33518],{"class":104,"line":33517},186,[102,33519,33520],{"class":171},"    # 设置图中有几张图\n",[102,33522,33524],{"class":104,"line":33523},187,[102,33525,33526],{"class":171},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[102,33528,33530],{"class":104,"line":33529},188,[102,33531,33532],{"class":171},"    # ①loss图\n",[102,33534,33536,33538,33540,33542,33544,33546,33548],{"class":104,"line":33535},189,[102,33537,31718],{"class":112},[102,33539,330],{"class":161},[102,33541,491],{"class":112},[102,33543,190],{"class":161},[102,33545,491],{"class":112},[102,33547,330],{"class":161},[102,33549,119],{"class":112},[102,33551,33553],{"class":104,"line":33552},190,[102,33554,33555],{"class":171},"    # 补充:\n",[102,33557,33559],{"class":104,"line":33558},191,[102,33560,33561],{"class":171},"    # plt.subplot(nrows, ncols, index)\n",[102,33563,33565],{"class":104,"line":33564},192,[102,33566,33567],{"class":171},"    # nrows：行数\n",[102,33569,33571],{"class":104,"line":33570},193,[102,33572,33573],{"class":171},"    # ncols：列数\n",[102,33575,33577],{"class":104,"line":33576},194,[102,33578,33579],{"class":171},"    # index：目前选中第几个子图（从1开始）\n",[102,33581,33583,33586,33589,33592,33595,33597,33600,33602,33605],{"class":104,"line":33582},195,[102,33584,33585],{"class":112},"    plt.plot(train_process[",[102,33587,33588],{"class":217},"\"epoch\"",[102,33590,33591],{"class":112},"],train_process.train_loss_all,",[102,33593,33594],{"class":217},"'ro-'",[102,33596,491],{"class":112},[102,33598,33599],{"class":5206},"label",[102,33601,158],{"class":108},[102,33603,33604],{"class":217},"'train loss'",[102,33606,119],{"class":112},[102,33608,33610,33612,33614,33617,33620,33622,33624,33626,33629],{"class":104,"line":33609},196,[102,33611,33585],{"class":112},[102,33613,33588],{"class":217},[102,33615,33616],{"class":112},"],train_process.val_loss_all,",[102,33618,33619],{"class":217},"'bs--'",[102,33621,491],{"class":112},[102,33623,33599],{"class":5206},[102,33625,158],{"class":108},[102,33627,33628],{"class":217},"'val loss'",[102,33630,119],{"class":112},[102,33632,33634],{"class":104,"line":33633},197,[102,33635,33636],{"class":171},"    # 添加一个图例\n",[102,33638,33640],{"class":104,"line":33639},198,[102,33641,33642],{"class":112},"    plt.legend()\n",[102,33644,33646],{"class":104,"line":33645},199,[102,33647,33648],{"class":171},"    # 给轴添加标签\n",[102,33650,33652,33655,33658],{"class":104,"line":33651},200,[102,33653,33654],{"class":112},"    plt.xlabel(",[102,33656,33657],{"class":217},"'epoch'",[102,33659,119],{"class":112},[102,33661,33663,33666,33669],{"class":104,"line":33662},201,[102,33664,33665],{"class":112},"    plt.ylabel(",[102,33667,33668],{"class":217},"'loss'",[102,33670,119],{"class":112},[102,33672,33674],{"class":104,"line":33673},202,[102,33675,33676],{"class":171},"    # ②准确度图\n",[102,33678,33680,33682,33684,33686,33688,33690,33692],{"class":104,"line":33679},203,[102,33681,31718],{"class":112},[102,33683,330],{"class":161},[102,33685,491],{"class":112},[102,33687,190],{"class":161},[102,33689,491],{"class":112},[102,33691,190],{"class":161},[102,33693,119],{"class":112},[102,33695,33697,33699,33701,33704,33706,33708,33710,33712,33715],{"class":104,"line":33696},204,[102,33698,33585],{"class":112},[102,33700,33588],{"class":217},[102,33702,33703],{"class":112},"],train_process.train_acc_all,",[102,33705,33594],{"class":217},[102,33707,491],{"class":112},[102,33709,33599],{"class":5206},[102,33711,158],{"class":108},[102,33713,33714],{"class":217},"'train acc'",[102,33716,119],{"class":112},[102,33718,33720,33722,33724,33727,33729,33731,33733,33735,33738],{"class":104,"line":33719},205,[102,33721,33585],{"class":112},[102,33723,33588],{"class":217},[102,33725,33726],{"class":112},"],train_process.val_acc_all,",[102,33728,33619],{"class":217},[102,33730,491],{"class":112},[102,33732,33599],{"class":5206},[102,33734,158],{"class":108},[102,33736,33737],{"class":217},"'val acc'",[102,33739,119],{"class":112},[102,33741,33743],{"class":104,"line":33742},206,[102,33744,33745],{"class":171},"    # 添加图例\n",[102,33747,33749],{"class":104,"line":33748},207,[102,33750,33642],{"class":112},[102,33752,33754,33756,33758],{"class":104,"line":33753},208,[102,33755,33654],{"class":112},[102,33757,33588],{"class":217},[102,33759,119],{"class":112},[102,33761,33763,33765,33768],{"class":104,"line":33762},209,[102,33764,33665],{"class":112},[102,33766,33767],{"class":217},"\"acc\"",[102,33769,119],{"class":112},[102,33771,33773],{"class":104,"line":33772},210,[102,33774,33775],{"class":112},"    plt.show()\n",[102,33777,33779],{"class":104,"line":33778},211,[102,33780,2389],{"emptyLinePlaceholder":30},[102,33782,33784],{"class":104,"line":33783},212,[102,33785,33786],{"class":171},"# 正式开始训练:\n",[102,33788,33790,33792,33794,33796,33798],{"class":104,"line":33789},213,[102,33791,1520],{"class":108},[102,33793,31211],{"class":161},[102,33795,2938],{"class":108},[102,33797,31216],{"class":217},[102,33799,3728],{"class":112},[102,33801,33803],{"class":104,"line":33802},214,[102,33804,33805],{"class":171},"    # 将模型实例化\n",[102,33807,33809,33812,33814],{"class":104,"line":33808},215,[102,33810,33811],{"class":112},"    LeNet",[102,33813,158],{"class":108},[102,33815,33816],{"class":112},"LeNet()\n",[102,33818,33820,33823,33825],{"class":104,"line":33819},216,[102,33821,33822],{"class":112},"    train_dataloader,val_dataloader",[102,33824,158],{"class":108},[102,33826,33827],{"class":112},"train_val_data_process()\n",[102,33829,33831,33833,33835,33838,33841,33843,33845],{"class":104,"line":33830},217,[102,33832,33384],{"class":112},[102,33834,158],{"class":108},[102,33836,33837],{"class":112},"train_model_process(LeNet,train_dataloader,val_dataloader,",[102,33839,33840],{"class":5206},"num_epochs",[102,33842,158],{"class":108},[102,33844,813],{"class":161},[102,33846,119],{"class":112},[102,33848,33850],{"class":104,"line":33849},218,[102,33851,33852],{"class":112},"    matplot_acc_loss(train_process)\n",[19,33854,33855],{},"画图的补充点学习：",[19,33857,33858],{},[1451,33859],{"alt":23,"src":33860},"\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",[56,33862,33863],{"start":1168},[59,33864,33865],{},"测试",[93,33867,33869],{"className":30369,"code":33868,"language":30371,"meta":23,"style":23},"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",[99,33870,33871,33877,33887,33899,33909,33914,33924,33934,33938,33943,33952,33969,33981,33998,34009,34025,34030,34041,34052,34063,34070,34074,34079,34089,34094,34111,34119,34123,34128,34137,34146,34150,34155,34160,34165,34172,34177,34189,34199,34209,34214,34218,34223,34232,34237,34253,34258,34263,34268,34282,34287,34301,34305,34310,34325,34330,34342,34346,34351,34363,34368,34376,34381,34386,34396,34401,34410,34415,34420,34424,34429,34434,34450,34458,34463,34468,34527,34533,34538,34549,34557,34565,34569,34574,34578,34583,34591,34596,34612,34617,34627,34637],{"__ignoreMap":23},[102,33872,33873,33875],{"class":104,"line":105},[102,33874,30383],{"class":108},[102,33876,30386],{"class":112},[102,33878,33879,33881,33883,33885],{"class":104,"line":24},[102,33880,30383],{"class":108},[102,33882,31406],{"class":112},[102,33884,31374],{"class":108},[102,33886,31411],{"class":112},[102,33888,33889,33891,33894,33896],{"class":104,"line":1168},[102,33890,30728],{"class":108},[102,33892,33893],{"class":112}," jupyter_client.consoleapp ",[102,33895,30383],{"class":108},[102,33897,33898],{"class":112}," classes\n",[102,33900,33901,33903,33905,33907],{"class":104,"line":1183},[102,33902,30728],{"class":108},[102,33904,31389],{"class":112},[102,33906,30383],{"class":108},[102,33908,31394],{"class":112},[102,33910,33911],{"class":104,"line":1189},[102,33912,33913],{"class":171},"# 导入数据集\n",[102,33915,33916,33918,33920,33922],{"class":104,"line":1203},[102,33917,30728],{"class":108},[102,33919,31359],{"class":112},[102,33921,30383],{"class":108},[102,33923,31364],{"class":112},[102,33925,33926,33928,33930,33932],{"class":104,"line":1209},[102,33927,30728],{"class":108},[102,33929,31905],{"class":112},[102,33931,30383],{"class":108},[102,33933,31910],{"class":112},[102,33935,33936],{"class":104,"line":1300},[102,33937,2389],{"emptyLinePlaceholder":30},[102,33939,33940],{"class":104,"line":1306},[102,33941,33942],{"class":171},"# 测试数据处理\n",[102,33944,33945,33947,33950],{"class":104,"line":1318},[102,33946,31938],{"class":108},[102,33948,33949],{"class":1952}," test_data_process",[102,33951,31944],{"class":112},[102,33953,33954,33957,33959,33961,33963,33965,33967],{"class":104,"line":1601},[102,33955,33956],{"class":112},"    test_data",[102,33958,158],{"class":108},[102,33960,31446],{"class":112},[102,33962,31449],{"class":5206},[102,33964,158],{"class":108},[102,33966,31454],{"class":217},[102,33968,31457],{"class":112},[102,33970,33971,33974,33976,33979],{"class":104,"line":1606},[102,33972,33973],{"class":5206},"                           train",[102,33975,158],{"class":108},[102,33977,33978],{"class":161},"False",[102,33980,31457],{"class":112},[102,33982,33983,33986,33988,33990,33992,33994,33996],{"class":104,"line":1612},[102,33984,33985],{"class":5206},"                           transform",[102,33987,158],{"class":108},[102,33989,31484],{"class":112},[102,33991,31487],{"class":5206},[102,33993,158],{"class":108},[102,33995,1014],{"class":161},[102,33997,31495],{"class":112},[102,33999,34000,34003,34005,34007],{"class":104,"line":1617},[102,34001,34002],{"class":5206},"                           download",[102,34004,158],{"class":108},[102,34006,31467],{"class":161},[102,34008,119],{"class":112},[102,34010,34011,34014,34016,34018,34020,34022],{"class":104,"line":1631},[102,34012,34013],{"class":112},"    test_dataloader",[102,34015,158],{"class":108},[102,34017,31525],{"class":112},[102,34019,31528],{"class":5206},[102,34021,158],{"class":108},[102,34023,34024],{"class":112},"test_data,\n",[102,34026,34027],{"class":104,"line":1636},[102,34028,34029],{"class":171},"                                    # 这里是一张一张进行测试\n",[102,34031,34032,34035,34037,34039],{"class":104,"line":1642},[102,34033,34034],{"class":5206},"                                    batch_size",[102,34036,158],{"class":108},[102,34038,330],{"class":161},[102,34040,31457],{"class":112},[102,34042,34043,34046,34048,34050],{"class":104,"line":1663},[102,34044,34045],{"class":5206},"                                    shuffle",[102,34047,158],{"class":108},[102,34049,31467],{"class":161},[102,34051,31457],{"class":112},[102,34053,34054,34057,34059,34061],{"class":104,"line":1668},[102,34055,34056],{"class":5206},"                                    num_workers",[102,34058,158],{"class":108},[102,34060,304],{"class":161},[102,34062,119],{"class":112},[102,34064,34065,34067],{"class":104,"line":1682},[102,34066,4079],{"class":108},[102,34068,34069],{"class":112}," test_dataloader\n",[102,34071,34072],{"class":104,"line":1687},[102,34073,2389],{"emptyLinePlaceholder":30},[102,34075,34076],{"class":104,"line":1716},[102,34077,34078],{"class":171},"# 定义模型测试函数\n",[102,34080,34081,34083,34086],{"class":104,"line":1721},[102,34082,31938],{"class":108},[102,34084,34085],{"class":1952}," test_model_process",[102,34087,34088],{"class":112},"(model,test_dataloader):\n",[102,34090,34091],{"class":104,"line":1738},[102,34092,34093],{"class":171},"    # 将模型放到设备当中，先进行判断\n",[102,34095,34096,34098,34100,34102,34104,34106,34108],{"class":104,"line":1743},[102,34097,31228],{"class":112},[102,34099,158],{"class":108},[102,34101,31235],{"class":217},[102,34103,1693],{"class":108},[102,34105,31240],{"class":112},[102,34107,1690],{"class":108},[102,34109,34110],{"class":217}," \"cpu\"\n",[102,34112,34113,34115,34117],{"class":104,"line":1748},[102,34114,31280],{"class":112},[102,34116,158],{"class":108},[102,34118,32280],{"class":112},[102,34120,34121],{"class":104,"line":1753},[102,34122,2389],{"emptyLinePlaceholder":30},[102,34124,34125],{"class":104,"line":1767},[102,34126,34127],{"class":171},"    # 设置初始化参数\n",[102,34129,34130,34133,34135],{"class":104,"line":1772},[102,34131,34132],{"class":112},"    test_corrects",[102,34134,158],{"class":108},[102,34136,32333],{"class":161},[102,34138,34139,34142,34144],{"class":104,"line":2566},[102,34140,34141],{"class":112},"    test_num",[102,34143,158],{"class":108},[102,34145,3074],{"class":161},[102,34147,34148],{"class":104,"line":2580},[102,34149,2389],{"emptyLinePlaceholder":30},[102,34151,34152],{"class":104,"line":2588},[102,34153,34154],{"class":171},"    # 进行模型测试\n",[102,34156,34157],{"class":104,"line":2593},[102,34158,34159],{"class":171},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[102,34161,34162],{"class":104,"line":2599},[102,34163,34164],{"class":171},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[102,34166,34167,34170],{"class":104,"line":2605},[102,34168,34169],{"class":108},"    with",[102,34171,32875],{"class":112},[102,34173,34174],{"class":104,"line":2610},[102,34175,34176],{"class":171},"        # 从数据中进行\n",[102,34178,34179,34181,34184,34186],{"class":104,"line":7938},[102,34180,3392],{"class":108},[102,34182,34183],{"class":112}," test_data_x,test_data_y ",[102,34185,26034],{"class":108},[102,34187,34188],{"class":112}," test_dataloader:\n",[102,34190,34191,34194,34196],{"class":104,"line":7962},[102,34192,34193],{"class":112},"            test_data_x",[102,34195,158],{"class":108},[102,34197,34198],{"class":112},"test_data_x.to(device)\n",[102,34200,34201,34204,34206],{"class":104,"line":7967},[102,34202,34203],{"class":112},"            test_data_y",[102,34205,158],{"class":108},[102,34207,34208],{"class":112},"test_data_y.to(device)\n",[102,34210,34211],{"class":104,"line":7973},[102,34212,34213],{"class":171},"            # 设置为验证模式\n",[102,34215,34216],{"class":104,"line":8000},[102,34217,32866],{"class":112},[102,34219,34220],{"class":104,"line":8005},[102,34221,34222],{"class":171},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[102,34224,34225,34227,34229],{"class":104,"line":8011},[102,34226,32651],{"class":112},[102,34228,158],{"class":108},[102,34230,34231],{"class":112},"model(test_data_x)\n",[102,34233,34234],{"class":104,"line":8023},[102,34235,34236],{"class":171},"            # 查找每一行中最大值对应的下标\n",[102,34238,34239,34241,34243,34245,34247,34249,34251],{"class":104,"line":8035},[102,34240,32668],{"class":112},[102,34242,158],{"class":108},[102,34244,32673],{"class":112},[102,34246,32676],{"class":5206},[102,34248,158],{"class":108},[102,34250,330],{"class":161},[102,34252,119],{"class":112},[102,34254,34255],{"class":104,"line":8047},[102,34256,34257],{"class":171},"            # 计算正确率\n",[102,34259,34260],{"class":104,"line":9706},[102,34261,34262],{"class":171},"            # .data表示是一个不带梯度信息的tensor\n",[102,34264,34265],{"class":104,"line":9731},[102,34266,34267],{"class":171},"            # 如果预测正确，则准确度test_corrects加1\n",[102,34269,34270,34273,34275,34277,34279],{"class":104,"line":9754},[102,34271,34272],{"class":112},"            test_corrects",[102,34274,9467],{"class":108},[102,34276,32778],{"class":112},[102,34278,2938],{"class":108},[102,34280,34281],{"class":112},"test_data_y.data)\n",[102,34283,34284],{"class":104,"line":9778},[102,34285,34286],{"class":171},"            # 将所有的测试样本进行累计\n",[102,34288,34289,34292,34294,34297,34299],{"class":104,"line":9783},[102,34290,34291],{"class":112},"            test_num",[102,34293,9467],{"class":108},[102,34295,34296],{"class":112},"test_data_x.size(",[102,34298,304],{"class":161},[102,34300,119],{"class":112},[102,34302,34303],{"class":104,"line":9788},[102,34304,2389],{"emptyLinePlaceholder":30},[102,34306,34307],{"class":104,"line":9793},[102,34308,34309],{"class":171},"        # 计算准确度\n",[102,34311,34312,34315,34317,34320,34322],{"class":104,"line":9802},[102,34313,34314],{"class":112},"        test_acc",[102,34316,158],{"class":108},[102,34318,34319],{"class":112},"test_corrects.double().item()",[102,34321,697],{"class":108},[102,34323,34324],{"class":112},"test_num\n",[102,34326,34327],{"class":104,"line":9807},[102,34328,34329],{"class":171},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[102,34331,34332,34334,34336,34339],{"class":104,"line":9813},[102,34333,32442],{"class":161},[102,34335,113],{"class":112},[102,34337,34338],{"class":217},"\"测试的准确率：\"",[102,34340,34341],{"class":112},",test_acc)\n",[102,34343,34344],{"class":104,"line":9834},[102,34345,2389],{"emptyLinePlaceholder":30},[102,34347,34348],{"class":104,"line":9840},[102,34349,34350],{"class":171},"# 实现模型的测试功能\n",[102,34352,34353,34355,34357,34359,34361],{"class":104,"line":9854},[102,34354,1520],{"class":108},[102,34356,31211],{"class":161},[102,34358,2938],{"class":108},[102,34360,31216],{"class":217},[102,34362,3728],{"class":112},[102,34364,34365],{"class":104,"line":9860},[102,34366,34367],{"class":171},"    # 加载模型\n",[102,34369,34370,34372,34374],{"class":104,"line":9887},[102,34371,31280],{"class":112},[102,34373,158],{"class":108},[102,34375,33816],{"class":112},[102,34377,34378],{"class":104,"line":9896},[102,34379,34380],{"class":171},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[102,34382,34383],{"class":104,"line":9902},[102,34384,34385],{"class":171},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[102,34387,34388,34391,34394],{"class":104,"line":9910},[102,34389,34390],{"class":112},"    model.load_state_dict(torch.load(",[102,34392,34393],{"class":217},"'best_model.pth'",[102,34395,30488],{"class":112},[102,34397,34398],{"class":104,"line":9915},[102,34399,34400],{"class":171},"    # 数据加载\n",[102,34402,34403,34405,34407],{"class":104,"line":16594},[102,34404,34013],{"class":112},[102,34406,158],{"class":108},[102,34408,34409],{"class":112},"test_data_process()\n",[102,34411,34412],{"class":104,"line":16600},[102,34413,34414],{"class":171},"    # 加载模型测试的函数\n",[102,34416,34417],{"class":104,"line":16623},[102,34418,34419],{"class":112},"    test_model_process(model,test_dataloader)\n",[102,34421,34422],{"class":104,"line":16629},[102,34423,2389],{"emptyLinePlaceholder":30},[102,34425,34426],{"class":104,"line":16652},[102,34427,34428],{"class":171},"    # 验证集推理实现：\n",[102,34430,34431],{"class":104,"line":16666},[102,34432,34433],{"class":171},"    # 加载数据加载的更详细一些\n",[102,34435,34436,34438,34440,34442,34444,34446,34448],{"class":104,"line":16686},[102,34437,31228],{"class":112},[102,34439,158],{"class":108},[102,34441,31235],{"class":217},[102,34443,1693],{"class":108},[102,34445,31240],{"class":112},[102,34447,1690],{"class":108},[102,34449,34110],{"class":217},[102,34451,34452,34454,34456],{"class":104,"line":16692},[102,34453,31280],{"class":112},[102,34455,158],{"class":108},[102,34457,32280],{"class":112},[102,34459,34460],{"class":104,"line":16703},[102,34461,34462],{"class":171},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[102,34464,34465],{"class":104,"line":16726},[102,34466,34467],{"class":171},"    # 顺序不可改变\n",[102,34469,34470,34473,34475,34477,34480,34482,34485,34487,34490,34492,34495,34497,34500,34502,34505,34507,34510,34512,34515,34517,34520,34522,34525],{"class":104,"line":16748},[102,34471,34472],{"class":112},"    classes",[102,34474,158],{"class":108},[102,34476,1003],{"class":112},[102,34478,34479],{"class":217},"'T-shirt\u002Ftop'",[102,34481,491],{"class":112},[102,34483,34484],{"class":217},"'Trouser'",[102,34486,491],{"class":112},[102,34488,34489],{"class":217},"'Pullover'",[102,34491,491],{"class":112},[102,34493,34494],{"class":217},"'Dress'",[102,34496,491],{"class":112},[102,34498,34499],{"class":217},"'Coat'",[102,34501,491],{"class":112},[102,34503,34504],{"class":217},"'Sandal'",[102,34506,491],{"class":112},[102,34508,34509],{"class":217},"'Shirt'",[102,34511,491],{"class":112},[102,34513,34514],{"class":217},"'Sneaker'",[102,34516,491],{"class":112},[102,34518,34519],{"class":217},"'Bag'",[102,34521,491],{"class":112},[102,34523,34524],{"class":217},"'Ankle boot'",[102,34526,33237],{"class":112},[102,34528,34529,34531],{"class":104,"line":16753},[102,34530,34169],{"class":108},[102,34532,32875],{"class":112},[102,34534,34535],{"class":104,"line":16759},[102,34536,34537],{"class":171},"        # 将数据和标签都放到设备当中\n",[102,34539,34540,34542,34545,34547],{"class":104,"line":16773},[102,34541,3392],{"class":108},[102,34543,34544],{"class":112}," b_x,b_y ",[102,34546,26034],{"class":108},[102,34548,34188],{"class":112},[102,34550,34551,34553,34555],{"class":104,"line":16786},[102,34552,32601],{"class":112},[102,34554,158],{"class":108},[102,34556,32606],{"class":112},[102,34558,34559,34561,34563],{"class":104,"line":16791},[102,34560,32616],{"class":112},[102,34562,158],{"class":108},[102,34564,32621],{"class":112},[102,34566,34567],{"class":104,"line":16805},[102,34568,2389],{"emptyLinePlaceholder":30},[102,34570,34571],{"class":104,"line":16810},[102,34572,34573],{"class":171},"            # 设置模型为验证模式\n",[102,34575,34576],{"class":104,"line":16816},[102,34577,32866],{"class":112},[102,34579,34580],{"class":104,"line":16821},[102,34581,34582],{"class":171},"            # 模型推理结果\n",[102,34584,34585,34587,34589],{"class":104,"line":16835},[102,34586,32651],{"class":112},[102,34588,158],{"class":108},[102,34590,32656],{"class":112},[102,34592,34593],{"class":104,"line":16840},[102,34594,34595],{"class":171},"            # 获取最大下标，最大下标就是类别号\n",[102,34597,34598,34600,34602,34604,34606,34608,34610],{"class":104,"line":16845},[102,34599,32668],{"class":112},[102,34601,158],{"class":108},[102,34603,32673],{"class":112},[102,34605,32676],{"class":5206},[102,34607,158],{"class":108},[102,34609,330],{"class":161},[102,34611,119],{"class":112},[102,34613,34614],{"class":104,"line":16859},[102,34615,34616],{"class":171},"            # 取出张量中的数值\n",[102,34618,34619,34622,34624],{"class":104,"line":16871},[102,34620,34621],{"class":112},"            result",[102,34623,158],{"class":108},[102,34625,34626],{"class":112},"pre_lab.item()\n",[102,34628,34629,34632,34634],{"class":104,"line":16876},[102,34630,34631],{"class":112},"            label",[102,34633,158],{"class":108},[102,34635,34636],{"class":112},"b_y.item()\n",[102,34638,34639,34642,34644,34647,34650,34653,34655,34658],{"class":104,"line":16889},[102,34640,34641],{"class":161},"            print",[102,34643,113],{"class":112},[102,34645,34646],{"class":217},"\"预测值：\"",[102,34648,34649],{"class":112},",classes[result],",[102,34651,34652],{"class":217},"\"------\"",[102,34654,491],{"class":112},[102,34656,34657],{"class":217},"\"真实值：\"",[102,34659,34660],{"class":112},",classes[label])\n",[19,34662,34663],{},"（2）AlexNet",[56,34665,34666],{},[59,34667,34668],{},"神经网络构建",[93,34670,34672],{"className":30369,"code":34671,"language":30371,"meta":23,"style":23},"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",[99,34673,34674,34680,34690,34700,34712,34716,34733,34741,34756,34768,34810,34837,34880,34906,34950,34993,35036,35063,35067,35077,35082,35110,35129,35148,35152,35157,35165,35180,35190,35204,35214,35229,35244,35259,35270,35274,35279,35289,35304,35309,35323,35338,35350,35355,35366,35371,35377,35382,35394,35414,35419,35428],{"__ignoreMap":23},[102,34675,34676,34678],{"class":104,"line":105},[102,34677,30383],{"class":108},[102,34679,30386],{"class":112},[102,34681,34682,34684,34686,34688],{"class":104,"line":24},[102,34683,30728],{"class":108},[102,34685,30731],{"class":112},[102,34687,30383],{"class":108},[102,34689,30736],{"class":112},[102,34691,34692,34694,34696,34698],{"class":104,"line":1168},[102,34693,30728],{"class":108},[102,34695,30748],{"class":112},[102,34697,30383],{"class":108},[102,34699,30753],{"class":112},[102,34701,34702,34704,34707,34709],{"class":104,"line":1183},[102,34703,30383],{"class":108},[102,34705,34706],{"class":112}," torch.nn.functional ",[102,34708,31374],{"class":108},[102,34710,34711],{"class":112}," F\n",[102,34713,34714],{"class":104,"line":1189},[102,34715,2389],{"emptyLinePlaceholder":30},[102,34717,34718,34720,34723,34725,34727,34729,34731],{"class":104,"line":1203},[102,34719,14684],{"class":108},[102,34721,34722],{"class":1952}," AlexNet",[102,34724,113],{"class":112},[102,34726,30769],{"class":1952},[102,34728,671],{"class":112},[102,34730,30774],{"class":1952},[102,34732,30777],{"class":112},[102,34734,34735,34737,34739],{"class":104,"line":1209},[102,34736,30792],{"class":108},[102,34738,30795],{"class":161},[102,34740,30798],{"class":112},[102,34742,34743,34745,34748,34750,34752,34754],{"class":104,"line":1300},[102,34744,30808],{"class":161},[102,34746,34747],{"class":112},"(AlexNet,",[102,34749,30814],{"class":161},[102,34751,30817],{"class":112},[102,34753,30820],{"class":161},[102,34755,1965],{"class":112},[102,34757,34758,34760,34763,34765],{"class":104,"line":1306},[102,34759,30836],{"class":161},[102,34761,34762],{"class":112},".ReLu",[102,34764,158],{"class":108},[102,34766,34767],{"class":112},"nn.ReLU()\n",[102,34769,34770,34772,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792,34794,34796,34798,34800,34802,34804,34806,34808],{"class":104,"line":1318},[102,34771,30836],{"class":161},[102,34773,30839],{"class":112},[102,34775,158],{"class":108},[102,34777,30844],{"class":112},[102,34779,30847],{"class":5206},[102,34781,158],{"class":108},[102,34783,330],{"class":161},[102,34785,491],{"class":112},[102,34787,30856],{"class":5206},[102,34789,158],{"class":108},[102,34791,322],{"class":161},[102,34793,491],{"class":112},[102,34795,30865],{"class":5206},[102,34797,158],{"class":108},[102,34799,585],{"class":161},[102,34801,491],{"class":112},[102,34803,30920],{"class":5206},[102,34805,158],{"class":108},[102,34807,406],{"class":161},[102,34809,119],{"class":112},[102,34811,34812,34814,34816,34818,34821,34823,34825,34827,34829,34831,34833,34835],{"class":104,"line":1601},[102,34813,30836],{"class":161},[102,34815,30904],{"class":112},[102,34817,158],{"class":108},[102,34819,34820],{"class":112},"nn.MaxPool2d(",[102,34822,30865],{"class":5206},[102,34824,158],{"class":108},[102,34826,184],{"class":161},[102,34828,491],{"class":112},[102,34830,30920],{"class":5206},[102,34832,158],{"class":108},[102,34834,190],{"class":161},[102,34836,119],{"class":112},[102,34838,34839,34841,34843,34845,34847,34849,34851,34853,34855,34857,34859,34862,34864,34866,34868,34870,34872,34874,34876,34878],{"class":104,"line":1606},[102,34840,30836],{"class":161},[102,34842,30933],{"class":112},[102,34844,158],{"class":108},[102,34846,30844],{"class":112},[102,34848,30847],{"class":5206},[102,34850,158],{"class":108},[102,34852,322],{"class":161},[102,34854,491],{"class":112},[102,34856,30856],{"class":5206},[102,34858,158],{"class":108},[102,34860,34861],{"class":161},"256",[102,34863,491],{"class":112},[102,34865,30865],{"class":5206},[102,34867,158],{"class":108},[102,34869,432],{"class":161},[102,34871,491],{"class":112},[102,34873,30874],{"class":5206},[102,34875,158],{"class":108},[102,34877,190],{"class":161},[102,34879,119],{"class":112},[102,34881,34882,34884,34886,34888,34890,34892,34894,34896,34898,34900,34902,34904],{"class":104,"line":1612},[102,34883,30836],{"class":161},[102,34885,30968],{"class":112},[102,34887,158],{"class":108},[102,34889,34820],{"class":112},[102,34891,30865],{"class":5206},[102,34893,158],{"class":108},[102,34895,184],{"class":161},[102,34897,491],{"class":112},[102,34899,30920],{"class":5206},[102,34901,158],{"class":108},[102,34903,190],{"class":161},[102,34905,119],{"class":112},[102,34907,34908,34910,34913,34915,34917,34919,34921,34923,34925,34927,34929,34932,34934,34936,34938,34940,34942,34944,34946,34948],{"class":104,"line":1617},[102,34909,30836],{"class":161},[102,34911,34912],{"class":112},".c5",[102,34914,158],{"class":108},[102,34916,30844],{"class":112},[102,34918,30847],{"class":5206},[102,34920,158],{"class":108},[102,34922,34861],{"class":161},[102,34924,491],{"class":112},[102,34926,30856],{"class":5206},[102,34928,158],{"class":108},[102,34930,34931],{"class":161},"384",[102,34933,491],{"class":112},[102,34935,30865],{"class":5206},[102,34937,158],{"class":108},[102,34939,184],{"class":161},[102,34941,491],{"class":112},[102,34943,30874],{"class":5206},[102,34945,158],{"class":108},[102,34947,330],{"class":161},[102,34949,119],{"class":112},[102,34951,34952,34954,34957,34959,34961,34963,34965,34967,34969,34971,34973,34975,34977,34979,34981,34983,34985,34987,34989,34991],{"class":104,"line":1631},[102,34953,30836],{"class":161},[102,34955,34956],{"class":112},".c6",[102,34958,158],{"class":108},[102,34960,30844],{"class":112},[102,34962,30847],{"class":5206},[102,34964,158],{"class":108},[102,34966,34931],{"class":161},[102,34968,491],{"class":112},[102,34970,30856],{"class":5206},[102,34972,158],{"class":108},[102,34974,34931],{"class":161},[102,34976,491],{"class":112},[102,34978,30865],{"class":5206},[102,34980,158],{"class":108},[102,34982,184],{"class":161},[102,34984,491],{"class":112},[102,34986,30874],{"class":5206},[102,34988,158],{"class":108},[102,34990,330],{"class":161},[102,34992,119],{"class":112},[102,34994,34995,34997,35000,35002,35004,35006,35008,35010,35012,35014,35016,35018,35020,35022,35024,35026,35028,35030,35032,35034],{"class":104,"line":1636},[102,34996,30836],{"class":161},[102,34998,34999],{"class":112},".c7",[102,35001,158],{"class":108},[102,35003,30844],{"class":112},[102,35005,30847],{"class":5206},[102,35007,158],{"class":108},[102,35009,34931],{"class":161},[102,35011,491],{"class":112},[102,35013,30856],{"class":5206},[102,35015,158],{"class":108},[102,35017,34861],{"class":161},[102,35019,491],{"class":112},[102,35021,30865],{"class":5206},[102,35023,158],{"class":108},[102,35025,184],{"class":161},[102,35027,491],{"class":112},[102,35029,30874],{"class":5206},[102,35031,158],{"class":108},[102,35033,330],{"class":161},[102,35035,119],{"class":112},[102,35037,35038,35040,35043,35045,35047,35049,35051,35053,35055,35057,35059,35061],{"class":104,"line":1642},[102,35039,30836],{"class":161},[102,35041,35042],{"class":112},".s8",[102,35044,158],{"class":108},[102,35046,34820],{"class":112},[102,35048,30865],{"class":5206},[102,35050,158],{"class":108},[102,35052,184],{"class":161},[102,35054,491],{"class":112},[102,35056,30920],{"class":5206},[102,35058,158],{"class":108},[102,35060,190],{"class":161},[102,35062,119],{"class":112},[102,35064,35065],{"class":104,"line":1663},[102,35066,30993],{"class":171},[102,35068,35069,35071,35073,35075],{"class":104,"line":1668},[102,35070,30836],{"class":161},[102,35072,31000],{"class":112},[102,35074,158],{"class":108},[102,35076,31005],{"class":112},[102,35078,35079],{"class":104,"line":1682},[102,35080,35081],{"class":171},"       # 定义全连接层\n",[102,35083,35084,35086,35089,35091,35093,35095,35097,35099,35101,35103,35105,35108],{"class":104,"line":1687},[102,35085,30836],{"class":161},[102,35087,35088],{"class":112},".f1",[102,35090,158],{"class":108},[102,35092,31022],{"class":112},[102,35094,457],{"class":161},[102,35096,568],{"class":108},[102,35098,457],{"class":161},[102,35100,568],{"class":108},[102,35102,34861],{"class":161},[102,35104,491],{"class":112},[102,35106,35107],{"class":161},"4096",[102,35109,119],{"class":112},[102,35111,35112,35114,35117,35119,35121,35123,35125,35127],{"class":104,"line":1716},[102,35113,30836],{"class":161},[102,35115,35116],{"class":112},".f2",[102,35118,158],{"class":108},[102,35120,31022],{"class":112},[102,35122,35107],{"class":161},[102,35124,491],{"class":112},[102,35126,35107],{"class":161},[102,35128,119],{"class":112},[102,35130,35131,35133,35136,35138,35140,35142,35144,35146],{"class":104,"line":1721},[102,35132,30836],{"class":161},[102,35134,35135],{"class":112},".f3",[102,35137,158],{"class":108},[102,35139,31022],{"class":112},[102,35141,35107],{"class":161},[102,35143,491],{"class":112},[102,35145,559],{"class":161},[102,35147,119],{"class":112},[102,35149,35150],{"class":104,"line":1738},[102,35151,2389],{"emptyLinePlaceholder":30},[102,35153,35154],{"class":104,"line":1743},[102,35155,35156],{"class":171},"    # 定义前向传播\n",[102,35158,35159,35161,35163],{"class":104,"line":1748},[102,35160,30792],{"class":108},[102,35162,31084],{"class":1952},[102,35164,31087],{"class":112},[102,35166,35167,35169,35171,35173,35176,35178],{"class":104,"line":1753},[102,35168,31092],{"class":112},[102,35170,158],{"class":108},[102,35172,30814],{"class":161},[102,35174,35175],{"class":112},".ReLu(",[102,35177,30814],{"class":161},[102,35179,31104],{"class":112},[102,35181,35182,35184,35186,35188],{"class":104,"line":1767},[102,35183,31092],{"class":112},[102,35185,158],{"class":108},[102,35187,30814],{"class":161},[102,35189,31115],{"class":112},[102,35191,35192,35194,35196,35198,35200,35202],{"class":104,"line":1772},[102,35193,31092],{"class":112},[102,35195,158],{"class":108},[102,35197,30814],{"class":161},[102,35199,35175],{"class":112},[102,35201,30814],{"class":161},[102,35203,31130],{"class":112},[102,35205,35206,35208,35210,35212],{"class":104,"line":2566},[102,35207,31092],{"class":112},[102,35209,158],{"class":108},[102,35211,30814],{"class":161},[102,35213,31141],{"class":112},[102,35215,35216,35218,35220,35222,35224,35226],{"class":104,"line":2580},[102,35217,31092],{"class":112},[102,35219,158],{"class":108},[102,35221,30814],{"class":161},[102,35223,35175],{"class":112},[102,35225,30814],{"class":161},[102,35227,35228],{"class":112},".c5(x))\n",[102,35230,35231,35233,35235,35237,35239,35241],{"class":104,"line":2588},[102,35232,31092],{"class":112},[102,35234,158],{"class":108},[102,35236,30814],{"class":161},[102,35238,35175],{"class":112},[102,35240,30814],{"class":161},[102,35242,35243],{"class":112},".c6(x))\n",[102,35245,35246,35248,35250,35252,35254,35256],{"class":104,"line":2593},[102,35247,31092],{"class":112},[102,35249,158],{"class":108},[102,35251,30814],{"class":161},[102,35253,35175],{"class":112},[102,35255,30814],{"class":161},[102,35257,35258],{"class":112},".c7(x))\n",[102,35260,35261,35263,35265,35267],{"class":104,"line":2599},[102,35262,31092],{"class":112},[102,35264,158],{"class":108},[102,35266,30814],{"class":161},[102,35268,35269],{"class":112},".s8(x)\n",[102,35271,35272],{"class":104,"line":2605},[102,35273,2389],{"emptyLinePlaceholder":30},[102,35275,35276],{"class":104,"line":2610},[102,35277,35278],{"class":171},"        # 展平加线性全连接层\n",[102,35280,35281,35283,35285,35287],{"class":104,"line":7938},[102,35282,31092],{"class":112},[102,35284,158],{"class":108},[102,35286,30814],{"class":161},[102,35288,31152],{"class":112},[102,35290,35291,35293,35295,35297,35299,35301],{"class":104,"line":7962},[102,35292,31092],{"class":112},[102,35294,158],{"class":108},[102,35296,30814],{"class":161},[102,35298,35175],{"class":112},[102,35300,30814],{"class":161},[102,35302,35303],{"class":112},".f1(x))\n",[102,35305,35306],{"class":104,"line":7967},[102,35307,35308],{"class":171},"        # 还需要dropout对神经元随机进行失活\n",[102,35310,35311,35313,35315,35318,35321],{"class":104,"line":7973},[102,35312,31092],{"class":112},[102,35314,158],{"class":108},[102,35316,35317],{"class":112},"F.dropout(x,",[102,35319,35320],{"class":161},"0.5",[102,35322,119],{"class":112},[102,35324,35325,35327,35329,35331,35333,35335],{"class":104,"line":8000},[102,35326,31092],{"class":112},[102,35328,158],{"class":108},[102,35330,30814],{"class":161},[102,35332,35175],{"class":112},[102,35334,30814],{"class":161},[102,35336,35337],{"class":112},".f2(x))\n",[102,35339,35340,35342,35344,35346,35348],{"class":104,"line":8005},[102,35341,31092],{"class":112},[102,35343,158],{"class":108},[102,35345,35317],{"class":112},[102,35347,35320],{"class":161},[102,35349,119],{"class":112},[102,35351,35352],{"class":104,"line":8011},[102,35353,35354],{"class":171},"        # 直接输出\n",[102,35356,35357,35359,35361,35363],{"class":104,"line":8023},[102,35358,31092],{"class":112},[102,35360,158],{"class":108},[102,35362,30814],{"class":161},[102,35364,35365],{"class":112},".f3(x)\n",[102,35367,35368],{"class":104,"line":8035},[102,35369,35370],{"class":171},"        # 前向传播输出\n",[102,35372,35373,35375],{"class":104,"line":8047},[102,35374,14742],{"class":108},[102,35376,31200],{"class":112},[102,35378,35379],{"class":104,"line":9706},[102,35380,35381],{"class":171},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[102,35383,35384,35386,35388,35390,35392],{"class":104,"line":9731},[102,35385,1520],{"class":108},[102,35387,31211],{"class":161},[102,35389,2938],{"class":108},[102,35391,31216],{"class":217},[102,35393,3728],{"class":112},[102,35395,35396,35398,35400,35402,35404,35406,35408,35410,35412],{"class":104,"line":9754},[102,35397,31228],{"class":112},[102,35399,158],{"class":108},[102,35401,30442],{"class":112},[102,35403,31235],{"class":217},[102,35405,1693],{"class":108},[102,35407,31240],{"class":112},[102,35409,1690],{"class":108},[102,35411,30467],{"class":217},[102,35413,119],{"class":112},[102,35415,35416],{"class":104,"line":9778},[102,35417,35418],{"class":171},"    # 模型实例化，然后将实例化的模型放到设备中\n",[102,35420,35421,35423,35425],{"class":104,"line":9783},[102,35422,31280],{"class":112},[102,35424,158],{"class":108},[102,35426,35427],{"class":112},"AlexNet().to(device)\n",[102,35429,35430,35432,35434,35436,35438,35441,35443,35445],{"class":104,"line":9788},[102,35431,31290],{"class":161},[102,35433,31293],{"class":112},[102,35435,330],{"class":161},[102,35437,491],{"class":112},[102,35439,35440],{"class":161},"227",[102,35442,491],{"class":112},[102,35444,35440],{"class":161},[102,35446,31306],{"class":112},[56,35448,35449],{"start":24},[59,35450,31319],{},[93,35452,35454],{"className":30369,"code":35453,"language":30371,"meta":23,"style":23},"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",[99,35455,35456,35462,35468,35478,35484,35494,35504,35514,35524,35534,35538,35549,35559,35563,35567,35571,35579,35591,35601,35617,35627,35659,35673,35683,35693,35697,35707,35721,35731,35741,35751,35757,35761,35765,35769,35773,35777,35785,35805,35809,35813,35817,35821,35825,35841,35845,35849,35857,35861,35865,35873,35877,35881,35885,35893,35897,35901,35905,35909,35917,35921,35929,35933,35941,35945,35953,35957,35965,35969,35973,35981,35985,35989,35993,36005,36029,36043,36047,36051,36055,36063,36067,36075,36079,36087,36091,36099,36103,36111,36115,36123,36127,36139,36143,36151,36155,36163,36167,36171,36175,36179,36187,36191,36207,36211,36219,36223,36227,36231,36235,36239,36243,36247,36263,36267,36279,36283,36295,36299,36311,36315,36323,36327,36335,36339,36343,36348,36354,36358,36367,36371,36388,36392,36401,36405,36423,36436,36441,36454,36458,36462,36470,36474,36478,36486,36490,36498,36502,36510,36514,36518,36560,36602,36606,36610,36626,36630,36646,36650,36654,36662,36666,36670,36682,36720,36725,36730,36739,36743,36757,36767,36773,36779,36785,36791,36795,36799,36805,36809,36813,36821,36825,36843,36847,36851,36855,36871,36875,36879,36883,36887,36891,36911,36931,36935,36939,36943,36951,36959,36963,36979,36999,37019,37023,37027,37035,37043,37047,37051,37055,37067,37071,37081,37089,37106],{"__ignoreMap":23},[102,35457,35458,35460],{"class":104,"line":105},[102,35459,30383],{"class":108},[102,35461,31813],{"class":112},[102,35463,35464,35466],{"class":104,"line":24},[102,35465,30383],{"class":108},[102,35467,31820],{"class":112},[102,35469,35470,35472,35474,35476],{"class":104,"line":1168},[102,35471,30383],{"class":108},[102,35473,31831],{"class":112},[102,35475,31374],{"class":108},[102,35477,31836],{"class":112},[102,35479,35480,35482],{"class":104,"line":1183},[102,35481,30383],{"class":108},[102,35483,30386],{"class":112},[102,35485,35486,35488,35490,35492],{"class":104,"line":1189},[102,35487,30728],{"class":108},[102,35489,31406],{"class":112},[102,35491,30383],{"class":108},[102,35493,31853],{"class":112},[102,35495,35496,35498,35500,35502],{"class":104,"line":1203},[102,35497,30728],{"class":108},[102,35499,31359],{"class":112},[102,35501,30383],{"class":108},[102,35503,31364],{"class":112},[102,35505,35506,35508,35510,35512],{"class":104,"line":1209},[102,35507,30728],{"class":108},[102,35509,31389],{"class":112},[102,35511,30383],{"class":108},[102,35513,31394],{"class":112},[102,35515,35516,35518,35520,35522],{"class":104,"line":1300},[102,35517,30383],{"class":108},[102,35519,31406],{"class":112},[102,35521,31374],{"class":108},[102,35523,31411],{"class":112},[102,35525,35526,35528,35530,35532],{"class":104,"line":1306},[102,35527,30383],{"class":108},[102,35529,31423],{"class":112},[102,35531,31374],{"class":108},[102,35533,31428],{"class":112},[102,35535,35536],{"class":104,"line":1318},[102,35537,31898],{"class":171},[102,35539,35540,35542,35544,35546],{"class":104,"line":1601},[102,35541,30728],{"class":108},[102,35543,31905],{"class":112},[102,35545,30383],{"class":108},[102,35547,35548],{"class":112}," AlexNet\n",[102,35550,35551,35553,35555,35557],{"class":104,"line":1606},[102,35552,30728],{"class":108},[102,35554,30731],{"class":112},[102,35556,30383],{"class":108},[102,35558,30736],{"class":112},[102,35560,35561],{"class":104,"line":1612},[102,35562,2389],{"emptyLinePlaceholder":30},[102,35564,35565],{"class":104,"line":1617},[102,35566,2389],{"emptyLinePlaceholder":30},[102,35568,35569],{"class":104,"line":1631},[102,35570,31933],{"class":171},[102,35572,35573,35575,35577],{"class":104,"line":1636},[102,35574,31938],{"class":108},[102,35576,31941],{"class":1952},[102,35578,31944],{"class":112},[102,35580,35581,35583,35585,35587,35589],{"class":104,"line":1642},[102,35582,31949],{"class":112},[102,35584,158],{"class":108},[102,35586,31446],{"class":112},[102,35588,31454],{"class":217},[102,35590,31457],{"class":112},[102,35592,35593,35595,35597,35599],{"class":104,"line":1663},[102,35594,31962],{"class":5206},[102,35596,158],{"class":108},[102,35598,31467],{"class":161},[102,35600,31457],{"class":112},[102,35602,35603,35605,35607,35609,35611,35613,35615],{"class":104,"line":1668},[102,35604,31973],{"class":5206},[102,35606,158],{"class":108},[102,35608,31484],{"class":112},[102,35610,31487],{"class":5206},[102,35612,158],{"class":108},[102,35614,35440],{"class":161},[102,35616,31495],{"class":112},[102,35618,35619,35621,35623,35625],{"class":104,"line":1682},[102,35620,31990],{"class":5206},[102,35622,158],{"class":108},[102,35624,31467],{"class":161},[102,35626,119],{"class":112},[102,35628,35629,35631,35633,35635,35637,35639,35641,35643,35645,35647,35649,35651,35653,35655,35657],{"class":104,"line":1687},[102,35630,32001],{"class":112},[102,35632,158],{"class":108},[102,35634,32006],{"class":112},[102,35636,32009],{"class":161},[102,35638,113],{"class":112},[102,35640,32014],{"class":161},[102,35642,568],{"class":108},[102,35644,7348],{"class":161},[102,35646,32021],{"class":112},[102,35648,32009],{"class":161},[102,35650,113],{"class":112},[102,35652,32028],{"class":161},[102,35654,568],{"class":108},[102,35656,7348],{"class":161},[102,35658,32035],{"class":112},[102,35660,35661,35663,35665,35667,35669,35671],{"class":104,"line":1716},[102,35662,32040],{"class":112},[102,35664,158],{"class":108},[102,35666,32045],{"class":112},[102,35668,31528],{"class":5206},[102,35670,158],{"class":108},[102,35672,31533],{"class":112},[102,35674,35675,35677,35679,35681],{"class":104,"line":1721},[102,35676,32056],{"class":5206},[102,35678,158],{"class":108},[102,35680,32061],{"class":161},[102,35682,31457],{"class":112},[102,35684,35685,35687,35689,35691],{"class":104,"line":1738},[102,35686,32068],{"class":5206},[102,35688,158],{"class":108},[102,35690,31467],{"class":161},[102,35692,31457],{"class":112},[102,35694,35695],{"class":104,"line":1743},[102,35696,32079],{"class":171},[102,35698,35699,35701,35703,35705],{"class":104,"line":1748},[102,35700,32084],{"class":5206},[102,35702,158],{"class":108},[102,35704,508],{"class":161},[102,35706,119],{"class":112},[102,35708,35709,35711,35713,35715,35717,35719],{"class":104,"line":1753},[102,35710,32095],{"class":112},[102,35712,158],{"class":108},[102,35714,31525],{"class":112},[102,35716,31528],{"class":5206},[102,35718,158],{"class":108},[102,35720,32106],{"class":112},[102,35722,35723,35725,35727,35729],{"class":104,"line":1767},[102,35724,32111],{"class":5206},[102,35726,158],{"class":108},[102,35728,32061],{"class":161},[102,35730,31457],{"class":112},[102,35732,35733,35735,35737,35739],{"class":104,"line":1772},[102,35734,32122],{"class":5206},[102,35736,158],{"class":108},[102,35738,31467],{"class":161},[102,35740,31457],{"class":112},[102,35742,35743,35745,35747,35749],{"class":104,"line":2566},[102,35744,32133],{"class":5206},[102,35746,158],{"class":108},[102,35748,508],{"class":161},[102,35750,119],{"class":112},[102,35752,35753,35755],{"class":104,"line":2580},[102,35754,4079],{"class":108},[102,35756,32146],{"class":112},[102,35758,35759],{"class":104,"line":2588},[102,35760,2389],{"emptyLinePlaceholder":30},[102,35762,35763],{"class":104,"line":2593},[102,35764,32155],{"class":171},[102,35766,35767],{"class":104,"line":2599},[102,35768,32160],{"class":171},[102,35770,35771],{"class":104,"line":2605},[102,35772,2389],{"emptyLinePlaceholder":30},[102,35774,35775],{"class":104,"line":2610},[102,35776,32169],{"class":171},[102,35778,35779,35781,35783],{"class":104,"line":7938},[102,35780,31938],{"class":108},[102,35782,32176],{"class":1952},[102,35784,32179],{"class":112},[102,35786,35787,35789,35791,35793,35795,35797,35799,35801,35803],{"class":104,"line":7962},[102,35788,31228],{"class":112},[102,35790,158],{"class":108},[102,35792,30442],{"class":112},[102,35794,31235],{"class":217},[102,35796,1693],{"class":108},[102,35798,31240],{"class":112},[102,35800,1690],{"class":108},[102,35802,32198],{"class":217},[102,35804,119],{"class":112},[102,35806,35807],{"class":104,"line":7967},[102,35808,2389],{"emptyLinePlaceholder":30},[102,35810,35811],{"class":104,"line":7973},[102,35812,2389],{"emptyLinePlaceholder":30},[102,35814,35815],{"class":104,"line":8000},[102,35816,32213],{"class":171},[102,35818,35819],{"class":104,"line":8005},[102,35820,32218],{"class":171},[102,35822,35823],{"class":104,"line":8011},[102,35824,32223],{"class":171},[102,35826,35827,35829,35831,35833,35835,35837,35839],{"class":104,"line":8023},[102,35828,32228],{"class":112},[102,35830,158],{"class":108},[102,35832,32233],{"class":112},[102,35834,32236],{"class":5206},[102,35836,158],{"class":108},[102,35838,32241],{"class":161},[102,35840,119],{"class":112},[102,35842,35843],{"class":104,"line":8035},[102,35844,2389],{"emptyLinePlaceholder":30},[102,35846,35847],{"class":104,"line":8047},[102,35848,32252],{"class":171},[102,35850,35851,35853,35855],{"class":104,"line":9706},[102,35852,32257],{"class":112},[102,35854,158],{"class":108},[102,35856,32262],{"class":112},[102,35858,35859],{"class":104,"line":9731},[102,35860,2389],{"emptyLinePlaceholder":30},[102,35862,35863],{"class":104,"line":9754},[102,35864,32271],{"class":171},[102,35866,35867,35869,35871],{"class":104,"line":9778},[102,35868,31280],{"class":112},[102,35870,158],{"class":108},[102,35872,32280],{"class":112},[102,35874,35875],{"class":104,"line":9783},[102,35876,32285],{"class":171},[102,35878,35879],{"class":104,"line":9788},[102,35880,32290],{"class":171},[102,35882,35883],{"class":104,"line":9793},[102,35884,32295],{"class":171},[102,35886,35887,35889,35891],{"class":104,"line":9802},[102,35888,32300],{"class":112},[102,35890,158],{"class":108},[102,35892,32305],{"class":112},[102,35894,35895],{"class":104,"line":9807},[102,35896,2389],{"emptyLinePlaceholder":30},[102,35898,35899],{"class":104,"line":9813},[102,35900,2389],{"emptyLinePlaceholder":30},[102,35902,35903],{"class":104,"line":9834},[102,35904,32318],{"class":171},[102,35906,35907],{"class":104,"line":9840},[102,35908,32323],{"class":171},[102,35910,35911,35913,35915],{"class":104,"line":9854},[102,35912,32328],{"class":112},[102,35914,158],{"class":108},[102,35916,32333],{"class":161},[102,35918,35919],{"class":104,"line":9860},[102,35920,32338],{"class":171},[102,35922,35923,35925,35927],{"class":104,"line":9887},[102,35924,32343],{"class":112},[102,35926,158],{"class":108},[102,35928,32348],{"class":112},[102,35930,35931],{"class":104,"line":9896},[102,35932,32353],{"class":171},[102,35934,35935,35937,35939],{"class":104,"line":9902},[102,35936,32358],{"class":112},[102,35938,158],{"class":108},[102,35940,32348],{"class":112},[102,35942,35943],{"class":104,"line":9910},[102,35944,32367],{"class":171},[102,35946,35947,35949,35951],{"class":104,"line":9915},[102,35948,32372],{"class":112},[102,35950,158],{"class":108},[102,35952,32348],{"class":112},[102,35954,35955],{"class":104,"line":16594},[102,35956,32381],{"class":171},[102,35958,35959,35961,35963],{"class":104,"line":16600},[102,35960,32386],{"class":112},[102,35962,158],{"class":108},[102,35964,32348],{"class":112},[102,35966,35967],{"class":104,"line":16623},[102,35968,2389],{"emptyLinePlaceholder":30},[102,35970,35971],{"class":104,"line":16629},[102,35972,32399],{"class":171},[102,35974,35975,35977,35979],{"class":104,"line":16652},[102,35976,32404],{"class":112},[102,35978,158],{"class":108},[102,35980,32409],{"class":112},[102,35982,35983],{"class":104,"line":16666},[102,35984,2389],{"emptyLinePlaceholder":30},[102,35986,35987],{"class":104,"line":16686},[102,35988,2389],{"emptyLinePlaceholder":30},[102,35990,35991],{"class":104,"line":16692},[102,35992,32422],{"class":171},[102,35994,35995,35997,35999,36001,36003],{"class":104,"line":16703},[102,35996,3190],{"class":108},[102,35998,32429],{"class":112},[102,36000,26034],{"class":108},[102,36002,32434],{"class":161},[102,36004,32437],{"class":112},[102,36006,36007,36009,36011,36013,36015,36017,36019,36021,36023,36025,36027],{"class":104,"line":16726},[102,36008,32442],{"class":161},[102,36010,113],{"class":112},[102,36012,32447],{"class":217},[102,36014,32450],{"class":161},[102,36016,697],{"class":217},[102,36018,32450],{"class":161},[102,36020,364],{"class":217},[102,36022,32459],{"class":112},[102,36024,645],{"class":108},[102,36026,330],{"class":161},[102,36028,30488],{"class":112},[102,36030,36031,36033,36035,36037,36039,36041],{"class":104,"line":16748},[102,36032,32442],{"class":161},[102,36034,113],{"class":112},[102,36036,32474],{"class":217},[102,36038,568],{"class":108},[102,36040,559],{"class":161},[102,36042,119],{"class":112},[102,36044,36045],{"class":104,"line":16753},[102,36046,2389],{"emptyLinePlaceholder":30},[102,36048,36049],{"class":104,"line":16759},[102,36050,32489],{"class":171},[102,36052,36053],{"class":104,"line":16773},[102,36054,32494],{"class":171},[102,36056,36057,36059,36061],{"class":104,"line":16786},[102,36058,32499],{"class":112},[102,36060,158],{"class":108},[102,36062,32333],{"class":161},[102,36064,36065],{"class":104,"line":16791},[102,36066,32508],{"class":171},[102,36068,36069,36071,36073],{"class":104,"line":16805},[102,36070,32513],{"class":112},[102,36072,158],{"class":108},[102,36074,3074],{"class":161},[102,36076,36077],{"class":104,"line":16810},[102,36078,32522],{"class":171},[102,36080,36081,36083,36085],{"class":104,"line":16816},[102,36082,32527],{"class":112},[102,36084,158],{"class":108},[102,36086,32333],{"class":161},[102,36088,36089],{"class":104,"line":16821},[102,36090,32536],{"class":171},[102,36092,36093,36095,36097],{"class":104,"line":16835},[102,36094,32541],{"class":112},[102,36096,158],{"class":108},[102,36098,3074],{"class":161},[102,36100,36101],{"class":104,"line":16840},[102,36102,32550],{"class":171},[102,36104,36105,36107,36109],{"class":104,"line":16845},[102,36106,32555],{"class":112},[102,36108,158],{"class":108},[102,36110,3074],{"class":161},[102,36112,36113],{"class":104,"line":16859},[102,36114,32564],{"class":171},[102,36116,36117,36119,36121],{"class":104,"line":16871},[102,36118,32569],{"class":112},[102,36120,158],{"class":108},[102,36122,3074],{"class":161},[102,36124,36125],{"class":104,"line":16876},[102,36126,32578],{"class":171},[102,36128,36129,36131,36133,36135,36137],{"class":104,"line":16889},[102,36130,3392],{"class":108},[102,36132,31592],{"class":112},[102,36134,26034],{"class":108},[102,36136,31597],{"class":161},[102,36138,32591],{"class":112},[102,36140,36141],{"class":104,"line":16894},[102,36142,32596],{"class":171},[102,36144,36145,36147,36149],{"class":104,"line":16899},[102,36146,32601],{"class":112},[102,36148,158],{"class":108},[102,36150,32606],{"class":112},[102,36152,36153],{"class":104,"line":16904},[102,36154,32611],{"class":171},[102,36156,36157,36159,36161],{"class":104,"line":16917},[102,36158,32616],{"class":112},[102,36160,158],{"class":108},[102,36162,32621],{"class":112},[102,36164,36165],{"class":104,"line":16922},[102,36166,32627],{"class":171},[102,36168,36169],{"class":104,"line":32624},[102,36170,32633],{"class":112},[102,36172,36173],{"class":104,"line":32630},[102,36174,32639],{"class":171},[102,36176,36177],{"class":104,"line":32636},[102,36178,32645],{"class":171},[102,36180,36181,36183,36185],{"class":104,"line":32642},[102,36182,32651],{"class":112},[102,36184,158],{"class":108},[102,36186,32656],{"class":112},[102,36188,36189],{"class":104,"line":32648},[102,36190,32662],{"class":171},[102,36192,36193,36195,36197,36199,36201,36203,36205],{"class":104,"line":32659},[102,36194,32668],{"class":112},[102,36196,158],{"class":108},[102,36198,32673],{"class":112},[102,36200,32676],{"class":5206},[102,36202,158],{"class":108},[102,36204,330],{"class":161},[102,36206,119],{"class":112},[102,36208,36209],{"class":104,"line":32665},[102,36210,32688],{"class":171},[102,36212,36213,36215,36217],{"class":104,"line":32685},[102,36214,32694],{"class":112},[102,36216,158],{"class":108},[102,36218,32699],{"class":112},[102,36220,36221],{"class":104,"line":32691},[102,36222,32705],{"class":171},[102,36224,36225],{"class":104,"line":32702},[102,36226,32711],{"class":112},[102,36228,36229],{"class":104,"line":32708},[102,36230,32717],{"class":171},[102,36232,36233],{"class":104,"line":32714},[102,36234,32723],{"class":112},[102,36236,36237],{"class":104,"line":32720},[102,36238,32729],{"class":171},[102,36240,36241],{"class":104,"line":32726},[102,36242,32735],{"class":112},[102,36244,36245],{"class":104,"line":32732},[102,36246,32741],{"class":171},[102,36248,36249,36251,36253,36255,36257,36259,36261],{"class":104,"line":32738},[102,36250,32747],{"class":112},[102,36252,9467],{"class":108},[102,36254,32752],{"class":112},[102,36256,568],{"class":108},[102,36258,32757],{"class":112},[102,36260,304],{"class":161},[102,36262,119],{"class":112},[102,36264,36265],{"class":104,"line":32744},[102,36266,32767],{"class":171},[102,36268,36269,36271,36273,36275,36277],{"class":104,"line":32764},[102,36270,32773],{"class":112},[102,36272,9467],{"class":108},[102,36274,32778],{"class":112},[102,36276,2938],{"class":108},[102,36278,32783],{"class":112},[102,36280,36281],{"class":104,"line":32770},[102,36282,32789],{"class":171},[102,36284,36285,36287,36289,36291,36293],{"class":104,"line":32786},[102,36286,32795],{"class":112},[102,36288,9467],{"class":108},[102,36290,32757],{"class":112},[102,36292,304],{"class":161},[102,36294,119],{"class":112},[102,36296,36297],{"class":104,"line":32792},[102,36298,32809],{"class":171},[102,36300,36301,36303,36305,36307,36309],{"class":104,"line":32806},[102,36302,3392],{"class":108},[102,36304,32817],{"class":112},[102,36306,26034],{"class":108},[102,36308,31597],{"class":161},[102,36310,32824],{"class":112},[102,36312,36313],{"class":104,"line":32812},[102,36314,32830],{"class":171},[102,36316,36317,36319,36321],{"class":104,"line":32827},[102,36318,32601],{"class":112},[102,36320,158],{"class":108},[102,36322,32606],{"class":112},[102,36324,36325],{"class":104,"line":32833},[102,36326,32845],{"class":171},[102,36328,36329,36331,36333],{"class":104,"line":32842},[102,36330,32616],{"class":112},[102,36332,158],{"class":108},[102,36334,32621],{"class":112},[102,36336,36337],{"class":104,"line":32848},[102,36338,32860],{"class":171},[102,36340,36341],{"class":104,"line":32857},[102,36342,32866],{"class":112},[102,36344,36345],{"class":104,"line":32863},[102,36346,36347],{"class":171},"            # 验证时不计算梯度以节省内存\u002F计算\n",[102,36349,36350,36352],{"class":104,"line":32869},[102,36351,32872],{"class":108},[102,36353,32875],{"class":112},[102,36355,36356],{"class":104,"line":32878},[102,36357,32881],{"class":171},[102,36359,36360,36363,36365],{"class":104,"line":32884},[102,36361,36362],{"class":112},"                output",[102,36364,158],{"class":108},[102,36366,32656],{"class":112},[102,36368,36369],{"class":104,"line":32895},[102,36370,32898],{"class":171},[102,36372,36373,36376,36378,36380,36382,36384,36386],{"class":104,"line":32901},[102,36374,36375],{"class":112},"                pre_lab",[102,36377,158],{"class":108},[102,36379,32673],{"class":112},[102,36381,32676],{"class":5206},[102,36383,158],{"class":108},[102,36385,330],{"class":161},[102,36387,119],{"class":112},[102,36389,36390],{"class":104,"line":32920},[102,36391,32923],{"class":171},[102,36393,36394,36397,36399],{"class":104,"line":32926},[102,36395,36396],{"class":112},"                val_batch_loss",[102,36398,158],{"class":108},[102,36400,32699],{"class":112},[102,36402,36403],{"class":104,"line":32937},[102,36404,32940],{"class":171},[102,36406,36407,36410,36412,36415,36417,36419,36421],{"class":104,"line":32943},[102,36408,36409],{"class":112},"                val_loss",[102,36411,9467],{"class":108},[102,36413,36414],{"class":112},"val_batch_loss.item()",[102,36416,568],{"class":108},[102,36418,32757],{"class":112},[102,36420,304],{"class":161},[102,36422,119],{"class":112},[102,36424,36425,36428,36430,36432,36434],{"class":104,"line":32963},[102,36426,36427],{"class":112},"                val_corrects",[102,36429,9467],{"class":108},[102,36431,32778],{"class":112},[102,36433,2938],{"class":108},[102,36435,32783],{"class":112},[102,36437,36438],{"class":104,"line":32979},[102,36439,36440],{"class":171},"            # 当前用于验证的样本数量\n",[102,36442,36443,36446,36448,36450,36452],{"class":104,"line":32985},[102,36444,36445],{"class":112},"            val_num",[102,36447,9467],{"class":108},[102,36449,32757],{"class":112},[102,36451,304],{"class":161},[102,36453,119],{"class":112},[102,36455,36456],{"class":104,"line":32999},[102,36457,33002],{"class":171},[102,36459,36460],{"class":104,"line":33005},[102,36461,33008],{"class":171},[102,36463,36464,36466,36468],{"class":104,"line":33011},[102,36465,33014],{"class":112},[102,36467,697],{"class":108},[102,36469,33019],{"class":112},[102,36471,36472],{"class":104,"line":33022},[102,36473,33025],{"class":171},[102,36475,36476],{"class":104,"line":33028},[102,36477,33031],{"class":171},[102,36479,36480,36482,36484],{"class":104,"line":33034},[102,36481,33037],{"class":112},[102,36483,697],{"class":108},[102,36485,33019],{"class":112},[102,36487,36488],{"class":104,"line":33044},[102,36489,33047],{"class":171},[102,36491,36492,36494,36496],{"class":104,"line":33050},[102,36493,33053],{"class":112},[102,36495,697],{"class":108},[102,36497,33058],{"class":112},[102,36499,36500],{"class":104,"line":33061},[102,36501,33064],{"class":171},[102,36503,36504,36506,36508],{"class":104,"line":33067},[102,36505,33070],{"class":112},[102,36507,697],{"class":108},[102,36509,33058],{"class":112},[102,36511,36512],{"class":104,"line":33077},[102,36513,2389],{"emptyLinePlaceholder":30},[102,36515,36516],{"class":104,"line":33082},[102,36517,33085],{"class":171},[102,36519,36520,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540,36542,36544,36546,36548,36550,36552,36554,36556,36558],{"class":104,"line":33088},[102,36521,32442],{"class":161},[102,36523,113],{"class":112},[102,36525,3581],{"class":217},[102,36527,32450],{"class":161},[102,36529,33099],{"class":217},[102,36531,1009],{"class":161},[102,36533,33104],{"class":108},[102,36535,1059],{"class":161},[102,36537,33109],{"class":217},[102,36539,1009],{"class":161},[102,36541,33104],{"class":108},[102,36543,1059],{"class":161},[102,36545,3581],{"class":217},[102,36547,33120],{"class":112},[102,36549,645],{"class":108},[102,36551,330],{"class":161},[102,36553,33127],{"class":112},[102,36555,645],{"class":108},[102,36557,330],{"class":161},[102,36559,33134],{"class":112},[102,36561,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592,36594,36596,36598,36600],{"class":104,"line":33137},[102,36563,32442],{"class":161},[102,36565,113],{"class":112},[102,36567,3581],{"class":217},[102,36569,32450],{"class":161},[102,36571,33148],{"class":217},[102,36573,1009],{"class":161},[102,36575,33104],{"class":108},[102,36577,1059],{"class":161},[102,36579,33157],{"class":217},[102,36581,1009],{"class":161},[102,36583,33104],{"class":108},[102,36585,1059],{"class":161},[102,36587,3581],{"class":217},[102,36589,33168],{"class":112},[102,36591,645],{"class":108},[102,36593,330],{"class":161},[102,36595,33175],{"class":112},[102,36597,645],{"class":108},[102,36599,330],{"class":161},[102,36601,33134],{"class":112},[102,36603,36604],{"class":104,"line":33184},[102,36605,2389],{"emptyLinePlaceholder":30},[102,36607,36608],{"class":104,"line":33189},[102,36609,33192],{"class":171},[102,36611,36612,36614,36616,36618,36620,36622,36624],{"class":104,"line":33195},[102,36613,2486],{"class":108},[102,36615,33200],{"class":112},[102,36617,645],{"class":108},[102,36619,330],{"class":161},[102,36621,1053],{"class":112},[102,36623,1073],{"class":108},[102,36625,33211],{"class":112},[102,36627,36628],{"class":104,"line":33214},[102,36629,33217],{"class":171},[102,36631,36632,36634,36636,36638,36640,36642,36644],{"class":104,"line":33220},[102,36633,33223],{"class":112},[102,36635,152],{"class":161},[102,36637,158],{"class":108},[102,36639,33230],{"class":112},[102,36641,645],{"class":108},[102,36643,330],{"class":161},[102,36645,33237],{"class":112},[102,36647,36648],{"class":104,"line":33240},[102,36649,33243],{"class":171},[102,36651,36652],{"class":104,"line":33246},[102,36653,33249],{"class":171},[102,36655,36656,36658,36660],{"class":104,"line":33252},[102,36657,33255],{"class":112},[102,36659,158],{"class":108},[102,36661,32305],{"class":112},[102,36663,36664],{"class":104,"line":33262},[102,36665,2389],{"emptyLinePlaceholder":30},[102,36667,36668],{"class":104,"line":33267},[102,36669,33270],{"class":171},[102,36671,36672,36674,36676,36678,36680],{"class":104,"line":33273},[102,36673,33276],{"class":112},[102,36675,158],{"class":108},[102,36677,33281],{"class":112},[102,36679,645],{"class":108},[102,36681,33286],{"class":112},[102,36683,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708,36710,36712,36714,36716,36718],{"class":104,"line":33289},[102,36685,32442],{"class":161},[102,36687,113],{"class":112},[102,36689,33296],{"class":217},[102,36691,1009],{"class":161},[102,36693,33301],{"class":108},[102,36695,1059],{"class":161},[102,36697,657],{"class":217},[102,36699,1009],{"class":161},[102,36701,33301],{"class":108},[102,36703,1059],{"class":161},[102,36705,33314],{"class":217},[102,36707,33317],{"class":112},[102,36709,33320],{"class":108},[102,36711,1020],{"class":161},[102,36713,33325],{"class":112},[102,36715,441],{"class":108},[102,36717,1020],{"class":161},[102,36719,30488],{"class":112},[102,36721,36722],{"class":104,"line":33334},[102,36723,36724],{"class":171},"    # 选择最优参数并保存\n",[102,36726,36727],{"class":104,"line":33340},[102,36728,36729],{"class":171},"    # 保存最佳模型权重字典\n",[102,36731,36732,36735,36737],{"class":104,"line":33346},[102,36733,36734],{"class":112},"    torch.save(best_model_wts,",[102,36736,33358],{"class":217},[102,36738,119],{"class":112},[102,36740,36741],{"class":104,"line":33352},[102,36742,33378],{"class":171},[102,36744,36745,36747,36749,36751,36753,36755],{"class":104,"line":33363},[102,36746,33384],{"class":112},[102,36748,158],{"class":108},[102,36750,33389],{"class":112},[102,36752,33392],{"class":5206},[102,36754,158],{"class":108},[102,36756,1535],{"class":112},[102,36758,36759,36761,36763,36765],{"class":104,"line":33369},[102,36760,33402],{"class":217},[102,36762,972],{"class":112},[102,36764,33407],{"class":161},[102,36766,33410],{"class":112},[102,36768,36769,36771],{"class":104,"line":33375},[102,36770,33416],{"class":217},[102,36772,33419],{"class":112},[102,36774,36775,36777],{"class":104,"line":33381},[102,36776,33425],{"class":217},[102,36778,33428],{"class":112},[102,36780,36781,36783],{"class":104,"line":33399},[102,36782,33434],{"class":217},[102,36784,33437],{"class":112},[102,36786,36787,36789],{"class":104,"line":33413},[102,36788,33443],{"class":217},[102,36790,33446],{"class":112},[102,36792,36793],{"class":104,"line":33422},[102,36794,33452],{"class":112},[102,36796,36797],{"class":104,"line":33431},[102,36798,33458],{"class":171},[102,36800,36801,36803],{"class":104,"line":33440},[102,36802,4079],{"class":108},[102,36804,33466],{"class":112},[102,36806,36807],{"class":104,"line":33449},[102,36808,2389],{"emptyLinePlaceholder":30},[102,36810,36811],{"class":104,"line":33455},[102,36812,33477],{"class":171},[102,36814,36815,36817,36819],{"class":104,"line":33461},[102,36816,31938],{"class":108},[102,36818,33485],{"class":1952},[102,36820,33488],{"class":112},[102,36822,36823],{"class":104,"line":33469},[102,36824,33494],{"class":171},[102,36826,36827,36829,36831,36833,36835,36837,36839,36841],{"class":104,"line":33474},[102,36828,33500],{"class":112},[102,36830,31684],{"class":5206},[102,36832,158],{"class":108},[102,36834,113],{"class":112},[102,36836,611],{"class":161},[102,36838,491],{"class":112},[102,36840,406],{"class":161},[102,36842,30488],{"class":112},[102,36844,36845],{"class":104,"line":33480},[102,36846,33520],{"class":171},[102,36848,36849],{"class":104,"line":33491},[102,36850,33526],{"class":171},[102,36852,36853],{"class":104,"line":33497},[102,36854,33532],{"class":171},[102,36856,36857,36859,36861,36863,36865,36867,36869],{"class":104,"line":33517},[102,36858,31718],{"class":112},[102,36860,330],{"class":161},[102,36862,491],{"class":112},[102,36864,190],{"class":161},[102,36866,491],{"class":112},[102,36868,330],{"class":161},[102,36870,119],{"class":112},[102,36872,36873],{"class":104,"line":33523},[102,36874,33555],{"class":171},[102,36876,36877],{"class":104,"line":33529},[102,36878,33561],{"class":171},[102,36880,36881],{"class":104,"line":33535},[102,36882,33567],{"class":171},[102,36884,36885],{"class":104,"line":33552},[102,36886,33573],{"class":171},[102,36888,36889],{"class":104,"line":33558},[102,36890,33579],{"class":171},[102,36892,36893,36895,36897,36899,36901,36903,36905,36907,36909],{"class":104,"line":33564},[102,36894,33585],{"class":112},[102,36896,33588],{"class":217},[102,36898,33591],{"class":112},[102,36900,33594],{"class":217},[102,36902,491],{"class":112},[102,36904,33599],{"class":5206},[102,36906,158],{"class":108},[102,36908,33604],{"class":217},[102,36910,119],{"class":112},[102,36912,36913,36915,36917,36919,36921,36923,36925,36927,36929],{"class":104,"line":33570},[102,36914,33585],{"class":112},[102,36916,33588],{"class":217},[102,36918,33616],{"class":112},[102,36920,33619],{"class":217},[102,36922,491],{"class":112},[102,36924,33599],{"class":5206},[102,36926,158],{"class":108},[102,36928,33628],{"class":217},[102,36930,119],{"class":112},[102,36932,36933],{"class":104,"line":33576},[102,36934,33636],{"class":171},[102,36936,36937],{"class":104,"line":33582},[102,36938,33642],{"class":112},[102,36940,36941],{"class":104,"line":33609},[102,36942,33648],{"class":171},[102,36944,36945,36947,36949],{"class":104,"line":33633},[102,36946,33654],{"class":112},[102,36948,33657],{"class":217},[102,36950,119],{"class":112},[102,36952,36953,36955,36957],{"class":104,"line":33639},[102,36954,33665],{"class":112},[102,36956,33668],{"class":217},[102,36958,119],{"class":112},[102,36960,36961],{"class":104,"line":33645},[102,36962,33676],{"class":171},[102,36964,36965,36967,36969,36971,36973,36975,36977],{"class":104,"line":33651},[102,36966,31718],{"class":112},[102,36968,330],{"class":161},[102,36970,491],{"class":112},[102,36972,190],{"class":161},[102,36974,491],{"class":112},[102,36976,190],{"class":161},[102,36978,119],{"class":112},[102,36980,36981,36983,36985,36987,36989,36991,36993,36995,36997],{"class":104,"line":33662},[102,36982,33585],{"class":112},[102,36984,33588],{"class":217},[102,36986,33703],{"class":112},[102,36988,33594],{"class":217},[102,36990,491],{"class":112},[102,36992,33599],{"class":5206},[102,36994,158],{"class":108},[102,36996,33714],{"class":217},[102,36998,119],{"class":112},[102,37000,37001,37003,37005,37007,37009,37011,37013,37015,37017],{"class":104,"line":33673},[102,37002,33585],{"class":112},[102,37004,33588],{"class":217},[102,37006,33726],{"class":112},[102,37008,33619],{"class":217},[102,37010,491],{"class":112},[102,37012,33599],{"class":5206},[102,37014,158],{"class":108},[102,37016,33737],{"class":217},[102,37018,119],{"class":112},[102,37020,37021],{"class":104,"line":33679},[102,37022,33745],{"class":171},[102,37024,37025],{"class":104,"line":33696},[102,37026,33642],{"class":112},[102,37028,37029,37031,37033],{"class":104,"line":33719},[102,37030,33654],{"class":112},[102,37032,33588],{"class":217},[102,37034,119],{"class":112},[102,37036,37037,37039,37041],{"class":104,"line":33742},[102,37038,33665],{"class":112},[102,37040,33767],{"class":217},[102,37042,119],{"class":112},[102,37044,37045],{"class":104,"line":33748},[102,37046,33775],{"class":112},[102,37048,37049],{"class":104,"line":33753},[102,37050,2389],{"emptyLinePlaceholder":30},[102,37052,37053],{"class":104,"line":33762},[102,37054,33786],{"class":171},[102,37056,37057,37059,37061,37063,37065],{"class":104,"line":33772},[102,37058,1520],{"class":108},[102,37060,31211],{"class":161},[102,37062,2938],{"class":108},[102,37064,31216],{"class":217},[102,37066,3728],{"class":112},[102,37068,37069],{"class":104,"line":33778},[102,37070,33805],{"class":171},[102,37072,37073,37076,37078],{"class":104,"line":33783},[102,37074,37075],{"class":112},"    AlexNet",[102,37077,158],{"class":108},[102,37079,37080],{"class":112},"AlexNet()\n",[102,37082,37083,37085,37087],{"class":104,"line":33789},[102,37084,33822],{"class":112},[102,37086,158],{"class":108},[102,37088,33827],{"class":112},[102,37090,37091,37093,37095,37098,37100,37102,37104],{"class":104,"line":33802},[102,37092,33384],{"class":112},[102,37094,158],{"class":108},[102,37096,37097],{"class":112},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[102,37099,33840],{"class":5206},[102,37101,158],{"class":108},[102,37103,813],{"class":161},[102,37105,119],{"class":112},[102,37107,37108],{"class":104,"line":33808},[102,37109,33852],{"class":112},[56,37111,37112],{"start":1168},[59,37113,33865],{},[93,37115,37117],{"className":30369,"code":37116,"language":30371,"meta":23,"style":23},"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",[99,37118,37119,37125,37135,37145,37155,37159,37169,37179,37190,37194,37198,37202,37210,37226,37236,37252,37262,37276,37280,37290,37300,37310,37316,37320,37324,37332,37336,37352,37360,37364,37368,37376,37384,37388,37392,37396,37400,37406,37410,37420,37428,37436,37440,37444,37448,37456,37460,37476,37480,37484,37488,37500,37504,37516,37520,37524,37536,37540,37550,37554,37558,37570,37574,37582,37586,37590,37598,37602,37610,37614,37618,37622,37626,37630,37646,37654,37658,37662,37710,37716,37720,37730,37738,37746,37750,37754,37758,37762,37770,37774,37790,37794,37802,37810],{"__ignoreMap":23},[102,37120,37121,37123],{"class":104,"line":105},[102,37122,30383],{"class":108},[102,37124,30386],{"class":112},[102,37126,37127,37129,37131,37133],{"class":104,"line":24},[102,37128,30383],{"class":108},[102,37130,31406],{"class":112},[102,37132,31374],{"class":108},[102,37134,31411],{"class":112},[102,37136,37137,37139,37141,37143],{"class":104,"line":1168},[102,37138,30728],{"class":108},[102,37140,33893],{"class":112},[102,37142,30383],{"class":108},[102,37144,33898],{"class":112},[102,37146,37147,37149,37151,37153],{"class":104,"line":1183},[102,37148,30728],{"class":108},[102,37150,31389],{"class":112},[102,37152,30383],{"class":108},[102,37154,31394],{"class":112},[102,37156,37157],{"class":104,"line":1189},[102,37158,33913],{"class":171},[102,37160,37161,37163,37165,37167],{"class":104,"line":1203},[102,37162,30728],{"class":108},[102,37164,31359],{"class":112},[102,37166,30383],{"class":108},[102,37168,31364],{"class":112},[102,37170,37171,37173,37175,37177],{"class":104,"line":1209},[102,37172,30728],{"class":108},[102,37174,31905],{"class":112},[102,37176,30383],{"class":108},[102,37178,35548],{"class":112},[102,37180,37181,37183,37186,37188],{"class":104,"line":1300},[102,37182,30728],{"class":108},[102,37184,37185],{"class":112}," 练习.AlexNet.model ",[102,37187,30383],{"class":108},[102,37189,35548],{"class":112},[102,37191,37192],{"class":104,"line":1306},[102,37193,2389],{"emptyLinePlaceholder":30},[102,37195,37196],{"class":104,"line":1318},[102,37197,2389],{"emptyLinePlaceholder":30},[102,37199,37200],{"class":104,"line":1601},[102,37201,33942],{"class":171},[102,37203,37204,37206,37208],{"class":104,"line":1606},[102,37205,31938],{"class":108},[102,37207,33949],{"class":1952},[102,37209,31944],{"class":112},[102,37211,37212,37214,37216,37218,37220,37222,37224],{"class":104,"line":1612},[102,37213,33956],{"class":112},[102,37215,158],{"class":108},[102,37217,31446],{"class":112},[102,37219,31449],{"class":5206},[102,37221,158],{"class":108},[102,37223,31454],{"class":217},[102,37225,31457],{"class":112},[102,37227,37228,37230,37232,37234],{"class":104,"line":1617},[102,37229,33973],{"class":5206},[102,37231,158],{"class":108},[102,37233,33978],{"class":161},[102,37235,31457],{"class":112},[102,37237,37238,37240,37242,37244,37246,37248,37250],{"class":104,"line":1631},[102,37239,33985],{"class":5206},[102,37241,158],{"class":108},[102,37243,31484],{"class":112},[102,37245,31487],{"class":5206},[102,37247,158],{"class":108},[102,37249,35440],{"class":161},[102,37251,31495],{"class":112},[102,37253,37254,37256,37258,37260],{"class":104,"line":1636},[102,37255,34002],{"class":5206},[102,37257,158],{"class":108},[102,37259,31467],{"class":161},[102,37261,119],{"class":112},[102,37263,37264,37266,37268,37270,37272,37274],{"class":104,"line":1642},[102,37265,34013],{"class":112},[102,37267,158],{"class":108},[102,37269,31525],{"class":112},[102,37271,31528],{"class":5206},[102,37273,158],{"class":108},[102,37275,34024],{"class":112},[102,37277,37278],{"class":104,"line":1663},[102,37279,34029],{"class":171},[102,37281,37282,37284,37286,37288],{"class":104,"line":1668},[102,37283,34034],{"class":5206},[102,37285,158],{"class":108},[102,37287,330],{"class":161},[102,37289,31457],{"class":112},[102,37291,37292,37294,37296,37298],{"class":104,"line":1682},[102,37293,34045],{"class":5206},[102,37295,158],{"class":108},[102,37297,31467],{"class":161},[102,37299,31457],{"class":112},[102,37301,37302,37304,37306,37308],{"class":104,"line":1687},[102,37303,34056],{"class":5206},[102,37305,158],{"class":108},[102,37307,304],{"class":161},[102,37309,119],{"class":112},[102,37311,37312,37314],{"class":104,"line":1716},[102,37313,4079],{"class":108},[102,37315,34069],{"class":112},[102,37317,37318],{"class":104,"line":1721},[102,37319,2389],{"emptyLinePlaceholder":30},[102,37321,37322],{"class":104,"line":1738},[102,37323,34078],{"class":171},[102,37325,37326,37328,37330],{"class":104,"line":1743},[102,37327,31938],{"class":108},[102,37329,34085],{"class":1952},[102,37331,34088],{"class":112},[102,37333,37334],{"class":104,"line":1748},[102,37335,34093],{"class":171},[102,37337,37338,37340,37342,37344,37346,37348,37350],{"class":104,"line":1753},[102,37339,31228],{"class":112},[102,37341,158],{"class":108},[102,37343,31235],{"class":217},[102,37345,1693],{"class":108},[102,37347,31240],{"class":112},[102,37349,1690],{"class":108},[102,37351,34110],{"class":217},[102,37353,37354,37356,37358],{"class":104,"line":1767},[102,37355,31280],{"class":112},[102,37357,158],{"class":108},[102,37359,32280],{"class":112},[102,37361,37362],{"class":104,"line":1772},[102,37363,2389],{"emptyLinePlaceholder":30},[102,37365,37366],{"class":104,"line":2566},[102,37367,34127],{"class":171},[102,37369,37370,37372,37374],{"class":104,"line":2580},[102,37371,34132],{"class":112},[102,37373,158],{"class":108},[102,37375,32333],{"class":161},[102,37377,37378,37380,37382],{"class":104,"line":2588},[102,37379,34141],{"class":112},[102,37381,158],{"class":108},[102,37383,3074],{"class":161},[102,37385,37386],{"class":104,"line":2593},[102,37387,2389],{"emptyLinePlaceholder":30},[102,37389,37390],{"class":104,"line":2599},[102,37391,34154],{"class":171},[102,37393,37394],{"class":104,"line":2605},[102,37395,34159],{"class":171},[102,37397,37398],{"class":104,"line":2610},[102,37399,34164],{"class":171},[102,37401,37402,37404],{"class":104,"line":7938},[102,37403,34169],{"class":108},[102,37405,32875],{"class":112},[102,37407,37408],{"class":104,"line":7962},[102,37409,34176],{"class":171},[102,37411,37412,37414,37416,37418],{"class":104,"line":7967},[102,37413,3392],{"class":108},[102,37415,34183],{"class":112},[102,37417,26034],{"class":108},[102,37419,34188],{"class":112},[102,37421,37422,37424,37426],{"class":104,"line":7973},[102,37423,34193],{"class":112},[102,37425,158],{"class":108},[102,37427,34198],{"class":112},[102,37429,37430,37432,37434],{"class":104,"line":8000},[102,37431,34203],{"class":112},[102,37433,158],{"class":108},[102,37435,34208],{"class":112},[102,37437,37438],{"class":104,"line":8005},[102,37439,34213],{"class":171},[102,37441,37442],{"class":104,"line":8011},[102,37443,32866],{"class":112},[102,37445,37446],{"class":104,"line":8023},[102,37447,34222],{"class":171},[102,37449,37450,37452,37454],{"class":104,"line":8035},[102,37451,32651],{"class":112},[102,37453,158],{"class":108},[102,37455,34231],{"class":112},[102,37457,37458],{"class":104,"line":8047},[102,37459,34236],{"class":171},[102,37461,37462,37464,37466,37468,37470,37472,37474],{"class":104,"line":9706},[102,37463,32668],{"class":112},[102,37465,158],{"class":108},[102,37467,32673],{"class":112},[102,37469,32676],{"class":5206},[102,37471,158],{"class":108},[102,37473,330],{"class":161},[102,37475,119],{"class":112},[102,37477,37478],{"class":104,"line":9731},[102,37479,34257],{"class":171},[102,37481,37482],{"class":104,"line":9754},[102,37483,34262],{"class":171},[102,37485,37486],{"class":104,"line":9778},[102,37487,34267],{"class":171},[102,37489,37490,37492,37494,37496,37498],{"class":104,"line":9783},[102,37491,34272],{"class":112},[102,37493,9467],{"class":108},[102,37495,32778],{"class":112},[102,37497,2938],{"class":108},[102,37499,34281],{"class":112},[102,37501,37502],{"class":104,"line":9788},[102,37503,34286],{"class":171},[102,37505,37506,37508,37510,37512,37514],{"class":104,"line":9793},[102,37507,34291],{"class":112},[102,37509,9467],{"class":108},[102,37511,34296],{"class":112},[102,37513,304],{"class":161},[102,37515,119],{"class":112},[102,37517,37518],{"class":104,"line":9802},[102,37519,2389],{"emptyLinePlaceholder":30},[102,37521,37522],{"class":104,"line":9807},[102,37523,34309],{"class":171},[102,37525,37526,37528,37530,37532,37534],{"class":104,"line":9813},[102,37527,34314],{"class":112},[102,37529,158],{"class":108},[102,37531,34319],{"class":112},[102,37533,697],{"class":108},[102,37535,34324],{"class":112},[102,37537,37538],{"class":104,"line":9834},[102,37539,34329],{"class":171},[102,37541,37542,37544,37546,37548],{"class":104,"line":9840},[102,37543,32442],{"class":161},[102,37545,113],{"class":112},[102,37547,34338],{"class":217},[102,37549,34341],{"class":112},[102,37551,37552],{"class":104,"line":9854},[102,37553,2389],{"emptyLinePlaceholder":30},[102,37555,37556],{"class":104,"line":9860},[102,37557,34350],{"class":171},[102,37559,37560,37562,37564,37566,37568],{"class":104,"line":9887},[102,37561,1520],{"class":108},[102,37563,31211],{"class":161},[102,37565,2938],{"class":108},[102,37567,31216],{"class":217},[102,37569,3728],{"class":112},[102,37571,37572],{"class":104,"line":9896},[102,37573,34367],{"class":171},[102,37575,37576,37578,37580],{"class":104,"line":9902},[102,37577,31280],{"class":112},[102,37579,158],{"class":108},[102,37581,37080],{"class":112},[102,37583,37584],{"class":104,"line":9910},[102,37585,34380],{"class":171},[102,37587,37588],{"class":104,"line":9915},[102,37589,34385],{"class":171},[102,37591,37592,37594,37596],{"class":104,"line":16594},[102,37593,34390],{"class":112},[102,37595,34393],{"class":217},[102,37597,30488],{"class":112},[102,37599,37600],{"class":104,"line":16600},[102,37601,34400],{"class":171},[102,37603,37604,37606,37608],{"class":104,"line":16623},[102,37605,34013],{"class":112},[102,37607,158],{"class":108},[102,37609,34409],{"class":112},[102,37611,37612],{"class":104,"line":16629},[102,37613,34414],{"class":171},[102,37615,37616],{"class":104,"line":16652},[102,37617,34419],{"class":112},[102,37619,37620],{"class":104,"line":16666},[102,37621,2389],{"emptyLinePlaceholder":30},[102,37623,37624],{"class":104,"line":16686},[102,37625,34428],{"class":171},[102,37627,37628],{"class":104,"line":16692},[102,37629,34433],{"class":171},[102,37631,37632,37634,37636,37638,37640,37642,37644],{"class":104,"line":16703},[102,37633,31228],{"class":112},[102,37635,158],{"class":108},[102,37637,31235],{"class":217},[102,37639,1693],{"class":108},[102,37641,31240],{"class":112},[102,37643,1690],{"class":108},[102,37645,34110],{"class":217},[102,37647,37648,37650,37652],{"class":104,"line":16726},[102,37649,31280],{"class":112},[102,37651,158],{"class":108},[102,37653,32280],{"class":112},[102,37655,37656],{"class":104,"line":16748},[102,37657,34462],{"class":171},[102,37659,37660],{"class":104,"line":16753},[102,37661,34467],{"class":171},[102,37663,37664,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698,37700,37702,37704,37706,37708],{"class":104,"line":16759},[102,37665,34472],{"class":112},[102,37667,158],{"class":108},[102,37669,1003],{"class":112},[102,37671,34479],{"class":217},[102,37673,491],{"class":112},[102,37675,34484],{"class":217},[102,37677,491],{"class":112},[102,37679,34489],{"class":217},[102,37681,491],{"class":112},[102,37683,34494],{"class":217},[102,37685,491],{"class":112},[102,37687,34499],{"class":217},[102,37689,491],{"class":112},[102,37691,34504],{"class":217},[102,37693,491],{"class":112},[102,37695,34509],{"class":217},[102,37697,491],{"class":112},[102,37699,34514],{"class":217},[102,37701,491],{"class":112},[102,37703,34519],{"class":217},[102,37705,491],{"class":112},[102,37707,34524],{"class":217},[102,37709,33237],{"class":112},[102,37711,37712,37714],{"class":104,"line":16773},[102,37713,34169],{"class":108},[102,37715,32875],{"class":112},[102,37717,37718],{"class":104,"line":16786},[102,37719,34537],{"class":171},[102,37721,37722,37724,37726,37728],{"class":104,"line":16791},[102,37723,3392],{"class":108},[102,37725,34544],{"class":112},[102,37727,26034],{"class":108},[102,37729,34188],{"class":112},[102,37731,37732,37734,37736],{"class":104,"line":16805},[102,37733,32601],{"class":112},[102,37735,158],{"class":108},[102,37737,32606],{"class":112},[102,37739,37740,37742,37744],{"class":104,"line":16810},[102,37741,32616],{"class":112},[102,37743,158],{"class":108},[102,37745,32621],{"class":112},[102,37747,37748],{"class":104,"line":16816},[102,37749,2389],{"emptyLinePlaceholder":30},[102,37751,37752],{"class":104,"line":16821},[102,37753,34573],{"class":171},[102,37755,37756],{"class":104,"line":16835},[102,37757,32866],{"class":112},[102,37759,37760],{"class":104,"line":16840},[102,37761,34582],{"class":171},[102,37763,37764,37766,37768],{"class":104,"line":16845},[102,37765,32651],{"class":112},[102,37767,158],{"class":108},[102,37769,32656],{"class":112},[102,37771,37772],{"class":104,"line":16859},[102,37773,34595],{"class":171},[102,37775,37776,37778,37780,37782,37784,37786,37788],{"class":104,"line":16871},[102,37777,32668],{"class":112},[102,37779,158],{"class":108},[102,37781,32673],{"class":112},[102,37783,32676],{"class":5206},[102,37785,158],{"class":108},[102,37787,330],{"class":161},[102,37789,119],{"class":112},[102,37791,37792],{"class":104,"line":16876},[102,37793,34616],{"class":171},[102,37795,37796,37798,37800],{"class":104,"line":16889},[102,37797,34621],{"class":112},[102,37799,158],{"class":108},[102,37801,34626],{"class":112},[102,37803,37804,37806,37808],{"class":104,"line":16894},[102,37805,34631],{"class":112},[102,37807,158],{"class":108},[102,37809,34636],{"class":112},[102,37811,37812,37814,37816,37818,37820,37822,37824,37826],{"class":104,"line":16899},[102,37813,34641],{"class":161},[102,37815,113],{"class":112},[102,37817,34646],{"class":217},[102,37819,34649],{"class":112},[102,37821,34652],{"class":217},[102,37823,491],{"class":112},[102,37825,34657],{"class":217},[102,37827,34660],{"class":112},[73,37829,37831],{"id":37830},"_22vgg","2.2.VGG",[21988,37833,37835],{"id":37834},"_221原理","2.2.1.原理",[19,37837,37838],{},[1451,37839],{"alt":23,"src":37840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,37842,37843],{},[1451,37844],{"alt":23,"src":37845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,37847,37848],{},[1451,37849],{"alt":23,"src":37850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,37852,37853],{},"参数详细描述：",[19,37855,37856],{},[1451,37857],{"alt":23,"src":37858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,37860,37861],{},[1451,37862],{"alt":23,"src":37863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,37865,37866],{},[1451,37867],{"alt":23,"src":37868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,37870,37871],{},[1451,37872],{"alt":23,"src":37873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,37875,37876],{},[1451,37877],{"alt":23,"src":37878},"\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",[21988,37880,37882],{"id":37881},"_222代码实现","2.2.2.代码实现",[56,37884,37885],{},[59,37886,37887],{},"网络搭建",[93,37889,37891],{"className":30369,"code":37890,"language":30371,"meta":23,"style":23},"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",[99,37892,37893,37899,37911,37921,37931,37935,37952,37960,37979,37984,37989,38001,38039,38044,38080,38084,38113,38118,38123,38134,38170,38174,38210,38214,38242,38246,38251,38262,38298,38302,38338,38342,38378,38382,38410,38414,38419,38430,38467,38471,38507,38511,38547,38551,38579,38583,38588,38599,38635,38639,38675,38679,38715,38719,38747,38751,38756,38767,38772,38777,38782,38803,38807,38819,38823,38835,38839,38843,38848,38853,38868,38873,38883,38888,38903,38908,38927,38932,38941,38946,38956,38961,38966,38980,38985,38999,39007,39011,39015,39023,39034,39045,39056,39067,39078,39089,39095,39099,39104,39117,39137,39143,39152],{"__ignoreMap":23},[102,37894,37895,37897],{"class":104,"line":105},[102,37896,30383],{"class":108},[102,37898,30386],{"class":112},[102,37900,37901,37903,37906,37908],{"class":104,"line":24},[102,37902,30728],{"class":108},[102,37904,37905],{"class":112}," sympy.core.sympify ",[102,37907,30383],{"class":108},[102,37909,37910],{"class":112}," kernS\n",[102,37912,37913,37915,37917,37919],{"class":104,"line":1168},[102,37914,30728],{"class":108},[102,37916,30731],{"class":112},[102,37918,30383],{"class":108},[102,37920,30736],{"class":112},[102,37922,37923,37925,37927,37929],{"class":104,"line":1183},[102,37924,30728],{"class":108},[102,37926,30748],{"class":112},[102,37928,30383],{"class":108},[102,37930,30753],{"class":112},[102,37932,37933],{"class":104,"line":1189},[102,37934,2389],{"emptyLinePlaceholder":30},[102,37936,37937,37939,37942,37944,37946,37948,37950],{"class":104,"line":1203},[102,37938,14684],{"class":108},[102,37940,37941],{"class":1952}," VGG16",[102,37943,113],{"class":112},[102,37945,30769],{"class":1952},[102,37947,671],{"class":112},[102,37949,30774],{"class":1952},[102,37951,30777],{"class":112},[102,37953,37954,37956,37958],{"class":104,"line":1209},[102,37955,30792],{"class":108},[102,37957,30795],{"class":161},[102,37959,30798],{"class":112},[102,37961,37962,37964,37966,37969,37971,37973,37975,37977],{"class":104,"line":1300},[102,37963,30808],{"class":161},[102,37965,113],{"class":112},[102,37967,37968],{"class":161},"VGG16",[102,37970,12425],{"class":112},[102,37972,30814],{"class":161},[102,37974,30817],{"class":112},[102,37976,30820],{"class":161},[102,37978,1965],{"class":112},[102,37980,37981],{"class":104,"line":1306},[102,37982,37983],{"class":171},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[102,37985,37986],{"class":104,"line":1318},[102,37987,37988],{"class":171},"        # 这里用的是灰度图\n",[102,37990,37991,37993,37996,37998],{"class":104,"line":1601},[102,37992,30836],{"class":161},[102,37994,37995],{"class":112},".block1",[102,37997,158],{"class":108},[102,37999,38000],{"class":112},"nn.Sequential(\n",[102,38002,38003,38006,38008,38010,38012,38014,38016,38018,38020,38022,38024,38026,38028,38030,38032,38034,38036],{"class":104,"line":1606},[102,38004,38005],{"class":112},"            nn.Conv2d(",[102,38007,30847],{"class":5206},[102,38009,158],{"class":108},[102,38011,330],{"class":161},[102,38013,491],{"class":112},[102,38015,30856],{"class":5206},[102,38017,158],{"class":108},[102,38019,316],{"class":161},[102,38021,491],{"class":112},[102,38023,30865],{"class":5206},[102,38025,158],{"class":108},[102,38027,184],{"class":161},[102,38029,491],{"class":112},[102,38031,30874],{"class":5206},[102,38033,158],{"class":108},[102,38035,330],{"class":161},[102,38037,38038],{"class":112},"),\n",[102,38040,38041],{"class":104,"line":1612},[102,38042,38043],{"class":112},"            nn.ReLU(),\n",[102,38045,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068,38070,38072,38074,38076,38078],{"class":104,"line":1617},[102,38047,38005],{"class":112},[102,38049,30847],{"class":5206},[102,38051,158],{"class":108},[102,38053,316],{"class":161},[102,38055,491],{"class":112},[102,38057,30856],{"class":5206},[102,38059,158],{"class":108},[102,38061,316],{"class":161},[102,38063,491],{"class":112},[102,38065,30865],{"class":5206},[102,38067,158],{"class":108},[102,38069,184],{"class":161},[102,38071,491],{"class":112},[102,38073,30874],{"class":5206},[102,38075,158],{"class":108},[102,38077,330],{"class":161},[102,38079,38038],{"class":112},[102,38081,38082],{"class":104,"line":1631},[102,38083,38043],{"class":112},[102,38085,38086,38089,38091,38093,38095,38097,38099,38101,38103,38105,38107,38109,38111],{"class":104,"line":1636},[102,38087,38088],{"class":112},"            nn.MaxPool2d(",[102,38090,30865],{"class":5206},[102,38092,158],{"class":108},[102,38094,190],{"class":161},[102,38096,491],{"class":112},[102,38098,30920],{"class":5206},[102,38100,158],{"class":108},[102,38102,190],{"class":161},[102,38104,491],{"class":112},[102,38106,30874],{"class":5206},[102,38108,158],{"class":108},[102,38110,304],{"class":161},[102,38112,119],{"class":112},[102,38114,38115],{"class":104,"line":1642},[102,38116,38117],{"class":112},"        )\n",[102,38119,38120],{"class":104,"line":1663},[102,38121,38122],{"class":171},"        # 第二层\n",[102,38124,38125,38127,38130,38132],{"class":104,"line":1668},[102,38126,30836],{"class":161},[102,38128,38129],{"class":112},".block2",[102,38131,158],{"class":108},[102,38133,38000],{"class":112},[102,38135,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168],{"class":104,"line":1682},[102,38137,38005],{"class":112},[102,38139,30847],{"class":5206},[102,38141,158],{"class":108},[102,38143,316],{"class":161},[102,38145,491],{"class":112},[102,38147,30856],{"class":5206},[102,38149,158],{"class":108},[102,38151,32061],{"class":161},[102,38153,491],{"class":112},[102,38155,30865],{"class":5206},[102,38157,158],{"class":108},[102,38159,184],{"class":161},[102,38161,491],{"class":112},[102,38163,30874],{"class":5206},[102,38165,158],{"class":108},[102,38167,330],{"class":161},[102,38169,38038],{"class":112},[102,38171,38172],{"class":104,"line":1687},[102,38173,38043],{"class":112},[102,38175,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206,38208],{"class":104,"line":1716},[102,38177,38005],{"class":112},[102,38179,30847],{"class":5206},[102,38181,158],{"class":108},[102,38183,32061],{"class":161},[102,38185,491],{"class":112},[102,38187,30856],{"class":5206},[102,38189,158],{"class":108},[102,38191,32061],{"class":161},[102,38193,491],{"class":112},[102,38195,30865],{"class":5206},[102,38197,158],{"class":108},[102,38199,184],{"class":161},[102,38201,491],{"class":112},[102,38203,30874],{"class":5206},[102,38205,158],{"class":108},[102,38207,330],{"class":161},[102,38209,38038],{"class":112},[102,38211,38212],{"class":104,"line":1721},[102,38213,38043],{"class":112},[102,38215,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240],{"class":104,"line":1738},[102,38217,38088],{"class":112},[102,38219,30865],{"class":5206},[102,38221,158],{"class":108},[102,38223,190],{"class":161},[102,38225,491],{"class":112},[102,38227,30920],{"class":5206},[102,38229,158],{"class":108},[102,38231,190],{"class":161},[102,38233,491],{"class":112},[102,38235,30874],{"class":5206},[102,38237,158],{"class":108},[102,38239,304],{"class":161},[102,38241,119],{"class":112},[102,38243,38244],{"class":104,"line":1743},[102,38245,38117],{"class":112},[102,38247,38248],{"class":104,"line":1748},[102,38249,38250],{"class":171},"        # 第三层\n",[102,38252,38253,38255,38258,38260],{"class":104,"line":1753},[102,38254,30836],{"class":161},[102,38256,38257],{"class":112},".block3",[102,38259,158],{"class":108},[102,38261,38000],{"class":112},[102,38263,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294,38296],{"class":104,"line":1767},[102,38265,38005],{"class":112},[102,38267,30847],{"class":5206},[102,38269,158],{"class":108},[102,38271,32061],{"class":161},[102,38273,491],{"class":112},[102,38275,30856],{"class":5206},[102,38277,158],{"class":108},[102,38279,34861],{"class":161},[102,38281,491],{"class":112},[102,38283,30865],{"class":5206},[102,38285,158],{"class":108},[102,38287,184],{"class":161},[102,38289,491],{"class":112},[102,38291,30874],{"class":5206},[102,38293,158],{"class":108},[102,38295,330],{"class":161},[102,38297,38038],{"class":112},[102,38299,38300],{"class":104,"line":1772},[102,38301,38043],{"class":112},[102,38303,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328,38330,38332,38334,38336],{"class":104,"line":2566},[102,38305,38005],{"class":112},[102,38307,30847],{"class":5206},[102,38309,158],{"class":108},[102,38311,34861],{"class":161},[102,38313,491],{"class":112},[102,38315,30856],{"class":5206},[102,38317,158],{"class":108},[102,38319,34861],{"class":161},[102,38321,491],{"class":112},[102,38323,30865],{"class":5206},[102,38325,158],{"class":108},[102,38327,184],{"class":161},[102,38329,491],{"class":112},[102,38331,30874],{"class":5206},[102,38333,158],{"class":108},[102,38335,330],{"class":161},[102,38337,38038],{"class":112},[102,38339,38340],{"class":104,"line":2580},[102,38341,38043],{"class":112},[102,38343,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376],{"class":104,"line":2588},[102,38345,38005],{"class":112},[102,38347,30847],{"class":5206},[102,38349,158],{"class":108},[102,38351,34861],{"class":161},[102,38353,491],{"class":112},[102,38355,30856],{"class":5206},[102,38357,158],{"class":108},[102,38359,34861],{"class":161},[102,38361,491],{"class":112},[102,38363,30865],{"class":5206},[102,38365,158],{"class":108},[102,38367,184],{"class":161},[102,38369,491],{"class":112},[102,38371,30874],{"class":5206},[102,38373,158],{"class":108},[102,38375,330],{"class":161},[102,38377,38038],{"class":112},[102,38379,38380],{"class":104,"line":2593},[102,38381,38043],{"class":112},[102,38383,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408],{"class":104,"line":2599},[102,38385,38088],{"class":112},[102,38387,30865],{"class":5206},[102,38389,158],{"class":108},[102,38391,190],{"class":161},[102,38393,491],{"class":112},[102,38395,30920],{"class":5206},[102,38397,158],{"class":108},[102,38399,190],{"class":161},[102,38401,491],{"class":112},[102,38403,30874],{"class":5206},[102,38405,158],{"class":108},[102,38407,304],{"class":161},[102,38409,119],{"class":112},[102,38411,38412],{"class":104,"line":2605},[102,38413,38117],{"class":112},[102,38415,38416],{"class":104,"line":2610},[102,38417,38418],{"class":171},"        # 第四层\n",[102,38420,38421,38423,38426,38428],{"class":104,"line":7938},[102,38422,30836],{"class":161},[102,38424,38425],{"class":112},".block4",[102,38427,158],{"class":108},[102,38429,38000],{"class":112},[102,38431,38432,38434,38436,38438,38440,38442,38444,38446,38449,38451,38453,38455,38457,38459,38461,38463,38465],{"class":104,"line":7962},[102,38433,38005],{"class":112},[102,38435,30847],{"class":5206},[102,38437,158],{"class":108},[102,38439,34861],{"class":161},[102,38441,491],{"class":112},[102,38443,30856],{"class":5206},[102,38445,158],{"class":108},[102,38447,38448],{"class":161},"512",[102,38450,491],{"class":112},[102,38452,30865],{"class":5206},[102,38454,158],{"class":108},[102,38456,184],{"class":161},[102,38458,491],{"class":112},[102,38460,30874],{"class":5206},[102,38462,158],{"class":108},[102,38464,330],{"class":161},[102,38466,38038],{"class":112},[102,38468,38469],{"class":104,"line":7967},[102,38470,38043],{"class":112},[102,38472,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503,38505],{"class":104,"line":7973},[102,38474,38005],{"class":112},[102,38476,30847],{"class":5206},[102,38478,158],{"class":108},[102,38480,38448],{"class":161},[102,38482,491],{"class":112},[102,38484,30856],{"class":5206},[102,38486,158],{"class":108},[102,38488,38448],{"class":161},[102,38490,491],{"class":112},[102,38492,30865],{"class":5206},[102,38494,158],{"class":108},[102,38496,184],{"class":161},[102,38498,491],{"class":112},[102,38500,30874],{"class":5206},[102,38502,158],{"class":108},[102,38504,330],{"class":161},[102,38506,38038],{"class":112},[102,38508,38509],{"class":104,"line":8000},[102,38510,38043],{"class":112},[102,38512,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543,38545],{"class":104,"line":8005},[102,38514,38005],{"class":112},[102,38516,30847],{"class":5206},[102,38518,158],{"class":108},[102,38520,38448],{"class":161},[102,38522,491],{"class":112},[102,38524,30856],{"class":5206},[102,38526,158],{"class":108},[102,38528,38448],{"class":161},[102,38530,491],{"class":112},[102,38532,30865],{"class":5206},[102,38534,158],{"class":108},[102,38536,184],{"class":161},[102,38538,491],{"class":112},[102,38540,30874],{"class":5206},[102,38542,158],{"class":108},[102,38544,330],{"class":161},[102,38546,38038],{"class":112},[102,38548,38549],{"class":104,"line":8011},[102,38550,38043],{"class":112},[102,38552,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575,38577],{"class":104,"line":8023},[102,38554,38088],{"class":112},[102,38556,30865],{"class":5206},[102,38558,158],{"class":108},[102,38560,190],{"class":161},[102,38562,491],{"class":112},[102,38564,30920],{"class":5206},[102,38566,158],{"class":108},[102,38568,190],{"class":161},[102,38570,491],{"class":112},[102,38572,30874],{"class":5206},[102,38574,158],{"class":108},[102,38576,304],{"class":161},[102,38578,119],{"class":112},[102,38580,38581],{"class":104,"line":8035},[102,38582,38117],{"class":112},[102,38584,38585],{"class":104,"line":8047},[102,38586,38587],{"class":171},"        # 第五层\n",[102,38589,38590,38592,38595,38597],{"class":104,"line":9706},[102,38591,30836],{"class":161},[102,38593,38594],{"class":112},".block5",[102,38596,158],{"class":108},[102,38598,38000],{"class":112},[102,38600,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633],{"class":104,"line":9731},[102,38602,38005],{"class":112},[102,38604,30847],{"class":5206},[102,38606,158],{"class":108},[102,38608,38448],{"class":161},[102,38610,491],{"class":112},[102,38612,30856],{"class":5206},[102,38614,158],{"class":108},[102,38616,38448],{"class":161},[102,38618,491],{"class":112},[102,38620,30865],{"class":5206},[102,38622,158],{"class":108},[102,38624,184],{"class":161},[102,38626,491],{"class":112},[102,38628,30874],{"class":5206},[102,38630,158],{"class":108},[102,38632,330],{"class":161},[102,38634,38038],{"class":112},[102,38636,38637],{"class":104,"line":9754},[102,38638,38043],{"class":112},[102,38640,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673],{"class":104,"line":9778},[102,38642,38005],{"class":112},[102,38644,30847],{"class":5206},[102,38646,158],{"class":108},[102,38648,38448],{"class":161},[102,38650,491],{"class":112},[102,38652,30856],{"class":5206},[102,38654,158],{"class":108},[102,38656,38448],{"class":161},[102,38658,491],{"class":112},[102,38660,30865],{"class":5206},[102,38662,158],{"class":108},[102,38664,184],{"class":161},[102,38666,491],{"class":112},[102,38668,30874],{"class":5206},[102,38670,158],{"class":108},[102,38672,330],{"class":161},[102,38674,38038],{"class":112},[102,38676,38677],{"class":104,"line":9783},[102,38678,38043],{"class":112},[102,38680,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713],{"class":104,"line":9788},[102,38682,38005],{"class":112},[102,38684,30847],{"class":5206},[102,38686,158],{"class":108},[102,38688,38448],{"class":161},[102,38690,491],{"class":112},[102,38692,30856],{"class":5206},[102,38694,158],{"class":108},[102,38696,38448],{"class":161},[102,38698,491],{"class":112},[102,38700,30865],{"class":5206},[102,38702,158],{"class":108},[102,38704,184],{"class":161},[102,38706,491],{"class":112},[102,38708,30874],{"class":5206},[102,38710,158],{"class":108},[102,38712,330],{"class":161},[102,38714,38038],{"class":112},[102,38716,38717],{"class":104,"line":9793},[102,38718,38043],{"class":112},[102,38720,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745],{"class":104,"line":9802},[102,38722,38088],{"class":112},[102,38724,30865],{"class":5206},[102,38726,158],{"class":108},[102,38728,190],{"class":161},[102,38730,491],{"class":112},[102,38732,30920],{"class":5206},[102,38734,158],{"class":108},[102,38736,190],{"class":161},[102,38738,491],{"class":112},[102,38740,30874],{"class":5206},[102,38742,158],{"class":108},[102,38744,304],{"class":161},[102,38746,119],{"class":112},[102,38748,38749],{"class":104,"line":9807},[102,38750,38117],{"class":112},[102,38752,38753],{"class":104,"line":9813},[102,38754,38755],{"class":171},"        # 全连接层\n",[102,38757,38758,38760,38763,38765],{"class":104,"line":9834},[102,38759,30836],{"class":161},[102,38761,38762],{"class":112},".block6",[102,38764,158],{"class":108},[102,38766,38000],{"class":112},[102,38768,38769],{"class":104,"line":9840},[102,38770,38771],{"class":171},"            # 平展操作\n",[102,38773,38774],{"class":104,"line":9854},[102,38775,38776],{"class":171},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[102,38778,38779],{"class":104,"line":9860},[102,38780,38781],{"class":112},"            nn.Flatten(),\n",[102,38783,38784,38787,38789,38791,38793,38795,38797,38799,38801],{"class":104,"line":9887},[102,38785,38786],{"class":112},"            nn.Linear(",[102,38788,482],{"class":161},[102,38790,568],{"class":108},[102,38792,482],{"class":161},[102,38794,568],{"class":108},[102,38796,38448],{"class":161},[102,38798,491],{"class":112},[102,38800,34861],{"class":161},[102,38802,38038],{"class":112},[102,38804,38805],{"class":104,"line":9896},[102,38806,38043],{"class":112},[102,38808,38809,38811,38813,38815,38817],{"class":104,"line":9902},[102,38810,38786],{"class":112},[102,38812,34861],{"class":161},[102,38814,491],{"class":112},[102,38816,32061],{"class":161},[102,38818,38038],{"class":112},[102,38820,38821],{"class":104,"line":9910},[102,38822,38043],{"class":112},[102,38824,38825,38827,38829,38831,38833],{"class":104,"line":9915},[102,38826,38786],{"class":112},[102,38828,32061],{"class":161},[102,38830,491],{"class":112},[102,38832,559],{"class":161},[102,38834,119],{"class":112},[102,38836,38837],{"class":104,"line":16594},[102,38838,38117],{"class":112},[102,38840,38841],{"class":104,"line":16600},[102,38842,2389],{"emptyLinePlaceholder":30},[102,38844,38845],{"class":104,"line":16623},[102,38846,38847],{"class":171},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[102,38849,38850],{"class":104,"line":16629},[102,38851,38852],{"class":171},"        # 循环遍历模型\n",[102,38854,38855,38857,38860,38862,38865],{"class":104,"line":16652},[102,38856,3392],{"class":108},[102,38858,38859],{"class":112}," m ",[102,38861,26034],{"class":108},[102,38863,38864],{"class":161}," self",[102,38866,38867],{"class":112},".modules():\n",[102,38869,38870],{"class":104,"line":16666},[102,38871,38872],{"class":171},"            # print(m)\n",[102,38874,38875,38877,38880],{"class":104,"line":16686},[102,38876,4631],{"class":108},[102,38878,38879],{"class":161}," isinstance",[102,38881,38882],{"class":112},"(m,nn.Conv2d):\n",[102,38884,38885],{"class":104,"line":16692},[102,38886,38887],{"class":171},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[102,38889,38890,38893,38896,38898,38901],{"class":104,"line":16703},[102,38891,38892],{"class":112},"                nn.init.kaiming_normal_(m.weight,",[102,38894,38895],{"class":5206},"nonlinearity",[102,38897,158],{"class":108},[102,38899,38900],{"class":217},"'relu'",[102,38902,119],{"class":112},[102,38904,38905],{"class":104,"line":16726},[102,38906,38907],{"class":171},"                # 判断b参数是否存在\n",[102,38909,38910,38913,38916,38919,38922,38925],{"class":104,"line":16748},[102,38911,38912],{"class":108},"                if",[102,38914,38915],{"class":112}," m.bias ",[102,38917,38918],{"class":108},"is",[102,38920,38921],{"class":108}," not",[102,38923,38924],{"class":161}," None",[102,38926,3728],{"class":112},[102,38928,38929],{"class":104,"line":16753},[102,38930,38931],{"class":171},"                    # 如果参数不存在的化初始化b=0\n",[102,38933,38934,38937,38939],{"class":104,"line":16759},[102,38935,38936],{"class":112},"                    nn.init.constant_(m.bias,",[102,38938,304],{"class":161},[102,38940,119],{"class":112},[102,38942,38943],{"class":104,"line":16773},[102,38944,38945],{"class":171},"            # 全连接层初始化\n",[102,38947,38948,38951,38953],{"class":104,"line":16786},[102,38949,38950],{"class":108},"            elif",[102,38952,38879],{"class":161},[102,38954,38955],{"class":112},"(m,nn.Linear):\n",[102,38957,38958],{"class":104,"line":16791},[102,38959,38960],{"class":171},"                # 这个初始化方法是利用的是正太分布的方式\n",[102,38962,38963],{"class":104,"line":16805},[102,38964,38965],{"class":171},"                # 均值为0，方差为0.01\n",[102,38967,38968,38971,38973,38975,38978],{"class":104,"line":16810},[102,38969,38970],{"class":112},"                nn.init.normal_(m.weight,",[102,38972,304],{"class":161},[102,38974,491],{"class":112},[102,38976,38977],{"class":161},"0.01",[102,38979,119],{"class":112},[102,38981,38982],{"class":104,"line":16816},[102,38983,38984],{"class":171},"                # 初始化b参数\n",[102,38986,38987,38989,38991,38993,38995,38997],{"class":104,"line":16821},[102,38988,38912],{"class":108},[102,38990,38915],{"class":112},[102,38992,38918],{"class":108},[102,38994,38921],{"class":108},[102,38996,38924],{"class":161},[102,38998,3728],{"class":112},[102,39000,39001,39003,39005],{"class":104,"line":16835},[102,39002,38936],{"class":112},[102,39004,304],{"class":161},[102,39006,119],{"class":112},[102,39008,39009],{"class":104,"line":16840},[102,39010,2389],{"emptyLinePlaceholder":30},[102,39012,39013],{"class":104,"line":16845},[102,39014,35156],{"class":171},[102,39016,39017,39019,39021],{"class":104,"line":16859},[102,39018,30792],{"class":108},[102,39020,31084],{"class":1952},[102,39022,31087],{"class":112},[102,39024,39025,39027,39029,39031],{"class":104,"line":16871},[102,39026,31092],{"class":112},[102,39028,158],{"class":108},[102,39030,30814],{"class":161},[102,39032,39033],{"class":112},".block1(x)\n",[102,39035,39036,39038,39040,39042],{"class":104,"line":16876},[102,39037,31092],{"class":112},[102,39039,158],{"class":108},[102,39041,30814],{"class":161},[102,39043,39044],{"class":112},".block2(x)\n",[102,39046,39047,39049,39051,39053],{"class":104,"line":16889},[102,39048,31092],{"class":112},[102,39050,158],{"class":108},[102,39052,30814],{"class":161},[102,39054,39055],{"class":112},".block3(x)\n",[102,39057,39058,39060,39062,39064],{"class":104,"line":16894},[102,39059,31092],{"class":112},[102,39061,158],{"class":108},[102,39063,30814],{"class":161},[102,39065,39066],{"class":112},".block4(x)\n",[102,39068,39069,39071,39073,39075],{"class":104,"line":16899},[102,39070,31092],{"class":112},[102,39072,158],{"class":108},[102,39074,30814],{"class":161},[102,39076,39077],{"class":112},".block5(x)\n",[102,39079,39080,39082,39084,39086],{"class":104,"line":16904},[102,39081,31092],{"class":112},[102,39083,158],{"class":108},[102,39085,30814],{"class":161},[102,39087,39088],{"class":112},".block6(x)\n",[102,39090,39091,39093],{"class":104,"line":16917},[102,39092,14742],{"class":108},[102,39094,31200],{"class":112},[102,39096,39097],{"class":104,"line":16922},[102,39098,2389],{"emptyLinePlaceholder":30},[102,39100,39101],{"class":104,"line":32624},[102,39102,39103],{"class":171},"# 验证模型\n",[102,39105,39106,39108,39110,39112,39115],{"class":104,"line":32630},[102,39107,1520],{"class":108},[102,39109,31211],{"class":161},[102,39111,2938],{"class":108},[102,39113,39114],{"class":217},"'__main__'",[102,39116,3728],{"class":112},[102,39118,39119,39121,39123,39125,39127,39129,39131,39133,39135],{"class":104,"line":32636},[102,39120,31228],{"class":112},[102,39122,158],{"class":108},[102,39124,30442],{"class":112},[102,39126,31235],{"class":217},[102,39128,1693],{"class":108},[102,39130,31240],{"class":112},[102,39132,1690],{"class":108},[102,39134,30467],{"class":217},[102,39136,119],{"class":112},[102,39138,39139,39141],{"class":104,"line":32642},[102,39140,31290],{"class":161},[102,39142,30476],{"class":112},[102,39144,39145,39147,39149],{"class":104,"line":32648},[102,39146,31280],{"class":112},[102,39148,158],{"class":108},[102,39150,39151],{"class":112},"VGG16().to(device)\n",[102,39153,39154,39156,39158,39160,39162,39164,39166,39168],{"class":104,"line":32659},[102,39155,31290],{"class":161},[102,39157,31293],{"class":112},[102,39159,330],{"class":161},[102,39161,491],{"class":112},[102,39163,31492],{"class":161},[102,39165,491],{"class":112},[102,39167,31492],{"class":161},[102,39169,31306],{"class":112},[56,39171,39172],{"start":24},[59,39173,39174],{},"训练代码",[19,39176,39177],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39179,39180],{},"解决方式:",[19,39182,39183],{},"①权重初始化",[93,39185,39187],{"className":30369,"code":39186,"language":30371,"meta":23,"style":23},"# 权重初始化,保证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",[99,39188,39189,39194,39199,39211,39216,39224,39229,39242,39247,39261,39266,39275,39280,39289,39294,39299,39312,39317,39331],{"__ignoreMap":23},[102,39190,39191],{"class":104,"line":105},[102,39192,39193],{"class":171},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[102,39195,39196],{"class":104,"line":24},[102,39197,39198],{"class":171},"# 循环遍历模型\n",[102,39200,39201,39203,39205,39207,39209],{"class":104,"line":1168},[102,39202,3014],{"class":108},[102,39204,38859],{"class":112},[102,39206,26034],{"class":108},[102,39208,38864],{"class":161},[102,39210,38867],{"class":112},[102,39212,39213],{"class":104,"line":1183},[102,39214,39215],{"class":171},"    # print(m)\n",[102,39217,39218,39220,39222],{"class":104,"line":1189},[102,39219,3090],{"class":108},[102,39221,38879],{"class":161},[102,39223,38882],{"class":112},[102,39225,39226],{"class":104,"line":1203},[102,39227,39228],{"class":171},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[102,39230,39231,39234,39236,39238,39240],{"class":104,"line":1209},[102,39232,39233],{"class":112},"        nn.init.kaiming_normal_(m.weight,",[102,39235,38895],{"class":5206},[102,39237,158],{"class":108},[102,39239,38900],{"class":217},[102,39241,119],{"class":112},[102,39243,39244],{"class":104,"line":1300},[102,39245,39246],{"class":171},"        # 判断b参数是否存在\n",[102,39248,39249,39251,39253,39255,39257,39259],{"class":104,"line":1306},[102,39250,2486],{"class":108},[102,39252,38915],{"class":112},[102,39254,38918],{"class":108},[102,39256,38921],{"class":108},[102,39258,38924],{"class":161},[102,39260,3728],{"class":112},[102,39262,39263],{"class":104,"line":1318},[102,39264,39265],{"class":171},"            # 如果参数不存在的化初始化b=0\n",[102,39267,39268,39271,39273],{"class":104,"line":1601},[102,39269,39270],{"class":112},"            nn.init.constant_(m.bias,",[102,39272,304],{"class":161},[102,39274,119],{"class":112},[102,39276,39277],{"class":104,"line":1606},[102,39278,39279],{"class":171},"    # 全连接层初始化\n",[102,39281,39282,39285,39287],{"class":104,"line":1612},[102,39283,39284],{"class":108},"    elif",[102,39286,38879],{"class":161},[102,39288,38955],{"class":112},[102,39290,39291],{"class":104,"line":1617},[102,39292,39293],{"class":171},"        # 这个初始化方法是利用的是正太分布的方式\n",[102,39295,39296],{"class":104,"line":1631},[102,39297,39298],{"class":171},"        # 均值为0，方差为0.01\n",[102,39300,39301,39304,39306,39308,39310],{"class":104,"line":1636},[102,39302,39303],{"class":112},"        nn.init.normal_(m.weight,",[102,39305,304],{"class":161},[102,39307,491],{"class":112},[102,39309,38977],{"class":161},[102,39311,119],{"class":112},[102,39313,39314],{"class":104,"line":1642},[102,39315,39316],{"class":171},"        # 初始化b参数\n",[102,39318,39319,39321,39323,39325,39327,39329],{"class":104,"line":1663},[102,39320,2486],{"class":108},[102,39322,38915],{"class":112},[102,39324,38918],{"class":108},[102,39326,38921],{"class":108},[102,39328,38924],{"class":161},[102,39330,3728],{"class":112},[102,39332,39333,39335,39337],{"class":104,"line":1668},[102,39334,39270],{"class":112},[102,39336,304],{"class":161},[102,39338,119],{"class":112},[19,39340,39341],{},"②尽可能地增加批次",[19,39343,39344],{},"训练完整代码：",[93,39346,39347],{"className":30369,"code":37890,"language":30371,"meta":23,"style":23},[99,39348,39349,39355,39365,39375,39385,39389,39405,39413,39431,39435,39439,39449,39485,39489,39525,39529,39557,39561,39565,39575,39611,39615,39651,39655,39683,39687,39691,39701,39737,39741,39777,39781,39817,39821,39849,39853,39857,39867,39903,39907,39943,39947,39983,39987,40015,40019,40023,40033,40069,40073,40109,40113,40149,40153,40181,40185,40189,40199,40203,40207,40211,40231,40235,40247,40251,40263,40267,40271,40275,40279,40291,40295,40303,40307,40319,40323,40337,40341,40349,40353,40361,40365,40369,40381,40385,40399,40407,40411,40415,40423,40433,40443,40453,40463,40473,40483,40489,40493,40497,40509,40529,40535,40543],{"__ignoreMap":23},[102,39350,39351,39353],{"class":104,"line":105},[102,39352,30383],{"class":108},[102,39354,30386],{"class":112},[102,39356,39357,39359,39361,39363],{"class":104,"line":24},[102,39358,30728],{"class":108},[102,39360,37905],{"class":112},[102,39362,30383],{"class":108},[102,39364,37910],{"class":112},[102,39366,39367,39369,39371,39373],{"class":104,"line":1168},[102,39368,30728],{"class":108},[102,39370,30731],{"class":112},[102,39372,30383],{"class":108},[102,39374,30736],{"class":112},[102,39376,39377,39379,39381,39383],{"class":104,"line":1183},[102,39378,30728],{"class":108},[102,39380,30748],{"class":112},[102,39382,30383],{"class":108},[102,39384,30753],{"class":112},[102,39386,39387],{"class":104,"line":1189},[102,39388,2389],{"emptyLinePlaceholder":30},[102,39390,39391,39393,39395,39397,39399,39401,39403],{"class":104,"line":1203},[102,39392,14684],{"class":108},[102,39394,37941],{"class":1952},[102,39396,113],{"class":112},[102,39398,30769],{"class":1952},[102,39400,671],{"class":112},[102,39402,30774],{"class":1952},[102,39404,30777],{"class":112},[102,39406,39407,39409,39411],{"class":104,"line":1209},[102,39408,30792],{"class":108},[102,39410,30795],{"class":161},[102,39412,30798],{"class":112},[102,39414,39415,39417,39419,39421,39423,39425,39427,39429],{"class":104,"line":1300},[102,39416,30808],{"class":161},[102,39418,113],{"class":112},[102,39420,37968],{"class":161},[102,39422,12425],{"class":112},[102,39424,30814],{"class":161},[102,39426,30817],{"class":112},[102,39428,30820],{"class":161},[102,39430,1965],{"class":112},[102,39432,39433],{"class":104,"line":1306},[102,39434,37983],{"class":171},[102,39436,39437],{"class":104,"line":1318},[102,39438,37988],{"class":171},[102,39440,39441,39443,39445,39447],{"class":104,"line":1601},[102,39442,30836],{"class":161},[102,39444,37995],{"class":112},[102,39446,158],{"class":108},[102,39448,38000],{"class":112},[102,39450,39451,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471,39473,39475,39477,39479,39481,39483],{"class":104,"line":1606},[102,39452,38005],{"class":112},[102,39454,30847],{"class":5206},[102,39456,158],{"class":108},[102,39458,330],{"class":161},[102,39460,491],{"class":112},[102,39462,30856],{"class":5206},[102,39464,158],{"class":108},[102,39466,316],{"class":161},[102,39468,491],{"class":112},[102,39470,30865],{"class":5206},[102,39472,158],{"class":108},[102,39474,184],{"class":161},[102,39476,491],{"class":112},[102,39478,30874],{"class":5206},[102,39480,158],{"class":108},[102,39482,330],{"class":161},[102,39484,38038],{"class":112},[102,39486,39487],{"class":104,"line":1612},[102,39488,38043],{"class":112},[102,39490,39491,39493,39495,39497,39499,39501,39503,39505,39507,39509,39511,39513,39515,39517,39519,39521,39523],{"class":104,"line":1617},[102,39492,38005],{"class":112},[102,39494,30847],{"class":5206},[102,39496,158],{"class":108},[102,39498,316],{"class":161},[102,39500,491],{"class":112},[102,39502,30856],{"class":5206},[102,39504,158],{"class":108},[102,39506,316],{"class":161},[102,39508,491],{"class":112},[102,39510,30865],{"class":5206},[102,39512,158],{"class":108},[102,39514,184],{"class":161},[102,39516,491],{"class":112},[102,39518,30874],{"class":5206},[102,39520,158],{"class":108},[102,39522,330],{"class":161},[102,39524,38038],{"class":112},[102,39526,39527],{"class":104,"line":1631},[102,39528,38043],{"class":112},[102,39530,39531,39533,39535,39537,39539,39541,39543,39545,39547,39549,39551,39553,39555],{"class":104,"line":1636},[102,39532,38088],{"class":112},[102,39534,30865],{"class":5206},[102,39536,158],{"class":108},[102,39538,190],{"class":161},[102,39540,491],{"class":112},[102,39542,30920],{"class":5206},[102,39544,158],{"class":108},[102,39546,190],{"class":161},[102,39548,491],{"class":112},[102,39550,30874],{"class":5206},[102,39552,158],{"class":108},[102,39554,304],{"class":161},[102,39556,119],{"class":112},[102,39558,39559],{"class":104,"line":1642},[102,39560,38117],{"class":112},[102,39562,39563],{"class":104,"line":1663},[102,39564,38122],{"class":171},[102,39566,39567,39569,39571,39573],{"class":104,"line":1668},[102,39568,30836],{"class":161},[102,39570,38129],{"class":112},[102,39572,158],{"class":108},[102,39574,38000],{"class":112},[102,39576,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609],{"class":104,"line":1682},[102,39578,38005],{"class":112},[102,39580,30847],{"class":5206},[102,39582,158],{"class":108},[102,39584,316],{"class":161},[102,39586,491],{"class":112},[102,39588,30856],{"class":5206},[102,39590,158],{"class":108},[102,39592,32061],{"class":161},[102,39594,491],{"class":112},[102,39596,30865],{"class":5206},[102,39598,158],{"class":108},[102,39600,184],{"class":161},[102,39602,491],{"class":112},[102,39604,30874],{"class":5206},[102,39606,158],{"class":108},[102,39608,330],{"class":161},[102,39610,38038],{"class":112},[102,39612,39613],{"class":104,"line":1687},[102,39614,38043],{"class":112},[102,39616,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649],{"class":104,"line":1716},[102,39618,38005],{"class":112},[102,39620,30847],{"class":5206},[102,39622,158],{"class":108},[102,39624,32061],{"class":161},[102,39626,491],{"class":112},[102,39628,30856],{"class":5206},[102,39630,158],{"class":108},[102,39632,32061],{"class":161},[102,39634,491],{"class":112},[102,39636,30865],{"class":5206},[102,39638,158],{"class":108},[102,39640,184],{"class":161},[102,39642,491],{"class":112},[102,39644,30874],{"class":5206},[102,39646,158],{"class":108},[102,39648,330],{"class":161},[102,39650,38038],{"class":112},[102,39652,39653],{"class":104,"line":1721},[102,39654,38043],{"class":112},[102,39656,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679,39681],{"class":104,"line":1738},[102,39658,38088],{"class":112},[102,39660,30865],{"class":5206},[102,39662,158],{"class":108},[102,39664,190],{"class":161},[102,39666,491],{"class":112},[102,39668,30920],{"class":5206},[102,39670,158],{"class":108},[102,39672,190],{"class":161},[102,39674,491],{"class":112},[102,39676,30874],{"class":5206},[102,39678,158],{"class":108},[102,39680,304],{"class":161},[102,39682,119],{"class":112},[102,39684,39685],{"class":104,"line":1743},[102,39686,38117],{"class":112},[102,39688,39689],{"class":104,"line":1748},[102,39690,38250],{"class":171},[102,39692,39693,39695,39697,39699],{"class":104,"line":1753},[102,39694,30836],{"class":161},[102,39696,38257],{"class":112},[102,39698,158],{"class":108},[102,39700,38000],{"class":112},[102,39702,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735],{"class":104,"line":1767},[102,39704,38005],{"class":112},[102,39706,30847],{"class":5206},[102,39708,158],{"class":108},[102,39710,32061],{"class":161},[102,39712,491],{"class":112},[102,39714,30856],{"class":5206},[102,39716,158],{"class":108},[102,39718,34861],{"class":161},[102,39720,491],{"class":112},[102,39722,30865],{"class":5206},[102,39724,158],{"class":108},[102,39726,184],{"class":161},[102,39728,491],{"class":112},[102,39730,30874],{"class":5206},[102,39732,158],{"class":108},[102,39734,330],{"class":161},[102,39736,38038],{"class":112},[102,39738,39739],{"class":104,"line":1772},[102,39740,38043],{"class":112},[102,39742,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773,39775],{"class":104,"line":2566},[102,39744,38005],{"class":112},[102,39746,30847],{"class":5206},[102,39748,158],{"class":108},[102,39750,34861],{"class":161},[102,39752,491],{"class":112},[102,39754,30856],{"class":5206},[102,39756,158],{"class":108},[102,39758,34861],{"class":161},[102,39760,491],{"class":112},[102,39762,30865],{"class":5206},[102,39764,158],{"class":108},[102,39766,184],{"class":161},[102,39768,491],{"class":112},[102,39770,30874],{"class":5206},[102,39772,158],{"class":108},[102,39774,330],{"class":161},[102,39776,38038],{"class":112},[102,39778,39779],{"class":104,"line":2580},[102,39780,38043],{"class":112},[102,39782,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815],{"class":104,"line":2588},[102,39784,38005],{"class":112},[102,39786,30847],{"class":5206},[102,39788,158],{"class":108},[102,39790,34861],{"class":161},[102,39792,491],{"class":112},[102,39794,30856],{"class":5206},[102,39796,158],{"class":108},[102,39798,34861],{"class":161},[102,39800,491],{"class":112},[102,39802,30865],{"class":5206},[102,39804,158],{"class":108},[102,39806,184],{"class":161},[102,39808,491],{"class":112},[102,39810,30874],{"class":5206},[102,39812,158],{"class":108},[102,39814,330],{"class":161},[102,39816,38038],{"class":112},[102,39818,39819],{"class":104,"line":2593},[102,39820,38043],{"class":112},[102,39822,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847],{"class":104,"line":2599},[102,39824,38088],{"class":112},[102,39826,30865],{"class":5206},[102,39828,158],{"class":108},[102,39830,190],{"class":161},[102,39832,491],{"class":112},[102,39834,30920],{"class":5206},[102,39836,158],{"class":108},[102,39838,190],{"class":161},[102,39840,491],{"class":112},[102,39842,30874],{"class":5206},[102,39844,158],{"class":108},[102,39846,304],{"class":161},[102,39848,119],{"class":112},[102,39850,39851],{"class":104,"line":2605},[102,39852,38117],{"class":112},[102,39854,39855],{"class":104,"line":2610},[102,39856,38418],{"class":171},[102,39858,39859,39861,39863,39865],{"class":104,"line":7938},[102,39860,30836],{"class":161},[102,39862,38425],{"class":112},[102,39864,158],{"class":108},[102,39866,38000],{"class":112},[102,39868,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901],{"class":104,"line":7962},[102,39870,38005],{"class":112},[102,39872,30847],{"class":5206},[102,39874,158],{"class":108},[102,39876,34861],{"class":161},[102,39878,491],{"class":112},[102,39880,30856],{"class":5206},[102,39882,158],{"class":108},[102,39884,38448],{"class":161},[102,39886,491],{"class":112},[102,39888,30865],{"class":5206},[102,39890,158],{"class":108},[102,39892,184],{"class":161},[102,39894,491],{"class":112},[102,39896,30874],{"class":5206},[102,39898,158],{"class":108},[102,39900,330],{"class":161},[102,39902,38038],{"class":112},[102,39904,39905],{"class":104,"line":7967},[102,39906,38043],{"class":112},[102,39908,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941],{"class":104,"line":7973},[102,39910,38005],{"class":112},[102,39912,30847],{"class":5206},[102,39914,158],{"class":108},[102,39916,38448],{"class":161},[102,39918,491],{"class":112},[102,39920,30856],{"class":5206},[102,39922,158],{"class":108},[102,39924,38448],{"class":161},[102,39926,491],{"class":112},[102,39928,30865],{"class":5206},[102,39930,158],{"class":108},[102,39932,184],{"class":161},[102,39934,491],{"class":112},[102,39936,30874],{"class":5206},[102,39938,158],{"class":108},[102,39940,330],{"class":161},[102,39942,38038],{"class":112},[102,39944,39945],{"class":104,"line":8000},[102,39946,38043],{"class":112},[102,39948,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981],{"class":104,"line":8005},[102,39950,38005],{"class":112},[102,39952,30847],{"class":5206},[102,39954,158],{"class":108},[102,39956,38448],{"class":161},[102,39958,491],{"class":112},[102,39960,30856],{"class":5206},[102,39962,158],{"class":108},[102,39964,38448],{"class":161},[102,39966,491],{"class":112},[102,39968,30865],{"class":5206},[102,39970,158],{"class":108},[102,39972,184],{"class":161},[102,39974,491],{"class":112},[102,39976,30874],{"class":5206},[102,39978,158],{"class":108},[102,39980,330],{"class":161},[102,39982,38038],{"class":112},[102,39984,39985],{"class":104,"line":8011},[102,39986,38043],{"class":112},[102,39988,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013],{"class":104,"line":8023},[102,39990,38088],{"class":112},[102,39992,30865],{"class":5206},[102,39994,158],{"class":108},[102,39996,190],{"class":161},[102,39998,491],{"class":112},[102,40000,30920],{"class":5206},[102,40002,158],{"class":108},[102,40004,190],{"class":161},[102,40006,491],{"class":112},[102,40008,30874],{"class":5206},[102,40010,158],{"class":108},[102,40012,304],{"class":161},[102,40014,119],{"class":112},[102,40016,40017],{"class":104,"line":8035},[102,40018,38117],{"class":112},[102,40020,40021],{"class":104,"line":8047},[102,40022,38587],{"class":171},[102,40024,40025,40027,40029,40031],{"class":104,"line":9706},[102,40026,30836],{"class":161},[102,40028,38594],{"class":112},[102,40030,158],{"class":108},[102,40032,38000],{"class":112},[102,40034,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067],{"class":104,"line":9731},[102,40036,38005],{"class":112},[102,40038,30847],{"class":5206},[102,40040,158],{"class":108},[102,40042,38448],{"class":161},[102,40044,491],{"class":112},[102,40046,30856],{"class":5206},[102,40048,158],{"class":108},[102,40050,38448],{"class":161},[102,40052,491],{"class":112},[102,40054,30865],{"class":5206},[102,40056,158],{"class":108},[102,40058,184],{"class":161},[102,40060,491],{"class":112},[102,40062,30874],{"class":5206},[102,40064,158],{"class":108},[102,40066,330],{"class":161},[102,40068,38038],{"class":112},[102,40070,40071],{"class":104,"line":9754},[102,40072,38043],{"class":112},[102,40074,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107],{"class":104,"line":9778},[102,40076,38005],{"class":112},[102,40078,30847],{"class":5206},[102,40080,158],{"class":108},[102,40082,38448],{"class":161},[102,40084,491],{"class":112},[102,40086,30856],{"class":5206},[102,40088,158],{"class":108},[102,40090,38448],{"class":161},[102,40092,491],{"class":112},[102,40094,30865],{"class":5206},[102,40096,158],{"class":108},[102,40098,184],{"class":161},[102,40100,491],{"class":112},[102,40102,30874],{"class":5206},[102,40104,158],{"class":108},[102,40106,330],{"class":161},[102,40108,38038],{"class":112},[102,40110,40111],{"class":104,"line":9783},[102,40112,38043],{"class":112},[102,40114,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147],{"class":104,"line":9788},[102,40116,38005],{"class":112},[102,40118,30847],{"class":5206},[102,40120,158],{"class":108},[102,40122,38448],{"class":161},[102,40124,491],{"class":112},[102,40126,30856],{"class":5206},[102,40128,158],{"class":108},[102,40130,38448],{"class":161},[102,40132,491],{"class":112},[102,40134,30865],{"class":5206},[102,40136,158],{"class":108},[102,40138,184],{"class":161},[102,40140,491],{"class":112},[102,40142,30874],{"class":5206},[102,40144,158],{"class":108},[102,40146,330],{"class":161},[102,40148,38038],{"class":112},[102,40150,40151],{"class":104,"line":9793},[102,40152,38043],{"class":112},[102,40154,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179],{"class":104,"line":9802},[102,40156,38088],{"class":112},[102,40158,30865],{"class":5206},[102,40160,158],{"class":108},[102,40162,190],{"class":161},[102,40164,491],{"class":112},[102,40166,30920],{"class":5206},[102,40168,158],{"class":108},[102,40170,190],{"class":161},[102,40172,491],{"class":112},[102,40174,30874],{"class":5206},[102,40176,158],{"class":108},[102,40178,304],{"class":161},[102,40180,119],{"class":112},[102,40182,40183],{"class":104,"line":9807},[102,40184,38117],{"class":112},[102,40186,40187],{"class":104,"line":9813},[102,40188,38755],{"class":171},[102,40190,40191,40193,40195,40197],{"class":104,"line":9834},[102,40192,30836],{"class":161},[102,40194,38762],{"class":112},[102,40196,158],{"class":108},[102,40198,38000],{"class":112},[102,40200,40201],{"class":104,"line":9840},[102,40202,38771],{"class":171},[102,40204,40205],{"class":104,"line":9854},[102,40206,38776],{"class":171},[102,40208,40209],{"class":104,"line":9860},[102,40210,38781],{"class":112},[102,40212,40213,40215,40217,40219,40221,40223,40225,40227,40229],{"class":104,"line":9887},[102,40214,38786],{"class":112},[102,40216,482],{"class":161},[102,40218,568],{"class":108},[102,40220,482],{"class":161},[102,40222,568],{"class":108},[102,40224,38448],{"class":161},[102,40226,491],{"class":112},[102,40228,34861],{"class":161},[102,40230,38038],{"class":112},[102,40232,40233],{"class":104,"line":9896},[102,40234,38043],{"class":112},[102,40236,40237,40239,40241,40243,40245],{"class":104,"line":9902},[102,40238,38786],{"class":112},[102,40240,34861],{"class":161},[102,40242,491],{"class":112},[102,40244,32061],{"class":161},[102,40246,38038],{"class":112},[102,40248,40249],{"class":104,"line":9910},[102,40250,38043],{"class":112},[102,40252,40253,40255,40257,40259,40261],{"class":104,"line":9915},[102,40254,38786],{"class":112},[102,40256,32061],{"class":161},[102,40258,491],{"class":112},[102,40260,559],{"class":161},[102,40262,119],{"class":112},[102,40264,40265],{"class":104,"line":16594},[102,40266,38117],{"class":112},[102,40268,40269],{"class":104,"line":16600},[102,40270,2389],{"emptyLinePlaceholder":30},[102,40272,40273],{"class":104,"line":16623},[102,40274,38847],{"class":171},[102,40276,40277],{"class":104,"line":16629},[102,40278,38852],{"class":171},[102,40280,40281,40283,40285,40287,40289],{"class":104,"line":16652},[102,40282,3392],{"class":108},[102,40284,38859],{"class":112},[102,40286,26034],{"class":108},[102,40288,38864],{"class":161},[102,40290,38867],{"class":112},[102,40292,40293],{"class":104,"line":16666},[102,40294,38872],{"class":171},[102,40296,40297,40299,40301],{"class":104,"line":16686},[102,40298,4631],{"class":108},[102,40300,38879],{"class":161},[102,40302,38882],{"class":112},[102,40304,40305],{"class":104,"line":16692},[102,40306,38887],{"class":171},[102,40308,40309,40311,40313,40315,40317],{"class":104,"line":16703},[102,40310,38892],{"class":112},[102,40312,38895],{"class":5206},[102,40314,158],{"class":108},[102,40316,38900],{"class":217},[102,40318,119],{"class":112},[102,40320,40321],{"class":104,"line":16726},[102,40322,38907],{"class":171},[102,40324,40325,40327,40329,40331,40333,40335],{"class":104,"line":16748},[102,40326,38912],{"class":108},[102,40328,38915],{"class":112},[102,40330,38918],{"class":108},[102,40332,38921],{"class":108},[102,40334,38924],{"class":161},[102,40336,3728],{"class":112},[102,40338,40339],{"class":104,"line":16753},[102,40340,38931],{"class":171},[102,40342,40343,40345,40347],{"class":104,"line":16759},[102,40344,38936],{"class":112},[102,40346,304],{"class":161},[102,40348,119],{"class":112},[102,40350,40351],{"class":104,"line":16773},[102,40352,38945],{"class":171},[102,40354,40355,40357,40359],{"class":104,"line":16786},[102,40356,38950],{"class":108},[102,40358,38879],{"class":161},[102,40360,38955],{"class":112},[102,40362,40363],{"class":104,"line":16791},[102,40364,38960],{"class":171},[102,40366,40367],{"class":104,"line":16805},[102,40368,38965],{"class":171},[102,40370,40371,40373,40375,40377,40379],{"class":104,"line":16810},[102,40372,38970],{"class":112},[102,40374,304],{"class":161},[102,40376,491],{"class":112},[102,40378,38977],{"class":161},[102,40380,119],{"class":112},[102,40382,40383],{"class":104,"line":16816},[102,40384,38984],{"class":171},[102,40386,40387,40389,40391,40393,40395,40397],{"class":104,"line":16821},[102,40388,38912],{"class":108},[102,40390,38915],{"class":112},[102,40392,38918],{"class":108},[102,40394,38921],{"class":108},[102,40396,38924],{"class":161},[102,40398,3728],{"class":112},[102,40400,40401,40403,40405],{"class":104,"line":16835},[102,40402,38936],{"class":112},[102,40404,304],{"class":161},[102,40406,119],{"class":112},[102,40408,40409],{"class":104,"line":16840},[102,40410,2389],{"emptyLinePlaceholder":30},[102,40412,40413],{"class":104,"line":16845},[102,40414,35156],{"class":171},[102,40416,40417,40419,40421],{"class":104,"line":16859},[102,40418,30792],{"class":108},[102,40420,31084],{"class":1952},[102,40422,31087],{"class":112},[102,40424,40425,40427,40429,40431],{"class":104,"line":16871},[102,40426,31092],{"class":112},[102,40428,158],{"class":108},[102,40430,30814],{"class":161},[102,40432,39033],{"class":112},[102,40434,40435,40437,40439,40441],{"class":104,"line":16876},[102,40436,31092],{"class":112},[102,40438,158],{"class":108},[102,40440,30814],{"class":161},[102,40442,39044],{"class":112},[102,40444,40445,40447,40449,40451],{"class":104,"line":16889},[102,40446,31092],{"class":112},[102,40448,158],{"class":108},[102,40450,30814],{"class":161},[102,40452,39055],{"class":112},[102,40454,40455,40457,40459,40461],{"class":104,"line":16894},[102,40456,31092],{"class":112},[102,40458,158],{"class":108},[102,40460,30814],{"class":161},[102,40462,39066],{"class":112},[102,40464,40465,40467,40469,40471],{"class":104,"line":16899},[102,40466,31092],{"class":112},[102,40468,158],{"class":108},[102,40470,30814],{"class":161},[102,40472,39077],{"class":112},[102,40474,40475,40477,40479,40481],{"class":104,"line":16904},[102,40476,31092],{"class":112},[102,40478,158],{"class":108},[102,40480,30814],{"class":161},[102,40482,39088],{"class":112},[102,40484,40485,40487],{"class":104,"line":16917},[102,40486,14742],{"class":108},[102,40488,31200],{"class":112},[102,40490,40491],{"class":104,"line":16922},[102,40492,2389],{"emptyLinePlaceholder":30},[102,40494,40495],{"class":104,"line":32624},[102,40496,39103],{"class":171},[102,40498,40499,40501,40503,40505,40507],{"class":104,"line":32630},[102,40500,1520],{"class":108},[102,40502,31211],{"class":161},[102,40504,2938],{"class":108},[102,40506,39114],{"class":217},[102,40508,3728],{"class":112},[102,40510,40511,40513,40515,40517,40519,40521,40523,40525,40527],{"class":104,"line":32636},[102,40512,31228],{"class":112},[102,40514,158],{"class":108},[102,40516,30442],{"class":112},[102,40518,31235],{"class":217},[102,40520,1693],{"class":108},[102,40522,31240],{"class":112},[102,40524,1690],{"class":108},[102,40526,30467],{"class":217},[102,40528,119],{"class":112},[102,40530,40531,40533],{"class":104,"line":32642},[102,40532,31290],{"class":161},[102,40534,30476],{"class":112},[102,40536,40537,40539,40541],{"class":104,"line":32648},[102,40538,31280],{"class":112},[102,40540,158],{"class":108},[102,40542,39151],{"class":112},[102,40544,40545,40547,40549,40551,40553,40555,40557,40559],{"class":104,"line":32659},[102,40546,31290],{"class":161},[102,40548,31293],{"class":112},[102,40550,330],{"class":161},[102,40552,491],{"class":112},[102,40554,31492],{"class":161},[102,40556,491],{"class":112},[102,40558,31492],{"class":161},[102,40560,31306],{"class":112},[56,40562,40563],{"start":1168},[59,40564,40565],{},"测试代码",[93,40567,40569],{"className":30369,"code":40568,"language":30371,"meta":23,"style":23},"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",[99,40570,40571,40577,40587,40597,40601,40611,40622,40626,40630,40634,40642,40658,40668,40684,40694,40708,40712,40722,40732,40742,40748,40752,40756,40764,40768,40784,40792,40796,40800,40808,40816,40820,40824,40828,40832,40838,40842,40852,40860,40868,40872,40876,40880,40888,40892,40908,40912,40916,40920,40932,40936,40948,40952,40956,40968,40972,40982,40986,40990,41002,41006,41015,41019,41023,41031,41035,41043,41047,41051,41055,41059,41063,41079,41087,41091,41095,41143,41149,41153,41163,41171,41179,41183,41187,41191,41195,41203,41207,41223,41227,41235,41243],{"__ignoreMap":23},[102,40572,40573,40575],{"class":104,"line":105},[102,40574,30383],{"class":108},[102,40576,30386],{"class":112},[102,40578,40579,40581,40583,40585],{"class":104,"line":24},[102,40580,30383],{"class":108},[102,40582,31406],{"class":112},[102,40584,31374],{"class":108},[102,40586,31411],{"class":112},[102,40588,40589,40591,40593,40595],{"class":104,"line":1168},[102,40590,30728],{"class":108},[102,40592,31389],{"class":112},[102,40594,30383],{"class":108},[102,40596,31394],{"class":112},[102,40598,40599],{"class":104,"line":1183},[102,40600,33913],{"class":171},[102,40602,40603,40605,40607,40609],{"class":104,"line":1189},[102,40604,30728],{"class":108},[102,40606,31359],{"class":112},[102,40608,30383],{"class":108},[102,40610,31364],{"class":112},[102,40612,40613,40615,40617,40619],{"class":104,"line":1203},[102,40614,30728],{"class":108},[102,40616,31905],{"class":112},[102,40618,30383],{"class":108},[102,40620,40621],{"class":161}," VGG16\n",[102,40623,40624],{"class":104,"line":1209},[102,40625,2389],{"emptyLinePlaceholder":30},[102,40627,40628],{"class":104,"line":1300},[102,40629,2389],{"emptyLinePlaceholder":30},[102,40631,40632],{"class":104,"line":1306},[102,40633,33942],{"class":171},[102,40635,40636,40638,40640],{"class":104,"line":1318},[102,40637,31938],{"class":108},[102,40639,33949],{"class":1952},[102,40641,31944],{"class":112},[102,40643,40644,40646,40648,40650,40652,40654,40656],{"class":104,"line":1601},[102,40645,33956],{"class":112},[102,40647,158],{"class":108},[102,40649,31446],{"class":112},[102,40651,31449],{"class":5206},[102,40653,158],{"class":108},[102,40655,31454],{"class":217},[102,40657,31457],{"class":112},[102,40659,40660,40662,40664,40666],{"class":104,"line":1606},[102,40661,33973],{"class":5206},[102,40663,158],{"class":108},[102,40665,33978],{"class":161},[102,40667,31457],{"class":112},[102,40669,40670,40672,40674,40676,40678,40680,40682],{"class":104,"line":1612},[102,40671,33985],{"class":5206},[102,40673,158],{"class":108},[102,40675,31484],{"class":112},[102,40677,31487],{"class":5206},[102,40679,158],{"class":108},[102,40681,31492],{"class":161},[102,40683,31495],{"class":112},[102,40685,40686,40688,40690,40692],{"class":104,"line":1617},[102,40687,34002],{"class":5206},[102,40689,158],{"class":108},[102,40691,31467],{"class":161},[102,40693,119],{"class":112},[102,40695,40696,40698,40700,40702,40704,40706],{"class":104,"line":1631},[102,40697,34013],{"class":112},[102,40699,158],{"class":108},[102,40701,31525],{"class":112},[102,40703,31528],{"class":5206},[102,40705,158],{"class":108},[102,40707,34024],{"class":112},[102,40709,40710],{"class":104,"line":1636},[102,40711,34029],{"class":171},[102,40713,40714,40716,40718,40720],{"class":104,"line":1642},[102,40715,34034],{"class":5206},[102,40717,158],{"class":108},[102,40719,330],{"class":161},[102,40721,31457],{"class":112},[102,40723,40724,40726,40728,40730],{"class":104,"line":1663},[102,40725,34045],{"class":5206},[102,40727,158],{"class":108},[102,40729,31467],{"class":161},[102,40731,31457],{"class":112},[102,40733,40734,40736,40738,40740],{"class":104,"line":1668},[102,40735,34056],{"class":5206},[102,40737,158],{"class":108},[102,40739,304],{"class":161},[102,40741,119],{"class":112},[102,40743,40744,40746],{"class":104,"line":1682},[102,40745,4079],{"class":108},[102,40747,34069],{"class":112},[102,40749,40750],{"class":104,"line":1687},[102,40751,2389],{"emptyLinePlaceholder":30},[102,40753,40754],{"class":104,"line":1716},[102,40755,34078],{"class":171},[102,40757,40758,40760,40762],{"class":104,"line":1721},[102,40759,31938],{"class":108},[102,40761,34085],{"class":1952},[102,40763,34088],{"class":112},[102,40765,40766],{"class":104,"line":1738},[102,40767,34093],{"class":171},[102,40769,40770,40772,40774,40776,40778,40780,40782],{"class":104,"line":1743},[102,40771,31228],{"class":112},[102,40773,158],{"class":108},[102,40775,31235],{"class":217},[102,40777,1693],{"class":108},[102,40779,31240],{"class":112},[102,40781,1690],{"class":108},[102,40783,34110],{"class":217},[102,40785,40786,40788,40790],{"class":104,"line":1748},[102,40787,31280],{"class":112},[102,40789,158],{"class":108},[102,40791,32280],{"class":112},[102,40793,40794],{"class":104,"line":1753},[102,40795,2389],{"emptyLinePlaceholder":30},[102,40797,40798],{"class":104,"line":1767},[102,40799,34127],{"class":171},[102,40801,40802,40804,40806],{"class":104,"line":1772},[102,40803,34132],{"class":112},[102,40805,158],{"class":108},[102,40807,32333],{"class":161},[102,40809,40810,40812,40814],{"class":104,"line":2566},[102,40811,34141],{"class":112},[102,40813,158],{"class":108},[102,40815,3074],{"class":161},[102,40817,40818],{"class":104,"line":2580},[102,40819,2389],{"emptyLinePlaceholder":30},[102,40821,40822],{"class":104,"line":2588},[102,40823,34154],{"class":171},[102,40825,40826],{"class":104,"line":2593},[102,40827,34159],{"class":171},[102,40829,40830],{"class":104,"line":2599},[102,40831,34164],{"class":171},[102,40833,40834,40836],{"class":104,"line":2605},[102,40835,34169],{"class":108},[102,40837,32875],{"class":112},[102,40839,40840],{"class":104,"line":2610},[102,40841,34176],{"class":171},[102,40843,40844,40846,40848,40850],{"class":104,"line":7938},[102,40845,3392],{"class":108},[102,40847,34183],{"class":112},[102,40849,26034],{"class":108},[102,40851,34188],{"class":112},[102,40853,40854,40856,40858],{"class":104,"line":7962},[102,40855,34193],{"class":112},[102,40857,158],{"class":108},[102,40859,34198],{"class":112},[102,40861,40862,40864,40866],{"class":104,"line":7967},[102,40863,34203],{"class":112},[102,40865,158],{"class":108},[102,40867,34208],{"class":112},[102,40869,40870],{"class":104,"line":7973},[102,40871,34213],{"class":171},[102,40873,40874],{"class":104,"line":8000},[102,40875,32866],{"class":112},[102,40877,40878],{"class":104,"line":8005},[102,40879,34222],{"class":171},[102,40881,40882,40884,40886],{"class":104,"line":8011},[102,40883,32651],{"class":112},[102,40885,158],{"class":108},[102,40887,34231],{"class":112},[102,40889,40890],{"class":104,"line":8023},[102,40891,34236],{"class":171},[102,40893,40894,40896,40898,40900,40902,40904,40906],{"class":104,"line":8035},[102,40895,32668],{"class":112},[102,40897,158],{"class":108},[102,40899,32673],{"class":112},[102,40901,32676],{"class":5206},[102,40903,158],{"class":108},[102,40905,330],{"class":161},[102,40907,119],{"class":112},[102,40909,40910],{"class":104,"line":8047},[102,40911,34257],{"class":171},[102,40913,40914],{"class":104,"line":9706},[102,40915,34262],{"class":171},[102,40917,40918],{"class":104,"line":9731},[102,40919,34267],{"class":171},[102,40921,40922,40924,40926,40928,40930],{"class":104,"line":9754},[102,40923,34272],{"class":112},[102,40925,9467],{"class":108},[102,40927,32778],{"class":112},[102,40929,2938],{"class":108},[102,40931,34281],{"class":112},[102,40933,40934],{"class":104,"line":9778},[102,40935,34286],{"class":171},[102,40937,40938,40940,40942,40944,40946],{"class":104,"line":9783},[102,40939,34291],{"class":112},[102,40941,9467],{"class":108},[102,40943,34296],{"class":112},[102,40945,304],{"class":161},[102,40947,119],{"class":112},[102,40949,40950],{"class":104,"line":9788},[102,40951,2389],{"emptyLinePlaceholder":30},[102,40953,40954],{"class":104,"line":9793},[102,40955,34309],{"class":171},[102,40957,40958,40960,40962,40964,40966],{"class":104,"line":9802},[102,40959,34314],{"class":112},[102,40961,158],{"class":108},[102,40963,34319],{"class":112},[102,40965,697],{"class":108},[102,40967,34324],{"class":112},[102,40969,40970],{"class":104,"line":9807},[102,40971,34329],{"class":171},[102,40973,40974,40976,40978,40980],{"class":104,"line":9813},[102,40975,32442],{"class":161},[102,40977,113],{"class":112},[102,40979,34338],{"class":217},[102,40981,34341],{"class":112},[102,40983,40984],{"class":104,"line":9834},[102,40985,2389],{"emptyLinePlaceholder":30},[102,40987,40988],{"class":104,"line":9840},[102,40989,34350],{"class":171},[102,40991,40992,40994,40996,40998,41000],{"class":104,"line":9854},[102,40993,1520],{"class":108},[102,40995,31211],{"class":161},[102,40997,2938],{"class":108},[102,40999,31216],{"class":217},[102,41001,3728],{"class":112},[102,41003,41004],{"class":104,"line":9860},[102,41005,34367],{"class":171},[102,41007,41008,41010,41012],{"class":104,"line":9887},[102,41009,31280],{"class":112},[102,41011,158],{"class":108},[102,41013,41014],{"class":112},"VGG16()\n",[102,41016,41017],{"class":104,"line":9896},[102,41018,34380],{"class":171},[102,41020,41021],{"class":104,"line":9902},[102,41022,34385],{"class":171},[102,41024,41025,41027,41029],{"class":104,"line":9910},[102,41026,34390],{"class":112},[102,41028,34393],{"class":217},[102,41030,30488],{"class":112},[102,41032,41033],{"class":104,"line":9915},[102,41034,34400],{"class":171},[102,41036,41037,41039,41041],{"class":104,"line":16594},[102,41038,34013],{"class":112},[102,41040,158],{"class":108},[102,41042,34409],{"class":112},[102,41044,41045],{"class":104,"line":16600},[102,41046,34414],{"class":171},[102,41048,41049],{"class":104,"line":16623},[102,41050,34419],{"class":112},[102,41052,41053],{"class":104,"line":16629},[102,41054,2389],{"emptyLinePlaceholder":30},[102,41056,41057],{"class":104,"line":16652},[102,41058,34428],{"class":171},[102,41060,41061],{"class":104,"line":16666},[102,41062,34433],{"class":171},[102,41064,41065,41067,41069,41071,41073,41075,41077],{"class":104,"line":16686},[102,41066,31228],{"class":112},[102,41068,158],{"class":108},[102,41070,31235],{"class":217},[102,41072,1693],{"class":108},[102,41074,31240],{"class":112},[102,41076,1690],{"class":108},[102,41078,34110],{"class":217},[102,41080,41081,41083,41085],{"class":104,"line":16692},[102,41082,31280],{"class":112},[102,41084,158],{"class":108},[102,41086,32280],{"class":112},[102,41088,41089],{"class":104,"line":16703},[102,41090,34462],{"class":171},[102,41092,41093],{"class":104,"line":16726},[102,41094,34467],{"class":171},[102,41096,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131,41133,41135,41137,41139,41141],{"class":104,"line":16748},[102,41098,34472],{"class":112},[102,41100,158],{"class":108},[102,41102,1003],{"class":112},[102,41104,34479],{"class":217},[102,41106,491],{"class":112},[102,41108,34484],{"class":217},[102,41110,491],{"class":112},[102,41112,34489],{"class":217},[102,41114,491],{"class":112},[102,41116,34494],{"class":217},[102,41118,491],{"class":112},[102,41120,34499],{"class":217},[102,41122,491],{"class":112},[102,41124,34504],{"class":217},[102,41126,491],{"class":112},[102,41128,34509],{"class":217},[102,41130,491],{"class":112},[102,41132,34514],{"class":217},[102,41134,491],{"class":112},[102,41136,34519],{"class":217},[102,41138,491],{"class":112},[102,41140,34524],{"class":217},[102,41142,33237],{"class":112},[102,41144,41145,41147],{"class":104,"line":16753},[102,41146,34169],{"class":108},[102,41148,32875],{"class":112},[102,41150,41151],{"class":104,"line":16759},[102,41152,34537],{"class":171},[102,41154,41155,41157,41159,41161],{"class":104,"line":16773},[102,41156,3392],{"class":108},[102,41158,34544],{"class":112},[102,41160,26034],{"class":108},[102,41162,34188],{"class":112},[102,41164,41165,41167,41169],{"class":104,"line":16786},[102,41166,32601],{"class":112},[102,41168,158],{"class":108},[102,41170,32606],{"class":112},[102,41172,41173,41175,41177],{"class":104,"line":16791},[102,41174,32616],{"class":112},[102,41176,158],{"class":108},[102,41178,32621],{"class":112},[102,41180,41181],{"class":104,"line":16805},[102,41182,2389],{"emptyLinePlaceholder":30},[102,41184,41185],{"class":104,"line":16810},[102,41186,34573],{"class":171},[102,41188,41189],{"class":104,"line":16816},[102,41190,32866],{"class":112},[102,41192,41193],{"class":104,"line":16821},[102,41194,34582],{"class":171},[102,41196,41197,41199,41201],{"class":104,"line":16835},[102,41198,32651],{"class":112},[102,41200,158],{"class":108},[102,41202,32656],{"class":112},[102,41204,41205],{"class":104,"line":16840},[102,41206,34595],{"class":171},[102,41208,41209,41211,41213,41215,41217,41219,41221],{"class":104,"line":16845},[102,41210,32668],{"class":112},[102,41212,158],{"class":108},[102,41214,32673],{"class":112},[102,41216,32676],{"class":5206},[102,41218,158],{"class":108},[102,41220,330],{"class":161},[102,41222,119],{"class":112},[102,41224,41225],{"class":104,"line":16859},[102,41226,34616],{"class":171},[102,41228,41229,41231,41233],{"class":104,"line":16871},[102,41230,34621],{"class":112},[102,41232,158],{"class":108},[102,41234,34626],{"class":112},[102,41236,41237,41239,41241],{"class":104,"line":16876},[102,41238,34631],{"class":112},[102,41240,158],{"class":108},[102,41242,34636],{"class":112},[102,41244,41245,41247,41249,41251,41253,41255,41257,41259],{"class":104,"line":16889},[102,41246,34641],{"class":161},[102,41248,113],{"class":112},[102,41250,34646],{"class":217},[102,41252,34649],{"class":112},[102,41254,34652],{"class":217},[102,41256,491],{"class":112},[102,41258,34657],{"class":217},[102,41260,34660],{"class":112},[73,41262,41264],{"id":41263},"_23googlenet","2.3.GoogLeNet",[21988,41266,41268],{"id":41267},"_231原理","2.3.1.原理",[56,41270,41271],{},[59,41272,41273],{},"网络结构",[19,41275,41276],{},[1451,41277],{"alt":23,"src":41278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,41280,41281],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41283,41284],{},[1451,41285],{"alt":23,"src":41286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,41288,41289],{},[1451,41290],{"alt":23,"src":41291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,41293,41294],{},[1451,41295],{"alt":23,"src":41296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[56,41298,41299],{"start":24},[59,41300,41301],{},"1x1卷积的优点",[19,41303,41304],{},[1451,41305],{"alt":23,"src":41306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[56,41308,41309],{"start":1168},[59,41310,41311],{},"全局平均池化层优点",[19,41313,41314],{},[1451,41315],{"alt":23,"src":41316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,41318,41319],{},[1451,41320],{"alt":23,"src":41321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[56,41323,41324],{"start":1183},[59,41325,41326],{},"参数详细描述",[19,41328,41329],{},[1451,41330],{"alt":23,"src":41331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,41333,41334],{},[1451,41335],{"alt":23,"src":41336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,41338,41339],{},[1451,41340],{"alt":23,"src":41341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,41343,41344],{},[1451,41345],{"alt":23,"src":41346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,41348,41349],{},[1451,41350],{"alt":23,"src":41351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,41353,41354],{},[1451,41355],{"alt":23,"src":41356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,41358,41359],{},[1451,41360],{"alt":23,"src":41361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,41363,41364],{},[1451,41365],{"alt":23,"src":41366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,41368,41369],{},[1451,41370],{"alt":23,"src":41371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,41373,41374],{},[1451,41375],{"alt":23,"src":41376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,41378,41379],{},[1451,41380],{"alt":23,"src":41381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,41383,41384],{},[1451,41385],{"alt":23,"src":41386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,41388,41389],{},[1451,41390],{"alt":23,"src":41391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,41393,41394],{},[1451,41395],{"alt":23,"src":41396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,41398,41399],{},[1451,41400],{"alt":23,"src":41401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,41403,41404],{},[1451,41405],{"alt":23,"src":41406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,41408,41409],{},[1451,41410],{"alt":23,"src":41411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,41413,41414],{},[1451,41415],{"alt":23,"src":41416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,41418,41419],{},[1451,41420],{"alt":23,"src":41421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,41423,41424],{},[1451,41425],{"alt":23,"src":41426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,41428,41429],{},[1451,41430],{"alt":23,"src":41431},"\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",[21988,41433,41435],{"id":41434},"_232代码实现","2.3.2.代码实现",[56,41437,41438],{},[59,41439,30702],{},[19,41441,41442],{},"根据原理一步一步搭建即可",[93,41444,41446],{"className":30369,"code":41445,"language":30371,"meta":23,"style":23},"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",[99,41447,41448,41454,41464,41474,41478,41495,41504,41519,41529,41534,41567,41572,41609,41656,41661,41697,41744,41749,41754,41789,41821,41825,41833,41849,41873,41898,41919,41924,41939,41943,41947,41952,41969,41974,41983,41998,42009,42053,42057,42085,42089,42100,42128,42132,42169,42173,42201,42205,42216,42252,42284,42312,42316,42327,42361,42393,42425,42458,42492,42520,42524,42535,42568,42600,42614,42618,42631,42635,42640,42652,42660,42682,42687,42692,42697,42702,42707,42712,42726,42734,42743,42756,42771,42780,42784,42792,42803,42814,42825,42836,42847,42853,42857,42862,42874,42894,42903],{"__ignoreMap":23},[102,41449,41450,41452],{"class":104,"line":105},[102,41451,30383],{"class":108},[102,41453,30386],{"class":112},[102,41455,41456,41458,41460,41462],{"class":104,"line":24},[102,41457,30728],{"class":108},[102,41459,30731],{"class":112},[102,41461,30383],{"class":108},[102,41463,30736],{"class":112},[102,41465,41466,41468,41470,41472],{"class":104,"line":1168},[102,41467,30728],{"class":108},[102,41469,30748],{"class":112},[102,41471,30383],{"class":108},[102,41473,30753],{"class":112},[102,41475,41476],{"class":104,"line":1183},[102,41477,2389],{"emptyLinePlaceholder":30},[102,41479,41480,41482,41485,41487,41489,41491,41493],{"class":104,"line":1189},[102,41481,14684],{"class":108},[102,41483,41484],{"class":1952}," Inception",[102,41486,113],{"class":112},[102,41488,30769],{"class":1952},[102,41490,671],{"class":112},[102,41492,30774],{"class":1952},[102,41494,30777],{"class":112},[102,41496,41497,41499,41501],{"class":104,"line":1203},[102,41498,30792],{"class":108},[102,41500,30795],{"class":161},[102,41502,41503],{"class":112},"(self,in_channels,c1,c2,c3,c4):\n",[102,41505,41506,41508,41511,41513,41515,41517],{"class":104,"line":1209},[102,41507,30808],{"class":161},[102,41509,41510],{"class":112},"(Inception,",[102,41512,30814],{"class":161},[102,41514,30817],{"class":112},[102,41516,30820],{"class":161},[102,41518,1965],{"class":112},[102,41520,41521,41523,41525,41527],{"class":104,"line":1300},[102,41522,30836],{"class":161},[102,41524,34762],{"class":112},[102,41526,158],{"class":108},[102,41528,34767],{"class":112},[102,41530,41531],{"class":104,"line":1306},[102,41532,41533],{"class":171},"        # 路线1：定义1*1卷积\n",[102,41535,41536,41538,41541,41543,41545,41547,41549,41552,41554,41556,41559,41561,41563,41565],{"class":104,"line":1318},[102,41537,30836],{"class":161},[102,41539,41540],{"class":112},".p1_1",[102,41542,158],{"class":108},[102,41544,30844],{"class":112},[102,41546,30847],{"class":5206},[102,41548,158],{"class":108},[102,41550,41551],{"class":112},"in_channels,",[102,41553,30856],{"class":5206},[102,41555,158],{"class":108},[102,41557,41558],{"class":112},"c1,",[102,41560,30865],{"class":5206},[102,41562,158],{"class":108},[102,41564,330],{"class":161},[102,41566,119],{"class":112},[102,41568,41569],{"class":104,"line":1601},[102,41570,41571],{"class":171},"        # 路线2：定义1*1卷积和3*3\n",[102,41573,41574,41576,41579,41581,41583,41585,41587,41589,41591,41593,41596,41598,41601,41603,41605,41607],{"class":104,"line":1606},[102,41575,30836],{"class":161},[102,41577,41578],{"class":112},".p2_1",[102,41580,158],{"class":108},[102,41582,30844],{"class":112},[102,41584,30847],{"class":5206},[102,41586,158],{"class":108},[102,41588,41551],{"class":112},[102,41590,30856],{"class":5206},[102,41592,158],{"class":108},[102,41594,41595],{"class":112},"c2[",[102,41597,304],{"class":161},[102,41599,41600],{"class":112},"],",[102,41602,30865],{"class":5206},[102,41604,158],{"class":108},[102,41606,330],{"class":161},[102,41608,119],{"class":112},[102,41610,41611,41613,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646,41648,41650,41652,41654],{"class":104,"line":1612},[102,41612,30836],{"class":161},[102,41614,41615],{"class":112},".p2_2",[102,41617,158],{"class":108},[102,41619,30844],{"class":112},[102,41621,30847],{"class":5206},[102,41623,158],{"class":108},[102,41625,41595],{"class":112},[102,41627,304],{"class":161},[102,41629,41600],{"class":112},[102,41631,30856],{"class":5206},[102,41633,158],{"class":108},[102,41635,41595],{"class":112},[102,41637,330],{"class":161},[102,41639,41600],{"class":112},[102,41641,30865],{"class":5206},[102,41643,158],{"class":108},[102,41645,184],{"class":161},[102,41647,491],{"class":112},[102,41649,30874],{"class":5206},[102,41651,158],{"class":108},[102,41653,330],{"class":161},[102,41655,119],{"class":112},[102,41657,41658],{"class":104,"line":1617},[102,41659,41660],{"class":171},"        # 路线3：定义1*1卷积和5*5\n",[102,41662,41663,41665,41668,41670,41672,41674,41676,41678,41680,41682,41685,41687,41689,41691,41693,41695],{"class":104,"line":1631},[102,41664,30836],{"class":161},[102,41666,41667],{"class":112},".p3_1",[102,41669,158],{"class":108},[102,41671,30844],{"class":112},[102,41673,30847],{"class":5206},[102,41675,158],{"class":108},[102,41677,41551],{"class":112},[102,41679,30856],{"class":5206},[102,41681,158],{"class":108},[102,41683,41684],{"class":112},"c3[",[102,41686,304],{"class":161},[102,41688,41600],{"class":112},[102,41690,30865],{"class":5206},[102,41692,158],{"class":108},[102,41694,330],{"class":161},[102,41696,119],{"class":112},[102,41698,41699,41701,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742],{"class":104,"line":1636},[102,41700,30836],{"class":161},[102,41702,41703],{"class":112},".p3_2",[102,41705,158],{"class":108},[102,41707,30844],{"class":112},[102,41709,30847],{"class":5206},[102,41711,158],{"class":108},[102,41713,41684],{"class":112},[102,41715,304],{"class":161},[102,41717,41600],{"class":112},[102,41719,30856],{"class":5206},[102,41721,158],{"class":108},[102,41723,41684],{"class":112},[102,41725,330],{"class":161},[102,41727,41600],{"class":112},[102,41729,30865],{"class":5206},[102,41731,158],{"class":108},[102,41733,432],{"class":161},[102,41735,491],{"class":112},[102,41737,30874],{"class":5206},[102,41739,158],{"class":108},[102,41741,190],{"class":161},[102,41743,119],{"class":112},[102,41745,41746],{"class":104,"line":1642},[102,41747,41748],{"class":171},"        # 路线4：定义3*3最大池化和1*1卷积\n",[102,41750,41751],{"class":104,"line":1663},[102,41752,41753],{"class":171},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[102,41755,41756,41758,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785,41787],{"class":104,"line":1668},[102,41757,30836],{"class":161},[102,41759,41760],{"class":112},".p4_1",[102,41762,158],{"class":108},[102,41764,34820],{"class":112},[102,41766,30865],{"class":5206},[102,41768,158],{"class":108},[102,41770,184],{"class":161},[102,41772,491],{"class":112},[102,41774,30920],{"class":5206},[102,41776,158],{"class":108},[102,41778,330],{"class":161},[102,41780,491],{"class":112},[102,41782,30874],{"class":5206},[102,41784,158],{"class":108},[102,41786,330],{"class":161},[102,41788,119],{"class":112},[102,41790,41791,41793,41796,41798,41800,41802,41804,41806,41808,41810,41813,41815,41817,41819],{"class":104,"line":1682},[102,41792,30836],{"class":161},[102,41794,41795],{"class":112},".p4_2",[102,41797,158],{"class":108},[102,41799,30844],{"class":112},[102,41801,30847],{"class":5206},[102,41803,158],{"class":108},[102,41805,41551],{"class":112},[102,41807,30856],{"class":5206},[102,41809,158],{"class":108},[102,41811,41812],{"class":112},"c4,",[102,41814,30865],{"class":5206},[102,41816,158],{"class":108},[102,41818,330],{"class":161},[102,41820,119],{"class":112},[102,41822,41823],{"class":104,"line":1687},[102,41824,2389],{"emptyLinePlaceholder":30},[102,41826,41827,41829,41831],{"class":104,"line":1716},[102,41828,30792],{"class":108},[102,41830,31084],{"class":1952},[102,41832,31087],{"class":112},[102,41834,41835,41838,41840,41842,41844,41846],{"class":104,"line":1721},[102,41836,41837],{"class":112},"        p1",[102,41839,158],{"class":108},[102,41841,30814],{"class":161},[102,41843,35175],{"class":112},[102,41845,30814],{"class":161},[102,41847,41848],{"class":112},".p1_1(x))\n",[102,41850,41851,41853,41855,41857,41859,41861,41864,41866,41868,41870],{"class":104,"line":1738},[102,41852,7075],{"class":112},[102,41854,158],{"class":108},[102,41856,30814],{"class":161},[102,41858,35175],{"class":112},[102,41860,30814],{"class":161},[102,41862,41863],{"class":112},".p2_2(",[102,41865,30814],{"class":161},[102,41867,35175],{"class":112},[102,41869,30814],{"class":161},[102,41871,41872],{"class":112},".p2_1(x))))\n",[102,41874,41875,41878,41880,41882,41884,41886,41889,41891,41893,41895],{"class":104,"line":1743},[102,41876,41877],{"class":112},"        p3",[102,41879,158],{"class":108},[102,41881,30814],{"class":161},[102,41883,35175],{"class":112},[102,41885,30814],{"class":161},[102,41887,41888],{"class":112},".p3_2(",[102,41890,30814],{"class":161},[102,41892,35175],{"class":112},[102,41894,30814],{"class":161},[102,41896,41897],{"class":112},".p3_1(x))))\n",[102,41899,41900,41903,41905,41907,41909,41911,41914,41916],{"class":104,"line":1748},[102,41901,41902],{"class":112},"        p4",[102,41904,158],{"class":108},[102,41906,30814],{"class":161},[102,41908,35175],{"class":112},[102,41910,30814],{"class":161},[102,41912,41913],{"class":112},".p4_2(",[102,41915,30814],{"class":161},[102,41917,41918],{"class":112},".p4_1(x)))\n",[102,41920,41921],{"class":104,"line":1753},[102,41922,41923],{"class":171},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[102,41925,41926,41928,41931,41933,41935,41937],{"class":104,"line":1767},[102,41927,14742],{"class":108},[102,41929,41930],{"class":112}," torch.cat((p1,p2,p3,p4),",[102,41932,32676],{"class":5206},[102,41934,158],{"class":108},[102,41936,330],{"class":161},[102,41938,119],{"class":112},[102,41940,41941],{"class":104,"line":1772},[102,41942,2389],{"emptyLinePlaceholder":30},[102,41944,41945],{"class":104,"line":2566},[102,41946,2389],{"emptyLinePlaceholder":30},[102,41948,41949],{"class":104,"line":2580},[102,41950,41951],{"class":171},"# 搭建GoogLeNet网络\n",[102,41953,41954,41956,41959,41961,41963,41965,41967],{"class":104,"line":2588},[102,41955,14684],{"class":108},[102,41957,41958],{"class":1952}," GoogLeNet",[102,41960,113],{"class":112},[102,41962,30769],{"class":1952},[102,41964,671],{"class":112},[102,41966,30774],{"class":1952},[102,41968,30777],{"class":112},[102,41970,41971],{"class":104,"line":2593},[102,41972,41973],{"class":171},"    # 必须把Inception导入到里边\n",[102,41975,41976,41978,41980],{"class":104,"line":2599},[102,41977,30792],{"class":108},[102,41979,30795],{"class":161},[102,41981,41982],{"class":112},"(self,Inception):\n",[102,41984,41985,41987,41990,41992,41994,41996],{"class":104,"line":2605},[102,41986,30808],{"class":161},[102,41988,41989],{"class":112},"(GoogLeNet,",[102,41991,30814],{"class":161},[102,41993,30817],{"class":112},[102,41995,30820],{"class":161},[102,41997,1965],{"class":112},[102,41999,42000,42002,42005,42007],{"class":104,"line":2610},[102,42001,30836],{"class":161},[102,42003,42004],{"class":112},".b1",[102,42006,158],{"class":108},[102,42008,38000],{"class":112},[102,42010,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043,42045,42047,42049,42051],{"class":104,"line":7938},[102,42012,38005],{"class":112},[102,42014,30847],{"class":5206},[102,42016,158],{"class":108},[102,42018,330],{"class":161},[102,42020,491],{"class":112},[102,42022,30856],{"class":5206},[102,42024,158],{"class":108},[102,42026,316],{"class":161},[102,42028,491],{"class":112},[102,42030,30865],{"class":5206},[102,42032,158],{"class":108},[102,42034,482],{"class":161},[102,42036,491],{"class":112},[102,42038,30920],{"class":5206},[102,42040,158],{"class":108},[102,42042,190],{"class":161},[102,42044,491],{"class":112},[102,42046,30874],{"class":5206},[102,42048,158],{"class":108},[102,42050,184],{"class":161},[102,42052,38038],{"class":112},[102,42054,42055],{"class":104,"line":7962},[102,42056,38043],{"class":112},[102,42058,42059,42061,42063,42065,42067,42069,42071,42073,42075,42077,42079,42081,42083],{"class":104,"line":7967},[102,42060,38088],{"class":112},[102,42062,30865],{"class":5206},[102,42064,158],{"class":108},[102,42066,184],{"class":161},[102,42068,491],{"class":112},[102,42070,30920],{"class":5206},[102,42072,158],{"class":108},[102,42074,190],{"class":161},[102,42076,491],{"class":112},[102,42078,30874],{"class":5206},[102,42080,158],{"class":108},[102,42082,330],{"class":161},[102,42084,119],{"class":112},[102,42086,42087],{"class":104,"line":7973},[102,42088,38117],{"class":112},[102,42090,42091,42093,42096,42098],{"class":104,"line":8000},[102,42092,30836],{"class":161},[102,42094,42095],{"class":112},".b2",[102,42097,158],{"class":108},[102,42099,38000],{"class":112},[102,42101,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120,42122,42124,42126],{"class":104,"line":8005},[102,42103,38005],{"class":112},[102,42105,30847],{"class":5206},[102,42107,158],{"class":108},[102,42109,316],{"class":161},[102,42111,491],{"class":112},[102,42113,30856],{"class":5206},[102,42115,158],{"class":108},[102,42117,316],{"class":161},[102,42119,491],{"class":112},[102,42121,30865],{"class":5206},[102,42123,158],{"class":108},[102,42125,330],{"class":161},[102,42127,38038],{"class":112},[102,42129,42130],{"class":104,"line":8011},[102,42131,38043],{"class":112},[102,42133,42134,42136,42138,42140,42142,42144,42146,42148,42151,42153,42155,42157,42159,42161,42163,42165,42167],{"class":104,"line":8023},[102,42135,38005],{"class":112},[102,42137,30847],{"class":5206},[102,42139,158],{"class":108},[102,42141,316],{"class":161},[102,42143,491],{"class":112},[102,42145,30856],{"class":5206},[102,42147,158],{"class":108},[102,42149,42150],{"class":161},"192",[102,42152,491],{"class":112},[102,42154,30865],{"class":5206},[102,42156,158],{"class":108},[102,42158,184],{"class":161},[102,42160,491],{"class":112},[102,42162,30874],{"class":5206},[102,42164,158],{"class":108},[102,42166,330],{"class":161},[102,42168,38038],{"class":112},[102,42170,42171],{"class":104,"line":8035},[102,42172,38043],{"class":112},[102,42174,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193,42195,42197,42199],{"class":104,"line":8047},[102,42176,38088],{"class":112},[102,42178,30865],{"class":5206},[102,42180,158],{"class":108},[102,42182,184],{"class":161},[102,42184,491],{"class":112},[102,42186,30920],{"class":5206},[102,42188,158],{"class":108},[102,42190,190],{"class":161},[102,42192,491],{"class":112},[102,42194,30874],{"class":5206},[102,42196,158],{"class":108},[102,42198,330],{"class":161},[102,42200,119],{"class":112},[102,42202,42203],{"class":104,"line":9706},[102,42204,38117],{"class":112},[102,42206,42207,42209,42212,42214],{"class":104,"line":9731},[102,42208,30836],{"class":161},[102,42210,42211],{"class":112},".b3",[102,42213,158],{"class":108},[102,42215,38000],{"class":112},[102,42217,42218,42221,42223,42225,42227,42230,42232,42234,42236,42239,42241,42243,42245,42248,42250],{"class":104,"line":9754},[102,42219,42220],{"class":112},"            Inception(",[102,42222,42150],{"class":161},[102,42224,491],{"class":112},[102,42226,316],{"class":161},[102,42228,42229],{"class":112},",(",[102,42231,322],{"class":161},[102,42233,491],{"class":112},[102,42235,32061],{"class":161},[102,42237,42238],{"class":112},"),(",[102,42240,714],{"class":161},[102,42242,491],{"class":112},[102,42244,310],{"class":161},[102,42246,42247],{"class":112},"),",[102,42249,310],{"class":161},[102,42251,38038],{"class":112},[102,42253,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282],{"class":104,"line":9778},[102,42255,42220],{"class":112},[102,42257,34861],{"class":161},[102,42259,491],{"class":112},[102,42261,32061],{"class":161},[102,42263,42229],{"class":112},[102,42265,32061],{"class":161},[102,42267,491],{"class":112},[102,42269,42150],{"class":161},[102,42271,42238],{"class":112},[102,42273,310],{"class":161},[102,42275,491],{"class":112},[102,42277,322],{"class":161},[102,42279,42247],{"class":112},[102,42281,316],{"class":161},[102,42283,38038],{"class":112},[102,42285,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308,42310],{"class":104,"line":9783},[102,42287,38088],{"class":112},[102,42289,30865],{"class":5206},[102,42291,158],{"class":108},[102,42293,184],{"class":161},[102,42295,491],{"class":112},[102,42297,30920],{"class":5206},[102,42299,158],{"class":108},[102,42301,190],{"class":161},[102,42303,491],{"class":112},[102,42305,30874],{"class":5206},[102,42307,158],{"class":108},[102,42309,330],{"class":161},[102,42311,119],{"class":112},[102,42313,42314],{"class":104,"line":9788},[102,42315,38117],{"class":112},[102,42317,42318,42320,42323,42325],{"class":104,"line":9793},[102,42319,30836],{"class":161},[102,42321,42322],{"class":112},".b4",[102,42324,158],{"class":108},[102,42326,38000],{"class":112},[102,42328,42329,42331,42334,42336,42338,42340,42342,42344,42347,42349,42351,42353,42355,42357,42359],{"class":104,"line":9802},[102,42330,42220],{"class":112},[102,42332,42333],{"class":161},"480",[102,42335,491],{"class":112},[102,42337,42150],{"class":161},[102,42339,42229],{"class":112},[102,42341,322],{"class":161},[102,42343,491],{"class":112},[102,42345,42346],{"class":161},"208",[102,42348,42238],{"class":112},[102,42350,714],{"class":161},[102,42352,491],{"class":112},[102,42354,720],{"class":161},[102,42356,42247],{"class":112},[102,42358,316],{"class":161},[102,42360,38038],{"class":112},[102,42362,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391],{"class":104,"line":9807},[102,42364,42220],{"class":112},[102,42366,38448],{"class":161},[102,42368,491],{"class":112},[102,42370,21038],{"class":161},[102,42372,42229],{"class":112},[102,42374,731],{"class":161},[102,42376,491],{"class":112},[102,42378,31492],{"class":161},[102,42380,42238],{"class":112},[102,42382,913],{"class":161},[102,42384,491],{"class":112},[102,42386,316],{"class":161},[102,42388,42247],{"class":112},[102,42390,316],{"class":161},[102,42392,38038],{"class":112},[102,42394,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413,42415,42417,42419,42421,42423],{"class":104,"line":9813},[102,42396,42220],{"class":112},[102,42398,38448],{"class":161},[102,42400,491],{"class":112},[102,42402,32061],{"class":161},[102,42404,42229],{"class":112},[102,42406,32061],{"class":161},[102,42408,491],{"class":112},[102,42410,34861],{"class":161},[102,42412,42238],{"class":112},[102,42414,913],{"class":161},[102,42416,491],{"class":112},[102,42418,316],{"class":161},[102,42420,42247],{"class":112},[102,42422,316],{"class":161},[102,42424,38038],{"class":112},[102,42426,42427,42429,42431,42433,42435,42437,42439,42441,42444,42446,42448,42450,42452,42454,42456],{"class":104,"line":9834},[102,42428,42220],{"class":112},[102,42430,38448],{"class":161},[102,42432,491],{"class":112},[102,42434,731],{"class":161},[102,42436,42229],{"class":112},[102,42438,32061],{"class":161},[102,42440,491],{"class":112},[102,42442,42443],{"class":161},"288",[102,42445,42238],{"class":112},[102,42447,310],{"class":161},[102,42449,491],{"class":112},[102,42451,316],{"class":161},[102,42453,42247],{"class":112},[102,42455,316],{"class":161},[102,42457,38038],{"class":112},[102,42459,42460,42462,42465,42467,42469,42471,42473,42475,42478,42480,42482,42484,42486,42488,42490],{"class":104,"line":9840},[102,42461,42220],{"class":112},[102,42463,42464],{"class":161},"528",[102,42466,491],{"class":112},[102,42468,34861],{"class":161},[102,42470,42229],{"class":112},[102,42472,21038],{"class":161},[102,42474,491],{"class":112},[102,42476,42477],{"class":161},"320",[102,42479,42238],{"class":112},[102,42481,310],{"class":161},[102,42483,491],{"class":112},[102,42485,32061],{"class":161},[102,42487,42247],{"class":112},[102,42489,32061],{"class":161},[102,42491,38038],{"class":112},[102,42493,42494,42496,42498,42500,42502,42504,42506,42508,42510,42512,42514,42516,42518],{"class":104,"line":9854},[102,42495,38088],{"class":112},[102,42497,30865],{"class":5206},[102,42499,158],{"class":108},[102,42501,184],{"class":161},[102,42503,491],{"class":112},[102,42505,30920],{"class":5206},[102,42507,158],{"class":108},[102,42509,190],{"class":161},[102,42511,491],{"class":112},[102,42513,30874],{"class":5206},[102,42515,158],{"class":108},[102,42517,330],{"class":161},[102,42519,119],{"class":112},[102,42521,42522],{"class":104,"line":9860},[102,42523,38117],{"class":112},[102,42525,42526,42528,42531,42533],{"class":104,"line":9887},[102,42527,30836],{"class":161},[102,42529,42530],{"class":112},".b5",[102,42532,158],{"class":108},[102,42534,38000],{"class":112},[102,42536,42537,42539,42542,42544,42546,42548,42550,42552,42554,42556,42558,42560,42562,42564,42566],{"class":104,"line":9896},[102,42538,42220],{"class":112},[102,42540,42541],{"class":161},"832",[102,42543,491],{"class":112},[102,42545,34861],{"class":161},[102,42547,42229],{"class":112},[102,42549,21038],{"class":161},[102,42551,491],{"class":112},[102,42553,42477],{"class":161},[102,42555,42238],{"class":112},[102,42557,310],{"class":161},[102,42559,491],{"class":112},[102,42561,32061],{"class":161},[102,42563,42247],{"class":112},[102,42565,32061],{"class":161},[102,42567,38038],{"class":112},[102,42569,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592,42594,42596,42598],{"class":104,"line":9902},[102,42571,42220],{"class":112},[102,42573,42541],{"class":161},[102,42575,491],{"class":112},[102,42577,34931],{"class":161},[102,42579,42229],{"class":112},[102,42581,42150],{"class":161},[102,42583,491],{"class":112},[102,42585,34931],{"class":161},[102,42587,42238],{"class":112},[102,42589,720],{"class":161},[102,42591,491],{"class":112},[102,42593,32061],{"class":161},[102,42595,42247],{"class":112},[102,42597,32061],{"class":161},[102,42599,38038],{"class":112},[102,42601,42602,42605,42607,42609,42611],{"class":104,"line":9910},[102,42603,42604],{"class":112},"            nn.AdaptiveAvgPool2d((",[102,42606,330],{"class":161},[102,42608,491],{"class":112},[102,42610,330],{"class":161},[102,42612,42613],{"class":112},")),\n",[102,42615,42616],{"class":104,"line":9915},[102,42617,38781],{"class":112},[102,42619,42620,42622,42625,42627,42629],{"class":104,"line":16594},[102,42621,38786],{"class":112},[102,42623,42624],{"class":161},"1024",[102,42626,491],{"class":112},[102,42628,559],{"class":161},[102,42630,119],{"class":112},[102,42632,42633],{"class":104,"line":16600},[102,42634,38117],{"class":112},[102,42636,42637],{"class":104,"line":16623},[102,42638,42639],{"class":171},"        # 对模型参数初始化\n",[102,42641,42642,42644,42646,42648,42650],{"class":104,"line":16629},[102,42643,3392],{"class":108},[102,42645,38859],{"class":112},[102,42647,26034],{"class":108},[102,42649,38864],{"class":161},[102,42651,38867],{"class":112},[102,42653,42654,42656,42658],{"class":104,"line":16652},[102,42655,4631],{"class":108},[102,42657,38879],{"class":161},[102,42659,38882],{"class":112},[102,42661,42662,42664,42667,42669,42672,42674,42676,42678,42680],{"class":104,"line":16666},[102,42663,38892],{"class":112},[102,42665,42666],{"class":5206},"mode",[102,42668,158],{"class":108},[102,42670,42671],{"class":217},"'fan_out'",[102,42673,491],{"class":112},[102,42675,38895],{"class":5206},[102,42677,158],{"class":108},[102,42679,38900],{"class":217},[102,42681,119],{"class":112},[102,42683,42684],{"class":104,"line":16686},[102,42685,42686],{"class":171},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[102,42688,42689],{"class":104,"line":16692},[102,42690,42691],{"class":171},"                # ② mode = 'fan_out'决定使用的fan值：\n",[102,42693,42694],{"class":104,"line":16703},[102,42695,42696],{"class":171},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[102,42698,42699],{"class":104,"line":16726},[102,42700,42701],{"class":171},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[102,42703,42704],{"class":104,"line":16748},[102,42705,42706],{"class":171},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[102,42708,42709],{"class":104,"line":16753},[102,42710,42711],{"class":171},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[102,42713,42714,42716,42718,42720,42722,42724],{"class":104,"line":16759},[102,42715,38912],{"class":108},[102,42717,38915],{"class":112},[102,42719,38918],{"class":108},[102,42721,38921],{"class":108},[102,42723,38924],{"class":161},[102,42725,3728],{"class":112},[102,42727,42728,42730,42732],{"class":104,"line":16773},[102,42729,38936],{"class":112},[102,42731,304],{"class":161},[102,42733,119],{"class":112},[102,42735,42736,42739,42741],{"class":104,"line":16786},[102,42737,42738],{"class":108},"                elif",[102,42740,38879],{"class":161},[102,42742,38955],{"class":112},[102,42744,42745,42748,42750,42752,42754],{"class":104,"line":16791},[102,42746,42747],{"class":112},"                    nn.init.normal_(m.weight,",[102,42749,304],{"class":161},[102,42751,491],{"class":112},[102,42753,38977],{"class":161},[102,42755,119],{"class":112},[102,42757,42758,42761,42763,42765,42767,42769],{"class":104,"line":16805},[102,42759,42760],{"class":108},"                    if",[102,42762,38915],{"class":112},[102,42764,38918],{"class":108},[102,42766,38921],{"class":108},[102,42768,38924],{"class":161},[102,42770,3728],{"class":112},[102,42772,42773,42776,42778],{"class":104,"line":16810},[102,42774,42775],{"class":112},"                        nn.init.constant_(m.bias,",[102,42777,304],{"class":161},[102,42779,119],{"class":112},[102,42781,42782],{"class":104,"line":16816},[102,42783,35156],{"class":171},[102,42785,42786,42788,42790],{"class":104,"line":16821},[102,42787,30792],{"class":108},[102,42789,31084],{"class":1952},[102,42791,31087],{"class":112},[102,42793,42794,42796,42798,42800],{"class":104,"line":16835},[102,42795,31092],{"class":112},[102,42797,158],{"class":108},[102,42799,30814],{"class":161},[102,42801,42802],{"class":112},".b1(x)\n",[102,42804,42805,42807,42809,42811],{"class":104,"line":16840},[102,42806,31092],{"class":112},[102,42808,158],{"class":108},[102,42810,30814],{"class":161},[102,42812,42813],{"class":112},".b2(x)\n",[102,42815,42816,42818,42820,42822],{"class":104,"line":16845},[102,42817,31092],{"class":112},[102,42819,158],{"class":108},[102,42821,30814],{"class":161},[102,42823,42824],{"class":112},".b3(x)\n",[102,42826,42827,42829,42831,42833],{"class":104,"line":16859},[102,42828,31092],{"class":112},[102,42830,158],{"class":108},[102,42832,30814],{"class":161},[102,42834,42835],{"class":112},".b4(x)\n",[102,42837,42838,42840,42842,42844],{"class":104,"line":16871},[102,42839,31092],{"class":112},[102,42841,158],{"class":108},[102,42843,30814],{"class":161},[102,42845,42846],{"class":112},".b5(x)\n",[102,42848,42849,42851],{"class":104,"line":16876},[102,42850,14742],{"class":108},[102,42852,31200],{"class":112},[102,42854,42855],{"class":104,"line":16889},[102,42856,2389],{"emptyLinePlaceholder":30},[102,42858,42859],{"class":104,"line":16894},[102,42860,42861],{"class":171},"# 模型展示\n",[102,42863,42864,42866,42868,42870,42872],{"class":104,"line":16899},[102,42865,1520],{"class":108},[102,42867,31211],{"class":161},[102,42869,2938],{"class":108},[102,42871,31216],{"class":217},[102,42873,3728],{"class":112},[102,42875,42876,42878,42880,42882,42884,42886,42888,42890,42892],{"class":104,"line":16904},[102,42877,31228],{"class":112},[102,42879,158],{"class":108},[102,42881,30442],{"class":112},[102,42883,31235],{"class":217},[102,42885,1693],{"class":108},[102,42887,31240],{"class":112},[102,42889,1690],{"class":108},[102,42891,30467],{"class":217},[102,42893,119],{"class":112},[102,42895,42896,42898,42900],{"class":104,"line":16917},[102,42897,31280],{"class":112},[102,42899,158],{"class":108},[102,42901,42902],{"class":112},"GoogLeNet(Inception).to(device)\n",[102,42904,42905,42907,42909,42911,42913,42915,42917,42919],{"class":104,"line":16922},[102,42906,31290],{"class":161},[102,42908,31293],{"class":112},[102,42910,330],{"class":161},[102,42912,491],{"class":112},[102,42914,31492],{"class":161},[102,42916,491],{"class":112},[102,42918,31492],{"class":161},[102,42920,31306],{"class":112},[56,42922,42923],{"start":24},[59,42924,39174],{},[93,42926,42928],{"className":30369,"code":42927,"language":30371,"meta":23,"style":23},"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",[99,42929,42930,42936,42942,42952,42958,42968,42978,42988,42998,43008,43012,43023,43033,43037,43041,43045,43053,43065,43075,43091,43101,43133,43147,43157,43167,43171,43181,43195,43205,43215,43225,43231,43235,43239,43243,43247,43251,43259,43279,43283,43287,43291,43295,43299,43315,43319,43323,43331,43335,43339,43347,43351,43355,43359,43367,43371,43375,43379,43383,43391,43395,43403,43407,43415,43419,43427,43431,43439,43443,43447,43455,43459,43463,43467,43479,43503,43517,43521,43525,43529,43537,43541,43549,43553,43561,43565,43573,43577,43585,43589,43597,43601,43613,43617,43625,43629,43637,43641,43645,43649,43653,43661,43665,43681,43685,43693,43697,43701,43705,43709,43713,43717,43721,43737,43741,43753,43757,43769,43773,43785,43789,43797,43801,43809,43813,43817,43821,43827,43831,43839,43843,43859,43863,43871,43875,43891,43903,43907,43919,43923,43927,43935,43939,43943,43951,43955,43963,43967,43975,43979,43983,44025,44067,44071,44075,44091,44095,44111,44115,44119,44127,44131,44135,44147,44185,44189,44193,44201,44205,44219,44229,44235,44241,44247,44253,44257,44261,44267,44271,44275,44283,44287,44305,44309,44313,44317,44333,44337,44341,44345,44349,44353,44373,44393,44397,44401,44405,44413,44421,44425,44441,44461,44481,44485,44489,44497,44505,44509,44513,44517,44529,44533,44543,44551,44568],{"__ignoreMap":23},[102,42931,42932,42934],{"class":104,"line":105},[102,42933,30383],{"class":108},[102,42935,31813],{"class":112},[102,42937,42938,42940],{"class":104,"line":24},[102,42939,30383],{"class":108},[102,42941,31820],{"class":112},[102,42943,42944,42946,42948,42950],{"class":104,"line":1168},[102,42945,30383],{"class":108},[102,42947,31831],{"class":112},[102,42949,31374],{"class":108},[102,42951,31836],{"class":112},[102,42953,42954,42956],{"class":104,"line":1183},[102,42955,30383],{"class":108},[102,42957,30386],{"class":112},[102,42959,42960,42962,42964,42966],{"class":104,"line":1189},[102,42961,30728],{"class":108},[102,42963,31406],{"class":112},[102,42965,30383],{"class":108},[102,42967,31853],{"class":112},[102,42969,42970,42972,42974,42976],{"class":104,"line":1203},[102,42971,30728],{"class":108},[102,42973,31359],{"class":112},[102,42975,30383],{"class":108},[102,42977,31364],{"class":112},[102,42979,42980,42982,42984,42986],{"class":104,"line":1209},[102,42981,30728],{"class":108},[102,42983,31389],{"class":112},[102,42985,30383],{"class":108},[102,42987,31394],{"class":112},[102,42989,42990,42992,42994,42996],{"class":104,"line":1300},[102,42991,30383],{"class":108},[102,42993,31406],{"class":112},[102,42995,31374],{"class":108},[102,42997,31411],{"class":112},[102,42999,43000,43002,43004,43006],{"class":104,"line":1306},[102,43001,30383],{"class":108},[102,43003,31423],{"class":112},[102,43005,31374],{"class":108},[102,43007,31428],{"class":112},[102,43009,43010],{"class":104,"line":1318},[102,43011,31898],{"class":171},[102,43013,43014,43016,43018,43020],{"class":104,"line":1601},[102,43015,30728],{"class":108},[102,43017,31905],{"class":112},[102,43019,30383],{"class":108},[102,43021,43022],{"class":112}," GoogLeNet, Inception\n",[102,43024,43025,43027,43029,43031],{"class":104,"line":1606},[102,43026,30728],{"class":108},[102,43028,30731],{"class":112},[102,43030,30383],{"class":108},[102,43032,30736],{"class":112},[102,43034,43035],{"class":104,"line":1612},[102,43036,2389],{"emptyLinePlaceholder":30},[102,43038,43039],{"class":104,"line":1617},[102,43040,2389],{"emptyLinePlaceholder":30},[102,43042,43043],{"class":104,"line":1631},[102,43044,31933],{"class":171},[102,43046,43047,43049,43051],{"class":104,"line":1636},[102,43048,31938],{"class":108},[102,43050,31941],{"class":1952},[102,43052,31944],{"class":112},[102,43054,43055,43057,43059,43061,43063],{"class":104,"line":1642},[102,43056,31949],{"class":112},[102,43058,158],{"class":108},[102,43060,31446],{"class":112},[102,43062,31454],{"class":217},[102,43064,31457],{"class":112},[102,43066,43067,43069,43071,43073],{"class":104,"line":1663},[102,43068,31962],{"class":5206},[102,43070,158],{"class":108},[102,43072,31467],{"class":161},[102,43074,31457],{"class":112},[102,43076,43077,43079,43081,43083,43085,43087,43089],{"class":104,"line":1668},[102,43078,31973],{"class":5206},[102,43080,158],{"class":108},[102,43082,31484],{"class":112},[102,43084,31487],{"class":5206},[102,43086,158],{"class":108},[102,43088,35440],{"class":161},[102,43090,31495],{"class":112},[102,43092,43093,43095,43097,43099],{"class":104,"line":1682},[102,43094,31990],{"class":5206},[102,43096,158],{"class":108},[102,43098,31467],{"class":161},[102,43100,119],{"class":112},[102,43102,43103,43105,43107,43109,43111,43113,43115,43117,43119,43121,43123,43125,43127,43129,43131],{"class":104,"line":1687},[102,43104,32001],{"class":112},[102,43106,158],{"class":108},[102,43108,32006],{"class":112},[102,43110,32009],{"class":161},[102,43112,113],{"class":112},[102,43114,32014],{"class":161},[102,43116,568],{"class":108},[102,43118,7348],{"class":161},[102,43120,32021],{"class":112},[102,43122,32009],{"class":161},[102,43124,113],{"class":112},[102,43126,32028],{"class":161},[102,43128,568],{"class":108},[102,43130,7348],{"class":161},[102,43132,32035],{"class":112},[102,43134,43135,43137,43139,43141,43143,43145],{"class":104,"line":1716},[102,43136,32040],{"class":112},[102,43138,158],{"class":108},[102,43140,32045],{"class":112},[102,43142,31528],{"class":5206},[102,43144,158],{"class":108},[102,43146,31533],{"class":112},[102,43148,43149,43151,43153,43155],{"class":104,"line":1721},[102,43150,32056],{"class":5206},[102,43152,158],{"class":108},[102,43154,310],{"class":161},[102,43156,31457],{"class":112},[102,43158,43159,43161,43163,43165],{"class":104,"line":1738},[102,43160,32068],{"class":5206},[102,43162,158],{"class":108},[102,43164,31467],{"class":161},[102,43166,31457],{"class":112},[102,43168,43169],{"class":104,"line":1743},[102,43170,32079],{"class":171},[102,43172,43173,43175,43177,43179],{"class":104,"line":1748},[102,43174,32084],{"class":5206},[102,43176,158],{"class":108},[102,43178,508],{"class":161},[102,43180,119],{"class":112},[102,43182,43183,43185,43187,43189,43191,43193],{"class":104,"line":1753},[102,43184,32095],{"class":112},[102,43186,158],{"class":108},[102,43188,31525],{"class":112},[102,43190,31528],{"class":5206},[102,43192,158],{"class":108},[102,43194,32106],{"class":112},[102,43196,43197,43199,43201,43203],{"class":104,"line":1767},[102,43198,32111],{"class":5206},[102,43200,158],{"class":108},[102,43202,310],{"class":161},[102,43204,31457],{"class":112},[102,43206,43207,43209,43211,43213],{"class":104,"line":1772},[102,43208,32122],{"class":5206},[102,43210,158],{"class":108},[102,43212,31467],{"class":161},[102,43214,31457],{"class":112},[102,43216,43217,43219,43221,43223],{"class":104,"line":2566},[102,43218,32133],{"class":5206},[102,43220,158],{"class":108},[102,43222,508],{"class":161},[102,43224,119],{"class":112},[102,43226,43227,43229],{"class":104,"line":2580},[102,43228,4079],{"class":108},[102,43230,32146],{"class":112},[102,43232,43233],{"class":104,"line":2588},[102,43234,2389],{"emptyLinePlaceholder":30},[102,43236,43237],{"class":104,"line":2593},[102,43238,32155],{"class":171},[102,43240,43241],{"class":104,"line":2599},[102,43242,32160],{"class":171},[102,43244,43245],{"class":104,"line":2605},[102,43246,2389],{"emptyLinePlaceholder":30},[102,43248,43249],{"class":104,"line":2610},[102,43250,32169],{"class":171},[102,43252,43253,43255,43257],{"class":104,"line":7938},[102,43254,31938],{"class":108},[102,43256,32176],{"class":1952},[102,43258,32179],{"class":112},[102,43260,43261,43263,43265,43267,43269,43271,43273,43275,43277],{"class":104,"line":7962},[102,43262,31228],{"class":112},[102,43264,158],{"class":108},[102,43266,30442],{"class":112},[102,43268,31235],{"class":217},[102,43270,1693],{"class":108},[102,43272,31240],{"class":112},[102,43274,1690],{"class":108},[102,43276,32198],{"class":217},[102,43278,119],{"class":112},[102,43280,43281],{"class":104,"line":7967},[102,43282,2389],{"emptyLinePlaceholder":30},[102,43284,43285],{"class":104,"line":7973},[102,43286,2389],{"emptyLinePlaceholder":30},[102,43288,43289],{"class":104,"line":8000},[102,43290,32213],{"class":171},[102,43292,43293],{"class":104,"line":8005},[102,43294,32218],{"class":171},[102,43296,43297],{"class":104,"line":8011},[102,43298,32223],{"class":171},[102,43300,43301,43303,43305,43307,43309,43311,43313],{"class":104,"line":8023},[102,43302,32228],{"class":112},[102,43304,158],{"class":108},[102,43306,32233],{"class":112},[102,43308,32236],{"class":5206},[102,43310,158],{"class":108},[102,43312,32241],{"class":161},[102,43314,119],{"class":112},[102,43316,43317],{"class":104,"line":8035},[102,43318,2389],{"emptyLinePlaceholder":30},[102,43320,43321],{"class":104,"line":8047},[102,43322,32252],{"class":171},[102,43324,43325,43327,43329],{"class":104,"line":9706},[102,43326,32257],{"class":112},[102,43328,158],{"class":108},[102,43330,32262],{"class":112},[102,43332,43333],{"class":104,"line":9731},[102,43334,2389],{"emptyLinePlaceholder":30},[102,43336,43337],{"class":104,"line":9754},[102,43338,32271],{"class":171},[102,43340,43341,43343,43345],{"class":104,"line":9778},[102,43342,31280],{"class":112},[102,43344,158],{"class":108},[102,43346,32280],{"class":112},[102,43348,43349],{"class":104,"line":9783},[102,43350,32285],{"class":171},[102,43352,43353],{"class":104,"line":9788},[102,43354,32290],{"class":171},[102,43356,43357],{"class":104,"line":9793},[102,43358,32295],{"class":171},[102,43360,43361,43363,43365],{"class":104,"line":9802},[102,43362,32300],{"class":112},[102,43364,158],{"class":108},[102,43366,32305],{"class":112},[102,43368,43369],{"class":104,"line":9807},[102,43370,2389],{"emptyLinePlaceholder":30},[102,43372,43373],{"class":104,"line":9813},[102,43374,2389],{"emptyLinePlaceholder":30},[102,43376,43377],{"class":104,"line":9834},[102,43378,32318],{"class":171},[102,43380,43381],{"class":104,"line":9840},[102,43382,32323],{"class":171},[102,43384,43385,43387,43389],{"class":104,"line":9854},[102,43386,32328],{"class":112},[102,43388,158],{"class":108},[102,43390,32333],{"class":161},[102,43392,43393],{"class":104,"line":9860},[102,43394,32338],{"class":171},[102,43396,43397,43399,43401],{"class":104,"line":9887},[102,43398,32343],{"class":112},[102,43400,158],{"class":108},[102,43402,32348],{"class":112},[102,43404,43405],{"class":104,"line":9896},[102,43406,32353],{"class":171},[102,43408,43409,43411,43413],{"class":104,"line":9902},[102,43410,32358],{"class":112},[102,43412,158],{"class":108},[102,43414,32348],{"class":112},[102,43416,43417],{"class":104,"line":9910},[102,43418,32367],{"class":171},[102,43420,43421,43423,43425],{"class":104,"line":9915},[102,43422,32372],{"class":112},[102,43424,158],{"class":108},[102,43426,32348],{"class":112},[102,43428,43429],{"class":104,"line":16594},[102,43430,32381],{"class":171},[102,43432,43433,43435,43437],{"class":104,"line":16600},[102,43434,32386],{"class":112},[102,43436,158],{"class":108},[102,43438,32348],{"class":112},[102,43440,43441],{"class":104,"line":16623},[102,43442,2389],{"emptyLinePlaceholder":30},[102,43444,43445],{"class":104,"line":16629},[102,43446,32399],{"class":171},[102,43448,43449,43451,43453],{"class":104,"line":16652},[102,43450,32404],{"class":112},[102,43452,158],{"class":108},[102,43454,32409],{"class":112},[102,43456,43457],{"class":104,"line":16666},[102,43458,2389],{"emptyLinePlaceholder":30},[102,43460,43461],{"class":104,"line":16686},[102,43462,2389],{"emptyLinePlaceholder":30},[102,43464,43465],{"class":104,"line":16692},[102,43466,32422],{"class":171},[102,43468,43469,43471,43473,43475,43477],{"class":104,"line":16703},[102,43470,3190],{"class":108},[102,43472,32429],{"class":112},[102,43474,26034],{"class":108},[102,43476,32434],{"class":161},[102,43478,32437],{"class":112},[102,43480,43481,43483,43485,43487,43489,43491,43493,43495,43497,43499,43501],{"class":104,"line":16726},[102,43482,32442],{"class":161},[102,43484,113],{"class":112},[102,43486,32447],{"class":217},[102,43488,32450],{"class":161},[102,43490,697],{"class":217},[102,43492,32450],{"class":161},[102,43494,364],{"class":217},[102,43496,32459],{"class":112},[102,43498,645],{"class":108},[102,43500,330],{"class":161},[102,43502,30488],{"class":112},[102,43504,43505,43507,43509,43511,43513,43515],{"class":104,"line":16748},[102,43506,32442],{"class":161},[102,43508,113],{"class":112},[102,43510,32474],{"class":217},[102,43512,568],{"class":108},[102,43514,559],{"class":161},[102,43516,119],{"class":112},[102,43518,43519],{"class":104,"line":16753},[102,43520,2389],{"emptyLinePlaceholder":30},[102,43522,43523],{"class":104,"line":16759},[102,43524,32489],{"class":171},[102,43526,43527],{"class":104,"line":16773},[102,43528,32494],{"class":171},[102,43530,43531,43533,43535],{"class":104,"line":16786},[102,43532,32499],{"class":112},[102,43534,158],{"class":108},[102,43536,32333],{"class":161},[102,43538,43539],{"class":104,"line":16791},[102,43540,32508],{"class":171},[102,43542,43543,43545,43547],{"class":104,"line":16805},[102,43544,32513],{"class":112},[102,43546,158],{"class":108},[102,43548,3074],{"class":161},[102,43550,43551],{"class":104,"line":16810},[102,43552,32522],{"class":171},[102,43554,43555,43557,43559],{"class":104,"line":16816},[102,43556,32527],{"class":112},[102,43558,158],{"class":108},[102,43560,32333],{"class":161},[102,43562,43563],{"class":104,"line":16821},[102,43564,32536],{"class":171},[102,43566,43567,43569,43571],{"class":104,"line":16835},[102,43568,32541],{"class":112},[102,43570,158],{"class":108},[102,43572,3074],{"class":161},[102,43574,43575],{"class":104,"line":16840},[102,43576,32550],{"class":171},[102,43578,43579,43581,43583],{"class":104,"line":16845},[102,43580,32555],{"class":112},[102,43582,158],{"class":108},[102,43584,3074],{"class":161},[102,43586,43587],{"class":104,"line":16859},[102,43588,32564],{"class":171},[102,43590,43591,43593,43595],{"class":104,"line":16871},[102,43592,32569],{"class":112},[102,43594,158],{"class":108},[102,43596,3074],{"class":161},[102,43598,43599],{"class":104,"line":16876},[102,43600,32578],{"class":171},[102,43602,43603,43605,43607,43609,43611],{"class":104,"line":16889},[102,43604,3392],{"class":108},[102,43606,31592],{"class":112},[102,43608,26034],{"class":108},[102,43610,31597],{"class":161},[102,43612,32591],{"class":112},[102,43614,43615],{"class":104,"line":16894},[102,43616,32596],{"class":171},[102,43618,43619,43621,43623],{"class":104,"line":16899},[102,43620,32601],{"class":112},[102,43622,158],{"class":108},[102,43624,32606],{"class":112},[102,43626,43627],{"class":104,"line":16904},[102,43628,32611],{"class":171},[102,43630,43631,43633,43635],{"class":104,"line":16917},[102,43632,32616],{"class":112},[102,43634,158],{"class":108},[102,43636,32621],{"class":112},[102,43638,43639],{"class":104,"line":16922},[102,43640,32627],{"class":171},[102,43642,43643],{"class":104,"line":32624},[102,43644,32633],{"class":112},[102,43646,43647],{"class":104,"line":32630},[102,43648,32639],{"class":171},[102,43650,43651],{"class":104,"line":32636},[102,43652,32645],{"class":171},[102,43654,43655,43657,43659],{"class":104,"line":32642},[102,43656,32651],{"class":112},[102,43658,158],{"class":108},[102,43660,32656],{"class":112},[102,43662,43663],{"class":104,"line":32648},[102,43664,32662],{"class":171},[102,43666,43667,43669,43671,43673,43675,43677,43679],{"class":104,"line":32659},[102,43668,32668],{"class":112},[102,43670,158],{"class":108},[102,43672,32673],{"class":112},[102,43674,32676],{"class":5206},[102,43676,158],{"class":108},[102,43678,330],{"class":161},[102,43680,119],{"class":112},[102,43682,43683],{"class":104,"line":32665},[102,43684,32688],{"class":171},[102,43686,43687,43689,43691],{"class":104,"line":32685},[102,43688,32694],{"class":112},[102,43690,158],{"class":108},[102,43692,32699],{"class":112},[102,43694,43695],{"class":104,"line":32691},[102,43696,32705],{"class":171},[102,43698,43699],{"class":104,"line":32702},[102,43700,32711],{"class":112},[102,43702,43703],{"class":104,"line":32708},[102,43704,32717],{"class":171},[102,43706,43707],{"class":104,"line":32714},[102,43708,32723],{"class":112},[102,43710,43711],{"class":104,"line":32720},[102,43712,32729],{"class":171},[102,43714,43715],{"class":104,"line":32726},[102,43716,32735],{"class":112},[102,43718,43719],{"class":104,"line":32732},[102,43720,32741],{"class":171},[102,43722,43723,43725,43727,43729,43731,43733,43735],{"class":104,"line":32738},[102,43724,32747],{"class":112},[102,43726,9467],{"class":108},[102,43728,32752],{"class":112},[102,43730,568],{"class":108},[102,43732,32757],{"class":112},[102,43734,304],{"class":161},[102,43736,119],{"class":112},[102,43738,43739],{"class":104,"line":32744},[102,43740,32767],{"class":171},[102,43742,43743,43745,43747,43749,43751],{"class":104,"line":32764},[102,43744,32773],{"class":112},[102,43746,9467],{"class":108},[102,43748,32778],{"class":112},[102,43750,2938],{"class":108},[102,43752,32783],{"class":112},[102,43754,43755],{"class":104,"line":32770},[102,43756,32789],{"class":171},[102,43758,43759,43761,43763,43765,43767],{"class":104,"line":32786},[102,43760,32795],{"class":112},[102,43762,9467],{"class":108},[102,43764,32757],{"class":112},[102,43766,304],{"class":161},[102,43768,119],{"class":112},[102,43770,43771],{"class":104,"line":32792},[102,43772,32809],{"class":171},[102,43774,43775,43777,43779,43781,43783],{"class":104,"line":32806},[102,43776,3392],{"class":108},[102,43778,32817],{"class":112},[102,43780,26034],{"class":108},[102,43782,31597],{"class":161},[102,43784,32824],{"class":112},[102,43786,43787],{"class":104,"line":32812},[102,43788,32830],{"class":171},[102,43790,43791,43793,43795],{"class":104,"line":32827},[102,43792,32601],{"class":112},[102,43794,158],{"class":108},[102,43796,32606],{"class":112},[102,43798,43799],{"class":104,"line":32833},[102,43800,32845],{"class":171},[102,43802,43803,43805,43807],{"class":104,"line":32842},[102,43804,32616],{"class":112},[102,43806,158],{"class":108},[102,43808,32621],{"class":112},[102,43810,43811],{"class":104,"line":32848},[102,43812,32860],{"class":171},[102,43814,43815],{"class":104,"line":32857},[102,43816,32866],{"class":112},[102,43818,43819],{"class":104,"line":32863},[102,43820,36347],{"class":171},[102,43822,43823,43825],{"class":104,"line":32869},[102,43824,32872],{"class":108},[102,43826,32875],{"class":112},[102,43828,43829],{"class":104,"line":32878},[102,43830,32881],{"class":171},[102,43832,43833,43835,43837],{"class":104,"line":32884},[102,43834,36362],{"class":112},[102,43836,158],{"class":108},[102,43838,32656],{"class":112},[102,43840,43841],{"class":104,"line":32895},[102,43842,32898],{"class":171},[102,43844,43845,43847,43849,43851,43853,43855,43857],{"class":104,"line":32901},[102,43846,36375],{"class":112},[102,43848,158],{"class":108},[102,43850,32673],{"class":112},[102,43852,32676],{"class":5206},[102,43854,158],{"class":108},[102,43856,330],{"class":161},[102,43858,119],{"class":112},[102,43860,43861],{"class":104,"line":32920},[102,43862,32923],{"class":171},[102,43864,43865,43867,43869],{"class":104,"line":32926},[102,43866,36396],{"class":112},[102,43868,158],{"class":108},[102,43870,32699],{"class":112},[102,43872,43873],{"class":104,"line":32937},[102,43874,32940],{"class":171},[102,43876,43877,43879,43881,43883,43885,43887,43889],{"class":104,"line":32943},[102,43878,36409],{"class":112},[102,43880,9467],{"class":108},[102,43882,36414],{"class":112},[102,43884,568],{"class":108},[102,43886,32757],{"class":112},[102,43888,304],{"class":161},[102,43890,119],{"class":112},[102,43892,43893,43895,43897,43899,43901],{"class":104,"line":32963},[102,43894,36427],{"class":112},[102,43896,9467],{"class":108},[102,43898,32778],{"class":112},[102,43900,2938],{"class":108},[102,43902,32783],{"class":112},[102,43904,43905],{"class":104,"line":32979},[102,43906,36440],{"class":171},[102,43908,43909,43911,43913,43915,43917],{"class":104,"line":32985},[102,43910,36445],{"class":112},[102,43912,9467],{"class":108},[102,43914,32757],{"class":112},[102,43916,304],{"class":161},[102,43918,119],{"class":112},[102,43920,43921],{"class":104,"line":32999},[102,43922,33002],{"class":171},[102,43924,43925],{"class":104,"line":33005},[102,43926,33008],{"class":171},[102,43928,43929,43931,43933],{"class":104,"line":33011},[102,43930,33014],{"class":112},[102,43932,697],{"class":108},[102,43934,33019],{"class":112},[102,43936,43937],{"class":104,"line":33022},[102,43938,33025],{"class":171},[102,43940,43941],{"class":104,"line":33028},[102,43942,33031],{"class":171},[102,43944,43945,43947,43949],{"class":104,"line":33034},[102,43946,33037],{"class":112},[102,43948,697],{"class":108},[102,43950,33019],{"class":112},[102,43952,43953],{"class":104,"line":33044},[102,43954,33047],{"class":171},[102,43956,43957,43959,43961],{"class":104,"line":33050},[102,43958,33053],{"class":112},[102,43960,697],{"class":108},[102,43962,33058],{"class":112},[102,43964,43965],{"class":104,"line":33061},[102,43966,33064],{"class":171},[102,43968,43969,43971,43973],{"class":104,"line":33067},[102,43970,33070],{"class":112},[102,43972,697],{"class":108},[102,43974,33058],{"class":112},[102,43976,43977],{"class":104,"line":33077},[102,43978,2389],{"emptyLinePlaceholder":30},[102,43980,43981],{"class":104,"line":33082},[102,43982,33085],{"class":171},[102,43984,43985,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023],{"class":104,"line":33088},[102,43986,32442],{"class":161},[102,43988,113],{"class":112},[102,43990,3581],{"class":217},[102,43992,32450],{"class":161},[102,43994,33099],{"class":217},[102,43996,1009],{"class":161},[102,43998,33104],{"class":108},[102,44000,1059],{"class":161},[102,44002,33109],{"class":217},[102,44004,1009],{"class":161},[102,44006,33104],{"class":108},[102,44008,1059],{"class":161},[102,44010,3581],{"class":217},[102,44012,33120],{"class":112},[102,44014,645],{"class":108},[102,44016,330],{"class":161},[102,44018,33127],{"class":112},[102,44020,645],{"class":108},[102,44022,330],{"class":161},[102,44024,33134],{"class":112},[102,44026,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059,44061,44063,44065],{"class":104,"line":33137},[102,44028,32442],{"class":161},[102,44030,113],{"class":112},[102,44032,3581],{"class":217},[102,44034,32450],{"class":161},[102,44036,33148],{"class":217},[102,44038,1009],{"class":161},[102,44040,33104],{"class":108},[102,44042,1059],{"class":161},[102,44044,33157],{"class":217},[102,44046,1009],{"class":161},[102,44048,33104],{"class":108},[102,44050,1059],{"class":161},[102,44052,3581],{"class":217},[102,44054,33168],{"class":112},[102,44056,645],{"class":108},[102,44058,330],{"class":161},[102,44060,33175],{"class":112},[102,44062,645],{"class":108},[102,44064,330],{"class":161},[102,44066,33134],{"class":112},[102,44068,44069],{"class":104,"line":33184},[102,44070,2389],{"emptyLinePlaceholder":30},[102,44072,44073],{"class":104,"line":33189},[102,44074,33192],{"class":171},[102,44076,44077,44079,44081,44083,44085,44087,44089],{"class":104,"line":33195},[102,44078,2486],{"class":108},[102,44080,33200],{"class":112},[102,44082,645],{"class":108},[102,44084,330],{"class":161},[102,44086,1053],{"class":112},[102,44088,1073],{"class":108},[102,44090,33211],{"class":112},[102,44092,44093],{"class":104,"line":33214},[102,44094,33217],{"class":171},[102,44096,44097,44099,44101,44103,44105,44107,44109],{"class":104,"line":33220},[102,44098,33223],{"class":112},[102,44100,152],{"class":161},[102,44102,158],{"class":108},[102,44104,33230],{"class":112},[102,44106,645],{"class":108},[102,44108,330],{"class":161},[102,44110,33237],{"class":112},[102,44112,44113],{"class":104,"line":33240},[102,44114,33243],{"class":171},[102,44116,44117],{"class":104,"line":33246},[102,44118,33249],{"class":171},[102,44120,44121,44123,44125],{"class":104,"line":33252},[102,44122,33255],{"class":112},[102,44124,158],{"class":108},[102,44126,32305],{"class":112},[102,44128,44129],{"class":104,"line":33262},[102,44130,2389],{"emptyLinePlaceholder":30},[102,44132,44133],{"class":104,"line":33267},[102,44134,33270],{"class":171},[102,44136,44137,44139,44141,44143,44145],{"class":104,"line":33273},[102,44138,33276],{"class":112},[102,44140,158],{"class":108},[102,44142,33281],{"class":112},[102,44144,645],{"class":108},[102,44146,33286],{"class":112},[102,44148,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177,44179,44181,44183],{"class":104,"line":33289},[102,44150,32442],{"class":161},[102,44152,113],{"class":112},[102,44154,33296],{"class":217},[102,44156,1009],{"class":161},[102,44158,33301],{"class":108},[102,44160,1059],{"class":161},[102,44162,657],{"class":217},[102,44164,1009],{"class":161},[102,44166,33301],{"class":108},[102,44168,1059],{"class":161},[102,44170,33314],{"class":217},[102,44172,33317],{"class":112},[102,44174,33320],{"class":108},[102,44176,1020],{"class":161},[102,44178,33325],{"class":112},[102,44180,441],{"class":108},[102,44182,1020],{"class":161},[102,44184,30488],{"class":112},[102,44186,44187],{"class":104,"line":33334},[102,44188,36724],{"class":171},[102,44190,44191],{"class":104,"line":33340},[102,44192,36729],{"class":171},[102,44194,44195,44197,44199],{"class":104,"line":33346},[102,44196,36734],{"class":112},[102,44198,33358],{"class":217},[102,44200,119],{"class":112},[102,44202,44203],{"class":104,"line":33352},[102,44204,33378],{"class":171},[102,44206,44207,44209,44211,44213,44215,44217],{"class":104,"line":33363},[102,44208,33384],{"class":112},[102,44210,158],{"class":108},[102,44212,33389],{"class":112},[102,44214,33392],{"class":5206},[102,44216,158],{"class":108},[102,44218,1535],{"class":112},[102,44220,44221,44223,44225,44227],{"class":104,"line":33369},[102,44222,33402],{"class":217},[102,44224,972],{"class":112},[102,44226,33407],{"class":161},[102,44228,33410],{"class":112},[102,44230,44231,44233],{"class":104,"line":33375},[102,44232,33416],{"class":217},[102,44234,33419],{"class":112},[102,44236,44237,44239],{"class":104,"line":33381},[102,44238,33425],{"class":217},[102,44240,33428],{"class":112},[102,44242,44243,44245],{"class":104,"line":33399},[102,44244,33434],{"class":217},[102,44246,33437],{"class":112},[102,44248,44249,44251],{"class":104,"line":33413},[102,44250,33443],{"class":217},[102,44252,33446],{"class":112},[102,44254,44255],{"class":104,"line":33422},[102,44256,33452],{"class":112},[102,44258,44259],{"class":104,"line":33431},[102,44260,33458],{"class":171},[102,44262,44263,44265],{"class":104,"line":33440},[102,44264,4079],{"class":108},[102,44266,33466],{"class":112},[102,44268,44269],{"class":104,"line":33449},[102,44270,2389],{"emptyLinePlaceholder":30},[102,44272,44273],{"class":104,"line":33455},[102,44274,33477],{"class":171},[102,44276,44277,44279,44281],{"class":104,"line":33461},[102,44278,31938],{"class":108},[102,44280,33485],{"class":1952},[102,44282,33488],{"class":112},[102,44284,44285],{"class":104,"line":33469},[102,44286,33494],{"class":171},[102,44288,44289,44291,44293,44295,44297,44299,44301,44303],{"class":104,"line":33474},[102,44290,33500],{"class":112},[102,44292,31684],{"class":5206},[102,44294,158],{"class":108},[102,44296,113],{"class":112},[102,44298,611],{"class":161},[102,44300,491],{"class":112},[102,44302,406],{"class":161},[102,44304,30488],{"class":112},[102,44306,44307],{"class":104,"line":33480},[102,44308,33520],{"class":171},[102,44310,44311],{"class":104,"line":33491},[102,44312,33526],{"class":171},[102,44314,44315],{"class":104,"line":33497},[102,44316,33532],{"class":171},[102,44318,44319,44321,44323,44325,44327,44329,44331],{"class":104,"line":33517},[102,44320,31718],{"class":112},[102,44322,330],{"class":161},[102,44324,491],{"class":112},[102,44326,190],{"class":161},[102,44328,491],{"class":112},[102,44330,330],{"class":161},[102,44332,119],{"class":112},[102,44334,44335],{"class":104,"line":33523},[102,44336,33555],{"class":171},[102,44338,44339],{"class":104,"line":33529},[102,44340,33561],{"class":171},[102,44342,44343],{"class":104,"line":33535},[102,44344,33567],{"class":171},[102,44346,44347],{"class":104,"line":33552},[102,44348,33573],{"class":171},[102,44350,44351],{"class":104,"line":33558},[102,44352,33579],{"class":171},[102,44354,44355,44357,44359,44361,44363,44365,44367,44369,44371],{"class":104,"line":33564},[102,44356,33585],{"class":112},[102,44358,33588],{"class":217},[102,44360,33591],{"class":112},[102,44362,33594],{"class":217},[102,44364,491],{"class":112},[102,44366,33599],{"class":5206},[102,44368,158],{"class":108},[102,44370,33604],{"class":217},[102,44372,119],{"class":112},[102,44374,44375,44377,44379,44381,44383,44385,44387,44389,44391],{"class":104,"line":33570},[102,44376,33585],{"class":112},[102,44378,33588],{"class":217},[102,44380,33616],{"class":112},[102,44382,33619],{"class":217},[102,44384,491],{"class":112},[102,44386,33599],{"class":5206},[102,44388,158],{"class":108},[102,44390,33628],{"class":217},[102,44392,119],{"class":112},[102,44394,44395],{"class":104,"line":33576},[102,44396,33636],{"class":171},[102,44398,44399],{"class":104,"line":33582},[102,44400,33642],{"class":112},[102,44402,44403],{"class":104,"line":33609},[102,44404,33648],{"class":171},[102,44406,44407,44409,44411],{"class":104,"line":33633},[102,44408,33654],{"class":112},[102,44410,33657],{"class":217},[102,44412,119],{"class":112},[102,44414,44415,44417,44419],{"class":104,"line":33639},[102,44416,33665],{"class":112},[102,44418,33668],{"class":217},[102,44420,119],{"class":112},[102,44422,44423],{"class":104,"line":33645},[102,44424,33676],{"class":171},[102,44426,44427,44429,44431,44433,44435,44437,44439],{"class":104,"line":33651},[102,44428,31718],{"class":112},[102,44430,330],{"class":161},[102,44432,491],{"class":112},[102,44434,190],{"class":161},[102,44436,491],{"class":112},[102,44438,190],{"class":161},[102,44440,119],{"class":112},[102,44442,44443,44445,44447,44449,44451,44453,44455,44457,44459],{"class":104,"line":33662},[102,44444,33585],{"class":112},[102,44446,33588],{"class":217},[102,44448,33703],{"class":112},[102,44450,33594],{"class":217},[102,44452,491],{"class":112},[102,44454,33599],{"class":5206},[102,44456,158],{"class":108},[102,44458,33714],{"class":217},[102,44460,119],{"class":112},[102,44462,44463,44465,44467,44469,44471,44473,44475,44477,44479],{"class":104,"line":33673},[102,44464,33585],{"class":112},[102,44466,33588],{"class":217},[102,44468,33726],{"class":112},[102,44470,33619],{"class":217},[102,44472,491],{"class":112},[102,44474,33599],{"class":5206},[102,44476,158],{"class":108},[102,44478,33737],{"class":217},[102,44480,119],{"class":112},[102,44482,44483],{"class":104,"line":33679},[102,44484,33745],{"class":171},[102,44486,44487],{"class":104,"line":33696},[102,44488,33642],{"class":112},[102,44490,44491,44493,44495],{"class":104,"line":33719},[102,44492,33654],{"class":112},[102,44494,33588],{"class":217},[102,44496,119],{"class":112},[102,44498,44499,44501,44503],{"class":104,"line":33742},[102,44500,33665],{"class":112},[102,44502,33767],{"class":217},[102,44504,119],{"class":112},[102,44506,44507],{"class":104,"line":33748},[102,44508,33775],{"class":112},[102,44510,44511],{"class":104,"line":33753},[102,44512,2389],{"emptyLinePlaceholder":30},[102,44514,44515],{"class":104,"line":33762},[102,44516,33786],{"class":171},[102,44518,44519,44521,44523,44525,44527],{"class":104,"line":33772},[102,44520,1520],{"class":108},[102,44522,31211],{"class":161},[102,44524,2938],{"class":108},[102,44526,31216],{"class":217},[102,44528,3728],{"class":112},[102,44530,44531],{"class":104,"line":33778},[102,44532,33805],{"class":171},[102,44534,44535,44538,44540],{"class":104,"line":33783},[102,44536,44537],{"class":112},"    GoogLeNet",[102,44539,158],{"class":108},[102,44541,44542],{"class":112},"GoogLeNet(Inception)\n",[102,44544,44545,44547,44549],{"class":104,"line":33789},[102,44546,33822],{"class":112},[102,44548,158],{"class":108},[102,44550,33827],{"class":112},[102,44552,44553,44555,44557,44560,44562,44564,44566],{"class":104,"line":33802},[102,44554,33384],{"class":112},[102,44556,158],{"class":108},[102,44558,44559],{"class":112},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[102,44561,33840],{"class":5206},[102,44563,158],{"class":108},[102,44565,1064],{"class":161},[102,44567,119],{"class":112},[102,44569,44570],{"class":104,"line":33808},[102,44571,33852],{"class":112},[56,44573,44574],{"start":1168},[59,44575,40565],{},[93,44577,44579],{"className":30369,"code":44578,"language":30371,"meta":23,"style":23},"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",[99,44580,44581,44587,44597,44607,44611,44621,44632,44636,44640,44644,44652,44668,44678,44694,44704,44718,44722,44732,44742,44752,44758,44762,44766,44774,44778,44794,44802,44806,44810,44818,44826,44830,44834,44838,44842,44848,44852,44862,44870,44878,44882,44886,44890,44898,44902,44918,44922,44926,44930,44942,44946,44958,44962,44966,44978,44982,44992,44996,45000,45012,45016,45024,45028,45032,45040,45044,45052,45056,45060,45064,45068,45072,45088,45096,45100,45104,45152,45158,45162,45172,45180,45188,45192,45196,45200,45204,45212,45216,45232,45236,45244,45252],{"__ignoreMap":23},[102,44582,44583,44585],{"class":104,"line":105},[102,44584,30383],{"class":108},[102,44586,30386],{"class":112},[102,44588,44589,44591,44593,44595],{"class":104,"line":24},[102,44590,30383],{"class":108},[102,44592,31406],{"class":112},[102,44594,31374],{"class":108},[102,44596,31411],{"class":112},[102,44598,44599,44601,44603,44605],{"class":104,"line":1168},[102,44600,30728],{"class":108},[102,44602,31389],{"class":112},[102,44604,30383],{"class":108},[102,44606,31394],{"class":112},[102,44608,44609],{"class":104,"line":1183},[102,44610,33913],{"class":171},[102,44612,44613,44615,44617,44619],{"class":104,"line":1189},[102,44614,30728],{"class":108},[102,44616,31359],{"class":112},[102,44618,30383],{"class":108},[102,44620,31364],{"class":112},[102,44622,44623,44625,44627,44629],{"class":104,"line":1203},[102,44624,30728],{"class":108},[102,44626,31905],{"class":112},[102,44628,30383],{"class":108},[102,44630,44631],{"class":112}," GoogLeNet,Inception\n",[102,44633,44634],{"class":104,"line":1209},[102,44635,2389],{"emptyLinePlaceholder":30},[102,44637,44638],{"class":104,"line":1300},[102,44639,2389],{"emptyLinePlaceholder":30},[102,44641,44642],{"class":104,"line":1306},[102,44643,33942],{"class":171},[102,44645,44646,44648,44650],{"class":104,"line":1318},[102,44647,31938],{"class":108},[102,44649,33949],{"class":1952},[102,44651,31944],{"class":112},[102,44653,44654,44656,44658,44660,44662,44664,44666],{"class":104,"line":1601},[102,44655,33956],{"class":112},[102,44657,158],{"class":108},[102,44659,31446],{"class":112},[102,44661,31449],{"class":5206},[102,44663,158],{"class":108},[102,44665,31454],{"class":217},[102,44667,31457],{"class":112},[102,44669,44670,44672,44674,44676],{"class":104,"line":1606},[102,44671,33973],{"class":5206},[102,44673,158],{"class":108},[102,44675,33978],{"class":161},[102,44677,31457],{"class":112},[102,44679,44680,44682,44684,44686,44688,44690,44692],{"class":104,"line":1612},[102,44681,33985],{"class":5206},[102,44683,158],{"class":108},[102,44685,31484],{"class":112},[102,44687,31487],{"class":5206},[102,44689,158],{"class":108},[102,44691,35440],{"class":161},[102,44693,31495],{"class":112},[102,44695,44696,44698,44700,44702],{"class":104,"line":1617},[102,44697,34002],{"class":5206},[102,44699,158],{"class":108},[102,44701,31467],{"class":161},[102,44703,119],{"class":112},[102,44705,44706,44708,44710,44712,44714,44716],{"class":104,"line":1631},[102,44707,34013],{"class":112},[102,44709,158],{"class":108},[102,44711,31525],{"class":112},[102,44713,31528],{"class":5206},[102,44715,158],{"class":108},[102,44717,34024],{"class":112},[102,44719,44720],{"class":104,"line":1636},[102,44721,34029],{"class":171},[102,44723,44724,44726,44728,44730],{"class":104,"line":1642},[102,44725,34034],{"class":5206},[102,44727,158],{"class":108},[102,44729,330],{"class":161},[102,44731,31457],{"class":112},[102,44733,44734,44736,44738,44740],{"class":104,"line":1663},[102,44735,34045],{"class":5206},[102,44737,158],{"class":108},[102,44739,31467],{"class":161},[102,44741,31457],{"class":112},[102,44743,44744,44746,44748,44750],{"class":104,"line":1668},[102,44745,34056],{"class":5206},[102,44747,158],{"class":108},[102,44749,304],{"class":161},[102,44751,119],{"class":112},[102,44753,44754,44756],{"class":104,"line":1682},[102,44755,4079],{"class":108},[102,44757,34069],{"class":112},[102,44759,44760],{"class":104,"line":1687},[102,44761,2389],{"emptyLinePlaceholder":30},[102,44763,44764],{"class":104,"line":1716},[102,44765,34078],{"class":171},[102,44767,44768,44770,44772],{"class":104,"line":1721},[102,44769,31938],{"class":108},[102,44771,34085],{"class":1952},[102,44773,34088],{"class":112},[102,44775,44776],{"class":104,"line":1738},[102,44777,34093],{"class":171},[102,44779,44780,44782,44784,44786,44788,44790,44792],{"class":104,"line":1743},[102,44781,31228],{"class":112},[102,44783,158],{"class":108},[102,44785,31235],{"class":217},[102,44787,1693],{"class":108},[102,44789,31240],{"class":112},[102,44791,1690],{"class":108},[102,44793,34110],{"class":217},[102,44795,44796,44798,44800],{"class":104,"line":1748},[102,44797,31280],{"class":112},[102,44799,158],{"class":108},[102,44801,32280],{"class":112},[102,44803,44804],{"class":104,"line":1753},[102,44805,2389],{"emptyLinePlaceholder":30},[102,44807,44808],{"class":104,"line":1767},[102,44809,34127],{"class":171},[102,44811,44812,44814,44816],{"class":104,"line":1772},[102,44813,34132],{"class":112},[102,44815,158],{"class":108},[102,44817,32333],{"class":161},[102,44819,44820,44822,44824],{"class":104,"line":2566},[102,44821,34141],{"class":112},[102,44823,158],{"class":108},[102,44825,3074],{"class":161},[102,44827,44828],{"class":104,"line":2580},[102,44829,2389],{"emptyLinePlaceholder":30},[102,44831,44832],{"class":104,"line":2588},[102,44833,34154],{"class":171},[102,44835,44836],{"class":104,"line":2593},[102,44837,34159],{"class":171},[102,44839,44840],{"class":104,"line":2599},[102,44841,34164],{"class":171},[102,44843,44844,44846],{"class":104,"line":2605},[102,44845,34169],{"class":108},[102,44847,32875],{"class":112},[102,44849,44850],{"class":104,"line":2610},[102,44851,34176],{"class":171},[102,44853,44854,44856,44858,44860],{"class":104,"line":7938},[102,44855,3392],{"class":108},[102,44857,34183],{"class":112},[102,44859,26034],{"class":108},[102,44861,34188],{"class":112},[102,44863,44864,44866,44868],{"class":104,"line":7962},[102,44865,34193],{"class":112},[102,44867,158],{"class":108},[102,44869,34198],{"class":112},[102,44871,44872,44874,44876],{"class":104,"line":7967},[102,44873,34203],{"class":112},[102,44875,158],{"class":108},[102,44877,34208],{"class":112},[102,44879,44880],{"class":104,"line":7973},[102,44881,34213],{"class":171},[102,44883,44884],{"class":104,"line":8000},[102,44885,32866],{"class":112},[102,44887,44888],{"class":104,"line":8005},[102,44889,34222],{"class":171},[102,44891,44892,44894,44896],{"class":104,"line":8011},[102,44893,32651],{"class":112},[102,44895,158],{"class":108},[102,44897,34231],{"class":112},[102,44899,44900],{"class":104,"line":8023},[102,44901,34236],{"class":171},[102,44903,44904,44906,44908,44910,44912,44914,44916],{"class":104,"line":8035},[102,44905,32668],{"class":112},[102,44907,158],{"class":108},[102,44909,32673],{"class":112},[102,44911,32676],{"class":5206},[102,44913,158],{"class":108},[102,44915,330],{"class":161},[102,44917,119],{"class":112},[102,44919,44920],{"class":104,"line":8047},[102,44921,34257],{"class":171},[102,44923,44924],{"class":104,"line":9706},[102,44925,34262],{"class":171},[102,44927,44928],{"class":104,"line":9731},[102,44929,34267],{"class":171},[102,44931,44932,44934,44936,44938,44940],{"class":104,"line":9754},[102,44933,34272],{"class":112},[102,44935,9467],{"class":108},[102,44937,32778],{"class":112},[102,44939,2938],{"class":108},[102,44941,34281],{"class":112},[102,44943,44944],{"class":104,"line":9778},[102,44945,34286],{"class":171},[102,44947,44948,44950,44952,44954,44956],{"class":104,"line":9783},[102,44949,34291],{"class":112},[102,44951,9467],{"class":108},[102,44953,34296],{"class":112},[102,44955,304],{"class":161},[102,44957,119],{"class":112},[102,44959,44960],{"class":104,"line":9788},[102,44961,2389],{"emptyLinePlaceholder":30},[102,44963,44964],{"class":104,"line":9793},[102,44965,34309],{"class":171},[102,44967,44968,44970,44972,44974,44976],{"class":104,"line":9802},[102,44969,34314],{"class":112},[102,44971,158],{"class":108},[102,44973,34319],{"class":112},[102,44975,697],{"class":108},[102,44977,34324],{"class":112},[102,44979,44980],{"class":104,"line":9807},[102,44981,34329],{"class":171},[102,44983,44984,44986,44988,44990],{"class":104,"line":9813},[102,44985,32442],{"class":161},[102,44987,113],{"class":112},[102,44989,34338],{"class":217},[102,44991,34341],{"class":112},[102,44993,44994],{"class":104,"line":9834},[102,44995,2389],{"emptyLinePlaceholder":30},[102,44997,44998],{"class":104,"line":9840},[102,44999,34350],{"class":171},[102,45001,45002,45004,45006,45008,45010],{"class":104,"line":9854},[102,45003,1520],{"class":108},[102,45005,31211],{"class":161},[102,45007,2938],{"class":108},[102,45009,31216],{"class":217},[102,45011,3728],{"class":112},[102,45013,45014],{"class":104,"line":9860},[102,45015,34367],{"class":171},[102,45017,45018,45020,45022],{"class":104,"line":9887},[102,45019,31280],{"class":112},[102,45021,158],{"class":108},[102,45023,44542],{"class":112},[102,45025,45026],{"class":104,"line":9896},[102,45027,34380],{"class":171},[102,45029,45030],{"class":104,"line":9902},[102,45031,34385],{"class":171},[102,45033,45034,45036,45038],{"class":104,"line":9910},[102,45035,34390],{"class":112},[102,45037,34393],{"class":217},[102,45039,30488],{"class":112},[102,45041,45042],{"class":104,"line":9915},[102,45043,34400],{"class":171},[102,45045,45046,45048,45050],{"class":104,"line":16594},[102,45047,34013],{"class":112},[102,45049,158],{"class":108},[102,45051,34409],{"class":112},[102,45053,45054],{"class":104,"line":16600},[102,45055,34414],{"class":171},[102,45057,45058],{"class":104,"line":16623},[102,45059,34419],{"class":112},[102,45061,45062],{"class":104,"line":16629},[102,45063,2389],{"emptyLinePlaceholder":30},[102,45065,45066],{"class":104,"line":16652},[102,45067,34428],{"class":171},[102,45069,45070],{"class":104,"line":16666},[102,45071,34433],{"class":171},[102,45073,45074,45076,45078,45080,45082,45084,45086],{"class":104,"line":16686},[102,45075,31228],{"class":112},[102,45077,158],{"class":108},[102,45079,31235],{"class":217},[102,45081,1693],{"class":108},[102,45083,31240],{"class":112},[102,45085,1690],{"class":108},[102,45087,34110],{"class":217},[102,45089,45090,45092,45094],{"class":104,"line":16692},[102,45091,31280],{"class":112},[102,45093,158],{"class":108},[102,45095,32280],{"class":112},[102,45097,45098],{"class":104,"line":16703},[102,45099,34462],{"class":171},[102,45101,45102],{"class":104,"line":16726},[102,45103,34467],{"class":171},[102,45105,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140,45142,45144,45146,45148,45150],{"class":104,"line":16748},[102,45107,34472],{"class":112},[102,45109,158],{"class":108},[102,45111,1003],{"class":112},[102,45113,34479],{"class":217},[102,45115,491],{"class":112},[102,45117,34484],{"class":217},[102,45119,491],{"class":112},[102,45121,34489],{"class":217},[102,45123,491],{"class":112},[102,45125,34494],{"class":217},[102,45127,491],{"class":112},[102,45129,34499],{"class":217},[102,45131,491],{"class":112},[102,45133,34504],{"class":217},[102,45135,491],{"class":112},[102,45137,34509],{"class":217},[102,45139,491],{"class":112},[102,45141,34514],{"class":217},[102,45143,491],{"class":112},[102,45145,34519],{"class":217},[102,45147,491],{"class":112},[102,45149,34524],{"class":217},[102,45151,33237],{"class":112},[102,45153,45154,45156],{"class":104,"line":16753},[102,45155,34169],{"class":108},[102,45157,32875],{"class":112},[102,45159,45160],{"class":104,"line":16759},[102,45161,34537],{"class":171},[102,45163,45164,45166,45168,45170],{"class":104,"line":16773},[102,45165,3392],{"class":108},[102,45167,34544],{"class":112},[102,45169,26034],{"class":108},[102,45171,34188],{"class":112},[102,45173,45174,45176,45178],{"class":104,"line":16786},[102,45175,32601],{"class":112},[102,45177,158],{"class":108},[102,45179,32606],{"class":112},[102,45181,45182,45184,45186],{"class":104,"line":16791},[102,45183,32616],{"class":112},[102,45185,158],{"class":108},[102,45187,32621],{"class":112},[102,45189,45190],{"class":104,"line":16805},[102,45191,2389],{"emptyLinePlaceholder":30},[102,45193,45194],{"class":104,"line":16810},[102,45195,34573],{"class":171},[102,45197,45198],{"class":104,"line":16816},[102,45199,32866],{"class":112},[102,45201,45202],{"class":104,"line":16821},[102,45203,34582],{"class":171},[102,45205,45206,45208,45210],{"class":104,"line":16835},[102,45207,32651],{"class":112},[102,45209,158],{"class":108},[102,45211,32656],{"class":112},[102,45213,45214],{"class":104,"line":16840},[102,45215,34595],{"class":171},[102,45217,45218,45220,45222,45224,45226,45228,45230],{"class":104,"line":16845},[102,45219,32668],{"class":112},[102,45221,158],{"class":108},[102,45223,32673],{"class":112},[102,45225,32676],{"class":5206},[102,45227,158],{"class":108},[102,45229,330],{"class":161},[102,45231,119],{"class":112},[102,45233,45234],{"class":104,"line":16859},[102,45235,34616],{"class":171},[102,45237,45238,45240,45242],{"class":104,"line":16871},[102,45239,34621],{"class":112},[102,45241,158],{"class":108},[102,45243,34626],{"class":112},[102,45245,45246,45248,45250],{"class":104,"line":16876},[102,45247,34631],{"class":112},[102,45249,158],{"class":108},[102,45251,34636],{"class":112},[102,45253,45254,45256,45258,45260,45262,45264,45266,45268],{"class":104,"line":16889},[102,45255,34641],{"class":161},[102,45257,113],{"class":112},[102,45259,34646],{"class":217},[102,45261,34649],{"class":112},[102,45263,34652],{"class":217},[102,45265,491],{"class":112},[102,45267,34657],{"class":217},[102,45269,34660],{"class":112},[73,45271,45273],{"id":45272},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45275,45276],{},"猫狗分类任务",[19,45278,45279],{},"划分数据集和验证集",[93,45281,45283],{"className":30369,"code":45282,"language":30371,"meta":23,"style":23},"# 创建脚本，用于划分数据集和验证集\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",[99,45284,45285,45290,45297,45302,45313,45320,45324,45334,45348,45357,45361,45366,45376,45396,45400,45405,45415,45426,45439,45443,45448,45457,45467,45478,45482,45487,45497,45501,45506,45511,45516,45521,45526,45530,45540,45567,45580,45592,45619,45624,45629,45643,45648,45660,45675,45690,45698,45702,45707,45713,45725,45738,45743,45748,45753,45803,45809,45813],{"__ignoreMap":23},[102,45286,45287],{"class":104,"line":105},[102,45288,45289],{"class":171},"# 创建脚本，用于划分数据集和验证集\n",[102,45291,45292,45294],{"class":104,"line":24},[102,45293,30383],{"class":108},[102,45295,45296],{"class":112}," os\n",[102,45298,45299],{"class":104,"line":1168},[102,45300,45301],{"class":171},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[102,45303,45304,45306,45309,45311],{"class":104,"line":1183},[102,45305,30728],{"class":108},[102,45307,45308],{"class":112}," shutil ",[102,45310,30383],{"class":108},[102,45312,31813],{"class":112},[102,45314,45315,45317],{"class":104,"line":1189},[102,45316,30383],{"class":108},[102,45318,45319],{"class":112}," random\n",[102,45321,45322],{"class":104,"line":1203},[102,45323,2389],{"emptyLinePlaceholder":30},[102,45325,45326,45328,45331],{"class":104,"line":1209},[102,45327,31938],{"class":108},[102,45329,45330],{"class":1952}," mkfile",[102,45332,45333],{"class":112},"(file):\n",[102,45335,45336,45338,45340,45343,45346],{"class":104,"line":1300},[102,45337,3090],{"class":108},[102,45339,38921],{"class":108},[102,45341,45342],{"class":112}," os.path.exists(",[102,45344,45345],{"class":5206},"file",[102,45347,30777],{"class":112},[102,45349,45350,45353,45355],{"class":104,"line":1306},[102,45351,45352],{"class":112},"        os.makedirs(",[102,45354,45345],{"class":5206},[102,45356,119],{"class":112},[102,45358,45359],{"class":104,"line":1318},[102,45360,2389],{"emptyLinePlaceholder":30},[102,45362,45363],{"class":104,"line":1601},[102,45364,45365],{"class":171},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[102,45367,45368,45371,45373],{"class":104,"line":1606},[102,45369,45370],{"class":112},"file_path",[102,45372,158],{"class":108},[102,45374,45375],{"class":217},"'data_cat_dog'\n",[102,45377,45378,45381,45383,45386,45388,45391,45393],{"class":104,"line":1612},[102,45379,45380],{"class":112},"flower_class",[102,45382,158],{"class":108},[102,45384,45385],{"class":112},"[cla ",[102,45387,3014],{"class":108},[102,45389,45390],{"class":112}," cla ",[102,45392,26034],{"class":108},[102,45394,45395],{"class":112}," os.listdir(file_path)]\n",[102,45397,45398],{"class":104,"line":1617},[102,45399,2389],{"emptyLinePlaceholder":30},[102,45401,45402],{"class":104,"line":1631},[102,45403,45404],{"class":171},"# 创建训练集train文件夹\n",[102,45406,45407,45410,45413],{"class":104,"line":1636},[102,45408,45409],{"class":112},"mkfile(",[102,45411,45412],{"class":217},"'data\u002Ftrain'",[102,45414,119],{"class":112},[102,45416,45417,45419,45421,45423],{"class":104,"line":1642},[102,45418,3014],{"class":108},[102,45420,45390],{"class":112},[102,45422,26034],{"class":108},[102,45424,45425],{"class":112}," flower_class:\n",[102,45427,45428,45431,45434,45436],{"class":104,"line":1663},[102,45429,45430],{"class":112},"    mkfile(",[102,45432,45433],{"class":217},"'data\u002Ftrain\u002F'",[102,45435,594],{"class":108},[102,45437,45438],{"class":112},"cla)\n",[102,45440,45441],{"class":104,"line":1668},[102,45442,2389],{"emptyLinePlaceholder":30},[102,45444,45445],{"class":104,"line":1682},[102,45446,45447],{"class":171},"# 创建验证集val文件夹\n",[102,45449,45450,45452,45455],{"class":104,"line":1687},[102,45451,45409],{"class":112},[102,45453,45454],{"class":217},"'data\u002Ftest'",[102,45456,119],{"class":112},[102,45458,45459,45461,45463,45465],{"class":104,"line":1716},[102,45460,3014],{"class":108},[102,45462,45390],{"class":112},[102,45464,26034],{"class":108},[102,45466,45425],{"class":112},[102,45468,45469,45471,45474,45476],{"class":104,"line":1721},[102,45470,45430],{"class":112},[102,45472,45473],{"class":217},"'data\u002Ftest\u002F'",[102,45475,594],{"class":108},[102,45477,45438],{"class":112},[102,45479,45480],{"class":104,"line":1738},[102,45481,2389],{"emptyLinePlaceholder":30},[102,45483,45484],{"class":104,"line":1743},[102,45485,45486],{"class":171},"# 划分比例，训练集：测试集=9：1\n",[102,45488,45489,45492,45494],{"class":104,"line":1748},[102,45490,45491],{"class":112},"split_rate",[102,45493,158],{"class":108},[102,45495,45496],{"class":161},"0.1\n",[102,45498,45499],{"class":104,"line":1753},[102,45500,2389],{"emptyLinePlaceholder":30},[102,45502,45503],{"class":104,"line":1767},[102,45504,45505],{"class":171},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[102,45507,45508],{"class":104,"line":1772},[102,45509,45510],{"class":171},"# cla_path：当前类别的原始图片路径\n",[102,45512,45513],{"class":104,"line":2566},[102,45514,45515],{"class":171},"# images：当前类别下所有图片的文件名列表\n",[102,45517,45518],{"class":104,"line":2580},[102,45519,45520],{"class":171},"# num：该类别图片总数\n",[102,45522,45523],{"class":104,"line":2588},[102,45524,45525],{"class":171},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[102,45527,45528],{"class":104,"line":2593},[102,45529,2389],{"emptyLinePlaceholder":30},[102,45531,45532,45534,45536,45538],{"class":104,"line":2599},[102,45533,3014],{"class":108},[102,45535,45390],{"class":112},[102,45537,26034],{"class":108},[102,45539,45425],{"class":112},[102,45541,45542,45545,45547,45550,45552,45555,45558,45560,45562,45564],{"class":104,"line":2605},[102,45543,45544],{"class":112},"    cla_path ",[102,45546,158],{"class":108},[102,45548,45549],{"class":112}," file_path ",[102,45551,594],{"class":108},[102,45553,45554],{"class":217}," '\u002F'",[102,45556,45557],{"class":108}," +",[102,45559,45390],{"class":112},[102,45561,594],{"class":108},[102,45563,45554],{"class":217},[102,45565,45566],{"class":171},"  # 某一类别的子目录\n",[102,45568,45569,45572,45574,45577],{"class":104,"line":2610},[102,45570,45571],{"class":112},"    images ",[102,45573,158],{"class":108},[102,45575,45576],{"class":112}," os.listdir(cla_path)  ",[102,45578,45579],{"class":171},"# iamges 列表存储了该目录下所有图像的名称\n",[102,45581,45582,45585,45587,45589],{"class":104,"line":7938},[102,45583,45584],{"class":112},"    num ",[102,45586,158],{"class":108},[102,45588,7321],{"class":161},[102,45590,45591],{"class":112},"(images)\n",[102,45593,45594,45597,45599,45602,45604,45606,45608,45611,45613,45616],{"class":104,"line":7962},[102,45595,45596],{"class":112},"    eval_index ",[102,45598,158],{"class":108},[102,45600,45601],{"class":112}," random.sample(images, ",[102,45603,606],{"class":5206},[102,45605,158],{"class":108},[102,45607,116],{"class":161},[102,45609,45610],{"class":112},"(num ",[102,45612,568],{"class":108},[102,45614,45615],{"class":112}," split_rate))  ",[102,45617,45618],{"class":171},"# 从images列表中随机抽取 k 个图像名称\n",[102,45620,45621],{"class":104,"line":7967},[102,45622,45623],{"class":171},"    # 遍历该类别下的所有图片\n",[102,45625,45626],{"class":104,"line":7973},[102,45627,45628],{"class":171},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[102,45630,45631,45633,45636,45638,45640],{"class":104,"line":8000},[102,45632,3190],{"class":108},[102,45634,45635],{"class":112}," index, image ",[102,45637,26034],{"class":108},[102,45639,31597],{"class":161},[102,45641,45642],{"class":112},"(images):\n",[102,45644,45645],{"class":104,"line":8005},[102,45646,45647],{"class":171},"        # eval_index 中保存验证集val的图像名称\n",[102,45649,45650,45652,45655,45657],{"class":104,"line":8011},[102,45651,2486],{"class":108},[102,45653,45654],{"class":112}," image ",[102,45656,26034],{"class":108},[102,45658,45659],{"class":112}," eval_index:\n",[102,45661,45662,45665,45667,45670,45672],{"class":104,"line":8023},[102,45663,45664],{"class":112},"            image_path ",[102,45666,158],{"class":108},[102,45668,45669],{"class":112}," cla_path ",[102,45671,594],{"class":108},[102,45673,45674],{"class":112}," image\n",[102,45676,45677,45680,45682,45685,45687],{"class":104,"line":8035},[102,45678,45679],{"class":112},"            new_path ",[102,45681,158],{"class":108},[102,45683,45684],{"class":217}," 'data\u002Ftest\u002F'",[102,45686,45557],{"class":108},[102,45688,45689],{"class":112}," cla\n",[102,45691,45692,45695],{"class":104,"line":8047},[102,45693,45694],{"class":112},"            copy(image_path, new_path)  ",[102,45696,45697],{"class":171},"# 将选中的图像复制到新路径\n",[102,45699,45700],{"class":104,"line":9706},[102,45701,2389],{"emptyLinePlaceholder":30},[102,45703,45704],{"class":104,"line":9731},[102,45705,45706],{"class":171},"        # 其余的图像保存在训练集train中\n",[102,45708,45709,45711],{"class":104,"line":9754},[102,45710,2523],{"class":108},[102,45712,3728],{"class":112},[102,45714,45715,45717,45719,45721,45723],{"class":104,"line":9778},[102,45716,45664],{"class":112},[102,45718,158],{"class":108},[102,45720,45669],{"class":112},[102,45722,594],{"class":108},[102,45724,45674],{"class":112},[102,45726,45727,45729,45731,45734,45736],{"class":104,"line":9783},[102,45728,45679],{"class":112},[102,45730,158],{"class":108},[102,45732,45733],{"class":217}," 'data\u002Ftrain\u002F'",[102,45735,45557],{"class":108},[102,45737,45689],{"class":112},[102,45739,45740],{"class":104,"line":9788},[102,45741,45742],{"class":112},"            copy(image_path, new_path)\n",[102,45744,45745],{"class":104,"line":9793},[102,45746,45747],{"class":171},"            # 打印进度条信息\n",[102,45749,45750],{"class":104,"line":9802},[102,45751,45752],{"class":171},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[102,45754,45755,45757,45759,45761,45764,45766,45768,45771,45773,45775,45777,45780,45783,45785,45787,45790,45793,45795,45797,45800],{"class":104,"line":9807},[102,45756,32442],{"class":161},[102,45758,113],{"class":112},[102,45760,364],{"class":217},[102,45762,45763],{"class":161},"\\r",[102,45765,1003],{"class":217},[102,45767,32450],{"class":161},[102,45769,45770],{"class":217},"] processing [",[102,45772,32450],{"class":161},[102,45774,697],{"class":217},[102,45776,32450],{"class":161},[102,45778,45779],{"class":217},"]\"",[102,45781,45782],{"class":112},".format(cla, index ",[102,45784,594],{"class":108},[102,45786,25109],{"class":161},[102,45788,45789],{"class":112},", num), ",[102,45791,45792],{"class":5206},"end",[102,45794,158],{"class":108},[102,45796,7642],{"class":217},[102,45798,45799],{"class":112},")  ",[102,45801,45802],{"class":171},"# processing bar\n",[102,45804,45805,45807],{"class":104,"line":9813},[102,45806,31290],{"class":161},[102,45808,1965],{"class":112},[102,45810,45811],{"class":104,"line":9834},[102,45812,2389],{"emptyLinePlaceholder":30},[102,45814,45815,45817,45819,45822],{"class":104,"line":9840},[102,45816,30406],{"class":161},[102,45818,113],{"class":112},[102,45820,45821],{"class":217},"\"processing done!\"",[102,45823,119],{"class":112},[19,45825,45826],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21988,45828,45830],{"id":45829},"_242模型代码","2.4.2.模型代码",[19,45832,45833],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[93,45835,45837],{"className":30369,"code":45836,"language":30371,"meta":23,"style":23},"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",[99,45838,45839,45845,45855,45865,45869,45885,45893,45907,45917,45921,45951,45955,45989,46035,46039,46073,46119,46123,46127,46161,46191,46195,46203,46217,46239,46261,46279,46283,46297,46301,46305,46321,46325,46333,46347,46357,46401,46405,46433,46437,46447,46475,46479,46515,46519,46547,46551,46561,46593,46625,46653,46657,46667,46699,46731,46763,46795,46827,46855,46859,46869,46901,46933,46945,46949,46961,46965,46969,46981,46989,47009,47013,47017,47021,47025,47029,47033,47047,47055,47063,47075,47089,47097,47101,47109,47119,47129,47139,47149,47159,47165,47169,47173,47185,47205,47213],{"__ignoreMap":23},[102,45840,45841,45843],{"class":104,"line":105},[102,45842,30383],{"class":108},[102,45844,30386],{"class":112},[102,45846,45847,45849,45851,45853],{"class":104,"line":24},[102,45848,30728],{"class":108},[102,45850,30731],{"class":112},[102,45852,30383],{"class":108},[102,45854,30736],{"class":112},[102,45856,45857,45859,45861,45863],{"class":104,"line":1168},[102,45858,30728],{"class":108},[102,45860,30748],{"class":112},[102,45862,30383],{"class":108},[102,45864,30753],{"class":112},[102,45866,45867],{"class":104,"line":1183},[102,45868,2389],{"emptyLinePlaceholder":30},[102,45870,45871,45873,45875,45877,45879,45881,45883],{"class":104,"line":1189},[102,45872,14684],{"class":108},[102,45874,41484],{"class":1952},[102,45876,113],{"class":112},[102,45878,30769],{"class":1952},[102,45880,671],{"class":112},[102,45882,30774],{"class":1952},[102,45884,30777],{"class":112},[102,45886,45887,45889,45891],{"class":104,"line":1203},[102,45888,30792],{"class":108},[102,45890,30795],{"class":161},[102,45892,41503],{"class":112},[102,45894,45895,45897,45899,45901,45903,45905],{"class":104,"line":1209},[102,45896,30808],{"class":161},[102,45898,41510],{"class":112},[102,45900,30814],{"class":161},[102,45902,30817],{"class":112},[102,45904,30820],{"class":161},[102,45906,1965],{"class":112},[102,45908,45909,45911,45913,45915],{"class":104,"line":1300},[102,45910,30836],{"class":161},[102,45912,34762],{"class":112},[102,45914,158],{"class":108},[102,45916,34767],{"class":112},[102,45918,45919],{"class":104,"line":1306},[102,45920,41533],{"class":171},[102,45922,45923,45925,45927,45929,45931,45933,45935,45937,45939,45941,45943,45945,45947,45949],{"class":104,"line":1318},[102,45924,30836],{"class":161},[102,45926,41540],{"class":112},[102,45928,158],{"class":108},[102,45930,30844],{"class":112},[102,45932,30847],{"class":5206},[102,45934,158],{"class":108},[102,45936,41551],{"class":112},[102,45938,30856],{"class":5206},[102,45940,158],{"class":108},[102,45942,41558],{"class":112},[102,45944,30865],{"class":5206},[102,45946,158],{"class":108},[102,45948,330],{"class":161},[102,45950,119],{"class":112},[102,45952,45953],{"class":104,"line":1601},[102,45954,41571],{"class":171},[102,45956,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977,45979,45981,45983,45985,45987],{"class":104,"line":1606},[102,45958,30836],{"class":161},[102,45960,41578],{"class":112},[102,45962,158],{"class":108},[102,45964,30844],{"class":112},[102,45966,30847],{"class":5206},[102,45968,158],{"class":108},[102,45970,41551],{"class":112},[102,45972,30856],{"class":5206},[102,45974,158],{"class":108},[102,45976,41595],{"class":112},[102,45978,304],{"class":161},[102,45980,41600],{"class":112},[102,45982,30865],{"class":5206},[102,45984,158],{"class":108},[102,45986,330],{"class":161},[102,45988,119],{"class":112},[102,45990,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031,46033],{"class":104,"line":1612},[102,45992,30836],{"class":161},[102,45994,41615],{"class":112},[102,45996,158],{"class":108},[102,45998,30844],{"class":112},[102,46000,30847],{"class":5206},[102,46002,158],{"class":108},[102,46004,41595],{"class":112},[102,46006,304],{"class":161},[102,46008,41600],{"class":112},[102,46010,30856],{"class":5206},[102,46012,158],{"class":108},[102,46014,41595],{"class":112},[102,46016,330],{"class":161},[102,46018,41600],{"class":112},[102,46020,30865],{"class":5206},[102,46022,158],{"class":108},[102,46024,184],{"class":161},[102,46026,491],{"class":112},[102,46028,30874],{"class":5206},[102,46030,158],{"class":108},[102,46032,330],{"class":161},[102,46034,119],{"class":112},[102,46036,46037],{"class":104,"line":1617},[102,46038,41660],{"class":171},[102,46040,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071],{"class":104,"line":1631},[102,46042,30836],{"class":161},[102,46044,41667],{"class":112},[102,46046,158],{"class":108},[102,46048,30844],{"class":112},[102,46050,30847],{"class":5206},[102,46052,158],{"class":108},[102,46054,41551],{"class":112},[102,46056,30856],{"class":5206},[102,46058,158],{"class":108},[102,46060,41684],{"class":112},[102,46062,304],{"class":161},[102,46064,41600],{"class":112},[102,46066,30865],{"class":5206},[102,46068,158],{"class":108},[102,46070,330],{"class":161},[102,46072,119],{"class":112},[102,46074,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117],{"class":104,"line":1636},[102,46076,30836],{"class":161},[102,46078,41703],{"class":112},[102,46080,158],{"class":108},[102,46082,30844],{"class":112},[102,46084,30847],{"class":5206},[102,46086,158],{"class":108},[102,46088,41684],{"class":112},[102,46090,304],{"class":161},[102,46092,41600],{"class":112},[102,46094,30856],{"class":5206},[102,46096,158],{"class":108},[102,46098,41684],{"class":112},[102,46100,330],{"class":161},[102,46102,41600],{"class":112},[102,46104,30865],{"class":5206},[102,46106,158],{"class":108},[102,46108,432],{"class":161},[102,46110,491],{"class":112},[102,46112,30874],{"class":5206},[102,46114,158],{"class":108},[102,46116,190],{"class":161},[102,46118,119],{"class":112},[102,46120,46121],{"class":104,"line":1642},[102,46122,41748],{"class":171},[102,46124,46125],{"class":104,"line":1663},[102,46126,41753],{"class":171},[102,46128,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159],{"class":104,"line":1668},[102,46130,30836],{"class":161},[102,46132,41760],{"class":112},[102,46134,158],{"class":108},[102,46136,34820],{"class":112},[102,46138,30865],{"class":5206},[102,46140,158],{"class":108},[102,46142,184],{"class":161},[102,46144,491],{"class":112},[102,46146,30920],{"class":5206},[102,46148,158],{"class":108},[102,46150,330],{"class":161},[102,46152,491],{"class":112},[102,46154,30874],{"class":5206},[102,46156,158],{"class":108},[102,46158,330],{"class":161},[102,46160,119],{"class":112},[102,46162,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187,46189],{"class":104,"line":1682},[102,46164,30836],{"class":161},[102,46166,41795],{"class":112},[102,46168,158],{"class":108},[102,46170,30844],{"class":112},[102,46172,30847],{"class":5206},[102,46174,158],{"class":108},[102,46176,41551],{"class":112},[102,46178,30856],{"class":5206},[102,46180,158],{"class":108},[102,46182,41812],{"class":112},[102,46184,30865],{"class":5206},[102,46186,158],{"class":108},[102,46188,330],{"class":161},[102,46190,119],{"class":112},[102,46192,46193],{"class":104,"line":1687},[102,46194,2389],{"emptyLinePlaceholder":30},[102,46196,46197,46199,46201],{"class":104,"line":1716},[102,46198,30792],{"class":108},[102,46200,31084],{"class":1952},[102,46202,31087],{"class":112},[102,46204,46205,46207,46209,46211,46213,46215],{"class":104,"line":1721},[102,46206,41837],{"class":112},[102,46208,158],{"class":108},[102,46210,30814],{"class":161},[102,46212,35175],{"class":112},[102,46214,30814],{"class":161},[102,46216,41848],{"class":112},[102,46218,46219,46221,46223,46225,46227,46229,46231,46233,46235,46237],{"class":104,"line":1738},[102,46220,7075],{"class":112},[102,46222,158],{"class":108},[102,46224,30814],{"class":161},[102,46226,35175],{"class":112},[102,46228,30814],{"class":161},[102,46230,41863],{"class":112},[102,46232,30814],{"class":161},[102,46234,35175],{"class":112},[102,46236,30814],{"class":161},[102,46238,41872],{"class":112},[102,46240,46241,46243,46245,46247,46249,46251,46253,46255,46257,46259],{"class":104,"line":1743},[102,46242,41877],{"class":112},[102,46244,158],{"class":108},[102,46246,30814],{"class":161},[102,46248,35175],{"class":112},[102,46250,30814],{"class":161},[102,46252,41888],{"class":112},[102,46254,30814],{"class":161},[102,46256,35175],{"class":112},[102,46258,30814],{"class":161},[102,46260,41897],{"class":112},[102,46262,46263,46265,46267,46269,46271,46273,46275,46277],{"class":104,"line":1748},[102,46264,41902],{"class":112},[102,46266,158],{"class":108},[102,46268,30814],{"class":161},[102,46270,35175],{"class":112},[102,46272,30814],{"class":161},[102,46274,41913],{"class":112},[102,46276,30814],{"class":161},[102,46278,41918],{"class":112},[102,46280,46281],{"class":104,"line":1753},[102,46282,41923],{"class":171},[102,46284,46285,46287,46289,46291,46293,46295],{"class":104,"line":1767},[102,46286,14742],{"class":108},[102,46288,41930],{"class":112},[102,46290,32676],{"class":5206},[102,46292,158],{"class":108},[102,46294,330],{"class":161},[102,46296,119],{"class":112},[102,46298,46299],{"class":104,"line":1772},[102,46300,2389],{"emptyLinePlaceholder":30},[102,46302,46303],{"class":104,"line":2566},[102,46304,41951],{"class":171},[102,46306,46307,46309,46311,46313,46315,46317,46319],{"class":104,"line":2580},[102,46308,14684],{"class":108},[102,46310,41958],{"class":1952},[102,46312,113],{"class":112},[102,46314,30769],{"class":1952},[102,46316,671],{"class":112},[102,46318,30774],{"class":1952},[102,46320,30777],{"class":112},[102,46322,46323],{"class":104,"line":2588},[102,46324,41973],{"class":171},[102,46326,46327,46329,46331],{"class":104,"line":2593},[102,46328,30792],{"class":108},[102,46330,30795],{"class":161},[102,46332,41982],{"class":112},[102,46334,46335,46337,46339,46341,46343,46345],{"class":104,"line":2599},[102,46336,30808],{"class":161},[102,46338,41989],{"class":112},[102,46340,30814],{"class":161},[102,46342,30817],{"class":112},[102,46344,30820],{"class":161},[102,46346,1965],{"class":112},[102,46348,46349,46351,46353,46355],{"class":104,"line":2605},[102,46350,30836],{"class":161},[102,46352,42004],{"class":112},[102,46354,158],{"class":108},[102,46356,38000],{"class":112},[102,46358,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393,46395,46397,46399],{"class":104,"line":2610},[102,46360,38005],{"class":112},[102,46362,30847],{"class":5206},[102,46364,158],{"class":108},[102,46366,184],{"class":161},[102,46368,491],{"class":112},[102,46370,30856],{"class":5206},[102,46372,158],{"class":108},[102,46374,316],{"class":161},[102,46376,491],{"class":112},[102,46378,30865],{"class":5206},[102,46380,158],{"class":108},[102,46382,482],{"class":161},[102,46384,491],{"class":112},[102,46386,30920],{"class":5206},[102,46388,158],{"class":108},[102,46390,190],{"class":161},[102,46392,491],{"class":112},[102,46394,30874],{"class":5206},[102,46396,158],{"class":108},[102,46398,184],{"class":161},[102,46400,38038],{"class":112},[102,46402,46403],{"class":104,"line":7938},[102,46404,38043],{"class":112},[102,46406,46407,46409,46411,46413,46415,46417,46419,46421,46423,46425,46427,46429,46431],{"class":104,"line":7962},[102,46408,38088],{"class":112},[102,46410,30865],{"class":5206},[102,46412,158],{"class":108},[102,46414,184],{"class":161},[102,46416,491],{"class":112},[102,46418,30920],{"class":5206},[102,46420,158],{"class":108},[102,46422,190],{"class":161},[102,46424,491],{"class":112},[102,46426,30874],{"class":5206},[102,46428,158],{"class":108},[102,46430,330],{"class":161},[102,46432,119],{"class":112},[102,46434,46435],{"class":104,"line":7967},[102,46436,38117],{"class":112},[102,46438,46439,46441,46443,46445],{"class":104,"line":7973},[102,46440,30836],{"class":161},[102,46442,42095],{"class":112},[102,46444,158],{"class":108},[102,46446,38000],{"class":112},[102,46448,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469,46471,46473],{"class":104,"line":8000},[102,46450,38005],{"class":112},[102,46452,30847],{"class":5206},[102,46454,158],{"class":108},[102,46456,316],{"class":161},[102,46458,491],{"class":112},[102,46460,30856],{"class":5206},[102,46462,158],{"class":108},[102,46464,316],{"class":161},[102,46466,491],{"class":112},[102,46468,30865],{"class":5206},[102,46470,158],{"class":108},[102,46472,330],{"class":161},[102,46474,38038],{"class":112},[102,46476,46477],{"class":104,"line":8005},[102,46478,38043],{"class":112},[102,46480,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511,46513],{"class":104,"line":8011},[102,46482,38005],{"class":112},[102,46484,30847],{"class":5206},[102,46486,158],{"class":108},[102,46488,316],{"class":161},[102,46490,491],{"class":112},[102,46492,30856],{"class":5206},[102,46494,158],{"class":108},[102,46496,42150],{"class":161},[102,46498,491],{"class":112},[102,46500,30865],{"class":5206},[102,46502,158],{"class":108},[102,46504,184],{"class":161},[102,46506,491],{"class":112},[102,46508,30874],{"class":5206},[102,46510,158],{"class":108},[102,46512,330],{"class":161},[102,46514,38038],{"class":112},[102,46516,46517],{"class":104,"line":8023},[102,46518,38043],{"class":112},[102,46520,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541,46543,46545],{"class":104,"line":8035},[102,46522,38088],{"class":112},[102,46524,30865],{"class":5206},[102,46526,158],{"class":108},[102,46528,184],{"class":161},[102,46530,491],{"class":112},[102,46532,30920],{"class":5206},[102,46534,158],{"class":108},[102,46536,190],{"class":161},[102,46538,491],{"class":112},[102,46540,30874],{"class":5206},[102,46542,158],{"class":108},[102,46544,330],{"class":161},[102,46546,119],{"class":112},[102,46548,46549],{"class":104,"line":8047},[102,46550,38117],{"class":112},[102,46552,46553,46555,46557,46559],{"class":104,"line":9706},[102,46554,30836],{"class":161},[102,46556,42211],{"class":112},[102,46558,158],{"class":108},[102,46560,38000],{"class":112},[102,46562,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591],{"class":104,"line":9731},[102,46564,42220],{"class":112},[102,46566,42150],{"class":161},[102,46568,491],{"class":112},[102,46570,316],{"class":161},[102,46572,42229],{"class":112},[102,46574,322],{"class":161},[102,46576,491],{"class":112},[102,46578,32061],{"class":161},[102,46580,42238],{"class":112},[102,46582,714],{"class":161},[102,46584,491],{"class":112},[102,46586,310],{"class":161},[102,46588,42247],{"class":112},[102,46590,310],{"class":161},[102,46592,38038],{"class":112},[102,46594,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623],{"class":104,"line":9754},[102,46596,42220],{"class":112},[102,46598,34861],{"class":161},[102,46600,491],{"class":112},[102,46602,32061],{"class":161},[102,46604,42229],{"class":112},[102,46606,32061],{"class":161},[102,46608,491],{"class":112},[102,46610,42150],{"class":161},[102,46612,42238],{"class":112},[102,46614,310],{"class":161},[102,46616,491],{"class":112},[102,46618,322],{"class":161},[102,46620,42247],{"class":112},[102,46622,316],{"class":161},[102,46624,38038],{"class":112},[102,46626,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651],{"class":104,"line":9778},[102,46628,38088],{"class":112},[102,46630,30865],{"class":5206},[102,46632,158],{"class":108},[102,46634,184],{"class":161},[102,46636,491],{"class":112},[102,46638,30920],{"class":5206},[102,46640,158],{"class":108},[102,46642,190],{"class":161},[102,46644,491],{"class":112},[102,46646,30874],{"class":5206},[102,46648,158],{"class":108},[102,46650,330],{"class":161},[102,46652,119],{"class":112},[102,46654,46655],{"class":104,"line":9783},[102,46656,38117],{"class":112},[102,46658,46659,46661,46663,46665],{"class":104,"line":9788},[102,46660,30836],{"class":161},[102,46662,42322],{"class":112},[102,46664,158],{"class":108},[102,46666,38000],{"class":112},[102,46668,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697],{"class":104,"line":9793},[102,46670,42220],{"class":112},[102,46672,42333],{"class":161},[102,46674,491],{"class":112},[102,46676,42150],{"class":161},[102,46678,42229],{"class":112},[102,46680,322],{"class":161},[102,46682,491],{"class":112},[102,46684,42346],{"class":161},[102,46686,42238],{"class":112},[102,46688,714],{"class":161},[102,46690,491],{"class":112},[102,46692,720],{"class":161},[102,46694,42247],{"class":112},[102,46696,316],{"class":161},[102,46698,38038],{"class":112},[102,46700,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729],{"class":104,"line":9802},[102,46702,42220],{"class":112},[102,46704,38448],{"class":161},[102,46706,491],{"class":112},[102,46708,21038],{"class":161},[102,46710,42229],{"class":112},[102,46712,731],{"class":161},[102,46714,491],{"class":112},[102,46716,31492],{"class":161},[102,46718,42238],{"class":112},[102,46720,913],{"class":161},[102,46722,491],{"class":112},[102,46724,316],{"class":161},[102,46726,42247],{"class":112},[102,46728,316],{"class":161},[102,46730,38038],{"class":112},[102,46732,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761],{"class":104,"line":9807},[102,46734,42220],{"class":112},[102,46736,38448],{"class":161},[102,46738,491],{"class":112},[102,46740,32061],{"class":161},[102,46742,42229],{"class":112},[102,46744,32061],{"class":161},[102,46746,491],{"class":112},[102,46748,34861],{"class":161},[102,46750,42238],{"class":112},[102,46752,913],{"class":161},[102,46754,491],{"class":112},[102,46756,316],{"class":161},[102,46758,42247],{"class":112},[102,46760,316],{"class":161},[102,46762,38038],{"class":112},[102,46764,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793],{"class":104,"line":9813},[102,46766,42220],{"class":112},[102,46768,38448],{"class":161},[102,46770,491],{"class":112},[102,46772,731],{"class":161},[102,46774,42229],{"class":112},[102,46776,32061],{"class":161},[102,46778,491],{"class":112},[102,46780,42443],{"class":161},[102,46782,42238],{"class":112},[102,46784,310],{"class":161},[102,46786,491],{"class":112},[102,46788,316],{"class":161},[102,46790,42247],{"class":112},[102,46792,316],{"class":161},[102,46794,38038],{"class":112},[102,46796,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825],{"class":104,"line":9834},[102,46798,42220],{"class":112},[102,46800,42464],{"class":161},[102,46802,491],{"class":112},[102,46804,34861],{"class":161},[102,46806,42229],{"class":112},[102,46808,21038],{"class":161},[102,46810,491],{"class":112},[102,46812,42477],{"class":161},[102,46814,42238],{"class":112},[102,46816,310],{"class":161},[102,46818,491],{"class":112},[102,46820,32061],{"class":161},[102,46822,42247],{"class":112},[102,46824,32061],{"class":161},[102,46826,38038],{"class":112},[102,46828,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853],{"class":104,"line":9840},[102,46830,38088],{"class":112},[102,46832,30865],{"class":5206},[102,46834,158],{"class":108},[102,46836,184],{"class":161},[102,46838,491],{"class":112},[102,46840,30920],{"class":5206},[102,46842,158],{"class":108},[102,46844,190],{"class":161},[102,46846,491],{"class":112},[102,46848,30874],{"class":5206},[102,46850,158],{"class":108},[102,46852,330],{"class":161},[102,46854,119],{"class":112},[102,46856,46857],{"class":104,"line":9854},[102,46858,38117],{"class":112},[102,46860,46861,46863,46865,46867],{"class":104,"line":9860},[102,46862,30836],{"class":161},[102,46864,42530],{"class":112},[102,46866,158],{"class":108},[102,46868,38000],{"class":112},[102,46870,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899],{"class":104,"line":9887},[102,46872,42220],{"class":112},[102,46874,42541],{"class":161},[102,46876,491],{"class":112},[102,46878,34861],{"class":161},[102,46880,42229],{"class":112},[102,46882,21038],{"class":161},[102,46884,491],{"class":112},[102,46886,42477],{"class":161},[102,46888,42238],{"class":112},[102,46890,310],{"class":161},[102,46892,491],{"class":112},[102,46894,32061],{"class":161},[102,46896,42247],{"class":112},[102,46898,32061],{"class":161},[102,46900,38038],{"class":112},[102,46902,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931],{"class":104,"line":9896},[102,46904,42220],{"class":112},[102,46906,42541],{"class":161},[102,46908,491],{"class":112},[102,46910,34931],{"class":161},[102,46912,42229],{"class":112},[102,46914,42150],{"class":161},[102,46916,491],{"class":112},[102,46918,34931],{"class":161},[102,46920,42238],{"class":112},[102,46922,720],{"class":161},[102,46924,491],{"class":112},[102,46926,32061],{"class":161},[102,46928,42247],{"class":112},[102,46930,32061],{"class":161},[102,46932,38038],{"class":112},[102,46934,46935,46937,46939,46941,46943],{"class":104,"line":9902},[102,46936,42604],{"class":112},[102,46938,330],{"class":161},[102,46940,491],{"class":112},[102,46942,330],{"class":161},[102,46944,42613],{"class":112},[102,46946,46947],{"class":104,"line":9910},[102,46948,38781],{"class":112},[102,46950,46951,46953,46955,46957,46959],{"class":104,"line":9915},[102,46952,38786],{"class":112},[102,46954,42624],{"class":161},[102,46956,491],{"class":112},[102,46958,190],{"class":161},[102,46960,119],{"class":112},[102,46962,46963],{"class":104,"line":16594},[102,46964,38117],{"class":112},[102,46966,46967],{"class":104,"line":16600},[102,46968,42639],{"class":171},[102,46970,46971,46973,46975,46977,46979],{"class":104,"line":16623},[102,46972,3392],{"class":108},[102,46974,38859],{"class":112},[102,46976,26034],{"class":108},[102,46978,38864],{"class":161},[102,46980,38867],{"class":112},[102,46982,46983,46985,46987],{"class":104,"line":16629},[102,46984,4631],{"class":108},[102,46986,38879],{"class":161},[102,46988,38882],{"class":112},[102,46990,46991,46993,46995,46997,46999,47001,47003,47005,47007],{"class":104,"line":16652},[102,46992,38892],{"class":112},[102,46994,42666],{"class":5206},[102,46996,158],{"class":108},[102,46998,42671],{"class":217},[102,47000,491],{"class":112},[102,47002,38895],{"class":5206},[102,47004,158],{"class":108},[102,47006,38900],{"class":217},[102,47008,119],{"class":112},[102,47010,47011],{"class":104,"line":16666},[102,47012,42686],{"class":171},[102,47014,47015],{"class":104,"line":16686},[102,47016,42691],{"class":171},[102,47018,47019],{"class":104,"line":16692},[102,47020,42696],{"class":171},[102,47022,47023],{"class":104,"line":16703},[102,47024,42701],{"class":171},[102,47026,47027],{"class":104,"line":16726},[102,47028,42706],{"class":171},[102,47030,47031],{"class":104,"line":16748},[102,47032,42711],{"class":171},[102,47034,47035,47037,47039,47041,47043,47045],{"class":104,"line":16753},[102,47036,38912],{"class":108},[102,47038,38915],{"class":112},[102,47040,38918],{"class":108},[102,47042,38921],{"class":108},[102,47044,38924],{"class":161},[102,47046,3728],{"class":112},[102,47048,47049,47051,47053],{"class":104,"line":16759},[102,47050,38936],{"class":112},[102,47052,304],{"class":161},[102,47054,119],{"class":112},[102,47056,47057,47059,47061],{"class":104,"line":16773},[102,47058,42738],{"class":108},[102,47060,38879],{"class":161},[102,47062,38955],{"class":112},[102,47064,47065,47067,47069,47071,47073],{"class":104,"line":16786},[102,47066,42747],{"class":112},[102,47068,304],{"class":161},[102,47070,491],{"class":112},[102,47072,38977],{"class":161},[102,47074,119],{"class":112},[102,47076,47077,47079,47081,47083,47085,47087],{"class":104,"line":16791},[102,47078,42760],{"class":108},[102,47080,38915],{"class":112},[102,47082,38918],{"class":108},[102,47084,38921],{"class":108},[102,47086,38924],{"class":161},[102,47088,3728],{"class":112},[102,47090,47091,47093,47095],{"class":104,"line":16805},[102,47092,42775],{"class":112},[102,47094,304],{"class":161},[102,47096,119],{"class":112},[102,47098,47099],{"class":104,"line":16810},[102,47100,35156],{"class":171},[102,47102,47103,47105,47107],{"class":104,"line":16816},[102,47104,30792],{"class":108},[102,47106,31084],{"class":1952},[102,47108,31087],{"class":112},[102,47110,47111,47113,47115,47117],{"class":104,"line":16821},[102,47112,31092],{"class":112},[102,47114,158],{"class":108},[102,47116,30814],{"class":161},[102,47118,42802],{"class":112},[102,47120,47121,47123,47125,47127],{"class":104,"line":16835},[102,47122,31092],{"class":112},[102,47124,158],{"class":108},[102,47126,30814],{"class":161},[102,47128,42813],{"class":112},[102,47130,47131,47133,47135,47137],{"class":104,"line":16840},[102,47132,31092],{"class":112},[102,47134,158],{"class":108},[102,47136,30814],{"class":161},[102,47138,42824],{"class":112},[102,47140,47141,47143,47145,47147],{"class":104,"line":16845},[102,47142,31092],{"class":112},[102,47144,158],{"class":108},[102,47146,30814],{"class":161},[102,47148,42835],{"class":112},[102,47150,47151,47153,47155,47157],{"class":104,"line":16859},[102,47152,31092],{"class":112},[102,47154,158],{"class":108},[102,47156,30814],{"class":161},[102,47158,42846],{"class":112},[102,47160,47161,47163],{"class":104,"line":16871},[102,47162,14742],{"class":108},[102,47164,31200],{"class":112},[102,47166,47167],{"class":104,"line":16876},[102,47168,2389],{"emptyLinePlaceholder":30},[102,47170,47171],{"class":104,"line":16889},[102,47172,42861],{"class":171},[102,47174,47175,47177,47179,47181,47183],{"class":104,"line":16894},[102,47176,1520],{"class":108},[102,47178,31211],{"class":161},[102,47180,2938],{"class":108},[102,47182,31216],{"class":217},[102,47184,3728],{"class":112},[102,47186,47187,47189,47191,47193,47195,47197,47199,47201,47203],{"class":104,"line":16899},[102,47188,31228],{"class":112},[102,47190,158],{"class":108},[102,47192,30442],{"class":112},[102,47194,31235],{"class":217},[102,47196,1693],{"class":108},[102,47198,31240],{"class":112},[102,47200,1690],{"class":108},[102,47202,30467],{"class":217},[102,47204,119],{"class":112},[102,47206,47207,47209,47211],{"class":104,"line":16904},[102,47208,31280],{"class":112},[102,47210,158],{"class":108},[102,47212,42902],{"class":112},[102,47214,47215,47217,47219,47221,47223,47225,47227,47229],{"class":104,"line":16917},[102,47216,31290],{"class":161},[102,47218,31293],{"class":112},[102,47220,330],{"class":161},[102,47222,491],{"class":112},[102,47224,31492],{"class":161},[102,47226,491],{"class":112},[102,47228,31492],{"class":161},[102,47230,31306],{"class":112},[21988,47232,47234],{"id":47233},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47236,47237],{},"计算图片的均值与方差，用于训练中归一化处理操作",[93,47239,47241],{"className":30369,"code":47240,"language":30371,"meta":23,"style":23},"# 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",[99,47242,47243,47248,47261,47266,47272,47277,47287,47291,47296,47306,47310,47315,47325,47342,47346,47351,47363,47375,47406,47415,47425,47435,47439,47444,47459,47463,47468,47473,47478,47488,47493,47518,47522,47527,47542,47546,47559,47563,47568,47573,47578,47583,47588,47598,47608,47631,47639,47647,47655,47659,47671,47675,47680,47684,47688,47695,47715,47739,47746,47760,47765,47770,47774,47788,47792,47804],{"__ignoreMap":23},[102,47244,47245],{"class":104,"line":105},[102,47246,47247],{"class":171},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[102,47249,47250,47252,47255,47258],{"class":104,"line":24},[102,47251,30728],{"class":108},[102,47253,47254],{"class":161}," PIL",[102,47256,47257],{"class":108}," import",[102,47259,47260],{"class":112}," Image\n",[102,47262,47263],{"class":104,"line":1168},[102,47264,47265],{"class":171},"# os 用来处理文件夹和文件路径\n",[102,47267,47268,47270],{"class":104,"line":1183},[102,47269,30383],{"class":108},[102,47271,45296],{"class":112},[102,47273,47274],{"class":104,"line":1189},[102,47275,47276],{"class":171},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[102,47278,47279,47281,47283,47285],{"class":104,"line":1203},[102,47280,30383],{"class":108},[102,47282,31371],{"class":112},[102,47284,31374],{"class":108},[102,47286,31377],{"class":112},[102,47288,47289],{"class":104,"line":1209},[102,47290,2389],{"emptyLinePlaceholder":30},[102,47292,47293],{"class":104,"line":1300},[102,47294,47295],{"class":171},"# 文件夹路径，包含所有图片文件\n",[102,47297,47298,47301,47303],{"class":104,"line":1306},[102,47299,47300],{"class":112},"folder_path ",[102,47302,158],{"class":108},[102,47304,47305],{"class":217}," 'data_cat_dog'\n",[102,47307,47308],{"class":104,"line":1318},[102,47309,2389],{"emptyLinePlaceholder":30},[102,47311,47312],{"class":104,"line":1601},[102,47313,47314],{"class":171},"# 初始化累积变量\n",[102,47316,47317,47320,47322],{"class":104,"line":1606},[102,47318,47319],{"class":112},"total_pixels ",[102,47321,158],{"class":108},[102,47323,47324],{"class":161}," 0\n",[102,47326,47327,47330,47332,47335,47337,47339],{"class":104,"line":1612},[102,47328,47329],{"class":112},"sum_normalized_pixel_values ",[102,47331,158],{"class":108},[102,47333,47334],{"class":112}," np.zeros(",[102,47336,184],{"class":161},[102,47338,45799],{"class":112},[102,47340,47341],{"class":171},"# 如果是RGB图像，需要三个通道的均值和方差\n",[102,47343,47344],{"class":104,"line":1617},[102,47345,2389],{"emptyLinePlaceholder":30},[102,47347,47348],{"class":104,"line":1631},[102,47349,47350],{"class":171},"# 遍历文件夹中的图片文件\n",[102,47352,47353,47355,47358,47360],{"class":104,"line":1636},[102,47354,3014],{"class":108},[102,47356,47357],{"class":112}," root, dirs, files ",[102,47359,26034],{"class":108},[102,47361,47362],{"class":112}," os.walk(folder_path):\n",[102,47364,47365,47367,47370,47372],{"class":104,"line":1642},[102,47366,3190],{"class":108},[102,47368,47369],{"class":112}," filename ",[102,47371,26034],{"class":108},[102,47373,47374],{"class":112}," files:\n",[102,47376,47377,47379,47382,47385,47387,47390,47392,47395,47397,47400,47403],{"class":104,"line":1663},[102,47378,2486],{"class":108},[102,47380,47381],{"class":112}," filename.endswith((",[102,47383,47384],{"class":217},"'.jpg'",[102,47386,12425],{"class":112},[102,47388,47389],{"class":217},"'.jpeg'",[102,47391,12425],{"class":112},[102,47393,47394],{"class":217},"'.png'",[102,47396,12425],{"class":112},[102,47398,47399],{"class":217},"'.bmp'",[102,47401,47402],{"class":112},")):  ",[102,47404,47405],{"class":171},"# 可根据实际情况添加其他格式\n",[102,47407,47408,47410,47412],{"class":104,"line":1668},[102,47409,45664],{"class":112},[102,47411,158],{"class":108},[102,47413,47414],{"class":112}," os.path.join(root, filename)\n",[102,47416,47417,47420,47422],{"class":104,"line":1682},[102,47418,47419],{"class":112},"            image ",[102,47421,158],{"class":108},[102,47423,47424],{"class":112}," Image.open(image_path)\n",[102,47426,47427,47430,47432],{"class":104,"line":1687},[102,47428,47429],{"class":112},"            image_array ",[102,47431,158],{"class":108},[102,47433,47434],{"class":112}," np.array(image)\n",[102,47436,47437],{"class":104,"line":1716},[102,47438,2389],{"emptyLinePlaceholder":30},[102,47440,47441],{"class":104,"line":1721},[102,47442,47443],{"class":171},"            # 归一化像素值到0-1之间\n",[102,47445,47446,47449,47451,47454,47456],{"class":104,"line":1738},[102,47447,47448],{"class":112},"            normalized_image_array ",[102,47450,158],{"class":108},[102,47452,47453],{"class":112}," image_array ",[102,47455,697],{"class":108},[102,47457,47458],{"class":161}," 255.0\n",[102,47460,47461],{"class":104,"line":1743},[102,47462,2389],{"emptyLinePlaceholder":30},[102,47464,47465],{"class":104,"line":1748},[102,47466,47467],{"class":171},"            # print(image_path)\n",[102,47469,47470],{"class":104,"line":1753},[102,47471,47472],{"class":171},"            # print(normalized_image_array.shape)\n",[102,47474,47475],{"class":104,"line":1767},[102,47476,47477],{"class":171},"            # 累积归一化后的像素值和像素数量\n",[102,47479,47480,47483,47485],{"class":104,"line":1772},[102,47481,47482],{"class":112},"            total_pixels ",[102,47484,9467],{"class":108},[102,47486,47487],{"class":112}," normalized_image_array.size\n",[102,47489,47490],{"class":104,"line":2566},[102,47491,47492],{"class":171},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[102,47494,47495,47498,47500,47503,47506,47508,47510,47512,47514,47516],{"class":104,"line":2580},[102,47496,47497],{"class":112},"            sum_normalized_pixel_values ",[102,47499,9467],{"class":108},[102,47501,47502],{"class":112}," np.sum(normalized_image_array, ",[102,47504,47505],{"class":5206},"axis",[102,47507,158],{"class":108},[102,47509,113],{"class":112},[102,47511,304],{"class":161},[102,47513,12425],{"class":112},[102,47515,330],{"class":161},[102,47517,30488],{"class":112},[102,47519,47520],{"class":104,"line":2588},[102,47521,2389],{"emptyLinePlaceholder":30},[102,47523,47524],{"class":104,"line":2593},[102,47525,47526],{"class":171},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[102,47528,47529,47532,47534,47537,47539],{"class":104,"line":2599},[102,47530,47531],{"class":112},"mean ",[102,47533,158],{"class":108},[102,47535,47536],{"class":112}," sum_normalized_pixel_values ",[102,47538,697],{"class":108},[102,47540,47541],{"class":112}," total_pixels\n",[102,47543,47544],{"class":104,"line":2605},[102,47545,2389],{"emptyLinePlaceholder":30},[102,47547,47548,47551,47553,47555,47557],{"class":104,"line":2610},[102,47549,47550],{"class":112},"sum_squared_diff ",[102,47552,158],{"class":108},[102,47554,47334],{"class":112},[102,47556,184],{"class":161},[102,47558,119],{"class":112},[102,47560,47561],{"class":104,"line":7938},[102,47562,2389],{"emptyLinePlaceholder":30},[102,47564,47565],{"class":104,"line":7962},[102,47566,47567],{"class":171},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[102,47569,47570],{"class":104,"line":7967},[102,47571,47572],{"class":171},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[102,47574,47575],{"class":104,"line":7973},[102,47576,47577],{"class":171},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[102,47579,47580],{"class":104,"line":8000},[102,47581,47582],{"class":171},"# Image.open(image_path)：打开图片\n",[102,47584,47585],{"class":104,"line":8005},[102,47586,47587],{"class":171},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[102,47589,47590,47592,47594,47596],{"class":104,"line":8011},[102,47591,3014],{"class":108},[102,47593,47357],{"class":112},[102,47595,26034],{"class":108},[102,47597,47362],{"class":112},[102,47599,47600,47602,47604,47606],{"class":104,"line":8023},[102,47601,3190],{"class":108},[102,47603,47369],{"class":112},[102,47605,26034],{"class":108},[102,47607,47374],{"class":112},[102,47609,47610,47612,47614,47616,47618,47620,47622,47624,47626,47628],{"class":104,"line":8035},[102,47611,2486],{"class":108},[102,47613,47381],{"class":112},[102,47615,47384],{"class":217},[102,47617,12425],{"class":112},[102,47619,47389],{"class":217},[102,47621,12425],{"class":112},[102,47623,47394],{"class":217},[102,47625,12425],{"class":112},[102,47627,47399],{"class":217},[102,47629,47630],{"class":112},")):\n",[102,47632,47633,47635,47637],{"class":104,"line":8047},[102,47634,45664],{"class":112},[102,47636,158],{"class":108},[102,47638,47414],{"class":112},[102,47640,47641,47643,47645],{"class":104,"line":9706},[102,47642,47419],{"class":112},[102,47644,158],{"class":108},[102,47646,47424],{"class":112},[102,47648,47649,47651,47653],{"class":104,"line":9731},[102,47650,47429],{"class":112},[102,47652,158],{"class":108},[102,47654,47434],{"class":112},[102,47656,47657],{"class":104,"line":9754},[102,47658,47443],{"class":171},[102,47660,47661,47663,47665,47667,47669],{"class":104,"line":9778},[102,47662,47448],{"class":112},[102,47664,158],{"class":108},[102,47666,47453],{"class":112},[102,47668,697],{"class":108},[102,47670,47458],{"class":161},[102,47672,47673],{"class":104,"line":9783},[102,47674,47472],{"class":171},[102,47676,47677],{"class":104,"line":9788},[102,47678,47679],{"class":171},"            # print(mean.shape)\n",[102,47681,47682],{"class":104,"line":9793},[102,47683,47467],{"class":171},[102,47685,47686],{"class":104,"line":9802},[102,47687,2389],{"emptyLinePlaceholder":30},[102,47689,47690,47693],{"class":104,"line":9807},[102,47691,47692],{"class":108},"            try",[102,47694,3728],{"class":112},[102,47696,47697,47700,47702,47705,47707,47710,47712],{"class":104,"line":9813},[102,47698,47699],{"class":112},"                diff ",[102,47701,158],{"class":108},[102,47703,47704],{"class":112}," (normalized_image_array ",[102,47706,645],{"class":108},[102,47708,47709],{"class":112}," mean) ",[102,47711,10651],{"class":108},[102,47713,47714],{"class":161}," 2\n",[102,47716,47717,47720,47722,47725,47727,47729,47731,47733,47735,47737],{"class":104,"line":9834},[102,47718,47719],{"class":112},"                sum_squared_diff ",[102,47721,9467],{"class":108},[102,47723,47724],{"class":112}," np.sum(diff, ",[102,47726,47505],{"class":5206},[102,47728,158],{"class":108},[102,47730,113],{"class":112},[102,47732,304],{"class":161},[102,47734,12425],{"class":112},[102,47736,330],{"class":161},[102,47738,30488],{"class":112},[102,47740,47741,47744],{"class":104,"line":9840},[102,47742,47743],{"class":108},"            except",[102,47745,3728],{"class":112},[102,47747,47748,47751,47753,47755,47758],{"class":104,"line":9854},[102,47749,47750],{"class":161},"                print",[102,47752,113],{"class":112},[102,47754,165],{"class":108},[102,47756,47757],{"class":217},"\"捕获到自定义异常\"",[102,47759,119],{"class":112},[102,47761,47762],{"class":104,"line":9860},[102,47763,47764],{"class":171},"            # diff = (normalized_image_array - mean) ** 2\n",[102,47766,47767],{"class":104,"line":9887},[102,47768,47769],{"class":171},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[102,47771,47772],{"class":104,"line":9896},[102,47773,2389],{"emptyLinePlaceholder":30},[102,47775,47776,47779,47781,47784,47786],{"class":104,"line":9902},[102,47777,47778],{"class":112},"variance ",[102,47780,158],{"class":108},[102,47782,47783],{"class":112}," sum_squared_diff ",[102,47785,697],{"class":108},[102,47787,47541],{"class":112},[102,47789,47790],{"class":104,"line":9910},[102,47791,2389],{"emptyLinePlaceholder":30},[102,47793,47794,47796,47798,47801],{"class":104,"line":9915},[102,47795,30406],{"class":161},[102,47797,113],{"class":112},[102,47799,47800],{"class":217},"\"Mean:\"",[102,47802,47803],{"class":112},", mean)\n",[102,47805,47806,47808,47810,47813],{"class":104,"line":16594},[102,47807,30406],{"class":161},[102,47809,113],{"class":112},[102,47811,47812],{"class":217},"\"Variance:\"",[102,47814,47815],{"class":112},", variance)\n",[93,47817,47819],{"className":30369,"code":47818,"language":30371,"meta":23,"style":23},"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",[99,47820,47821,47827,47833,47843,47849,47859,47873,47883,47893,47903,47907,47917,47927,47931,47935,47943,47948,47953,47972,47976,47981,47986,47991,47996,48037,48042,48052,48057,48070,48075,48080,48085,48090,48095,48099,48104,48109,48131,48135,48167,48181,48191,48201,48205,48215,48229,48239,48249,48259,48265,48269,48273,48277,48281,48285,48293,48313,48317,48321,48325,48329,48345,48349,48353,48361,48365,48369,48377,48381,48385,48389,48397,48401,48405,48409,48417,48421,48429,48433,48441,48445,48453,48457,48465,48469,48473,48481,48485,48489,48501,48525,48539,48543,48547,48551,48559,48563,48571,48575,48583,48587,48595,48599,48607,48611,48619,48623,48635,48639,48647,48651,48659,48663,48667,48671,48675,48683,48687,48703,48707,48715,48719,48723,48727,48731,48735,48739,48743,48759,48763,48775,48779,48791,48795,48807,48811,48819,48823,48831,48835,48839,48843,48849,48853,48861,48865,48881,48885,48893,48897,48913,48925,48929,48941,48945,48949,48957,48961,48965,48973,48977,48985,48989,48997,49001,49005,49047,49089,49093,49097,49113,49117,49133,49137,49141,49149,49153,49157,49169,49207,49211,49215,49223,49227,49241,49251,49257,49263,49269,49275,49279,49283,49289,49293,49297,49305,49309,49327,49331,49335,49339,49355,49359,49363,49367,49371,49375,49395,49415,49419,49423,49427,49435,49443,49447,49463,49483,49503,49507,49512,49521,49530,49535,49540,49545,49558,49563,49572,49581,49598],{"__ignoreMap":23},[102,47822,47823,47825],{"class":104,"line":105},[102,47824,30383],{"class":108},[102,47826,31813],{"class":112},[102,47828,47829,47831],{"class":104,"line":24},[102,47830,30383],{"class":108},[102,47832,31820],{"class":112},[102,47834,47835,47837,47839,47841],{"class":104,"line":1168},[102,47836,30383],{"class":108},[102,47838,31831],{"class":112},[102,47840,31374],{"class":108},[102,47842,31836],{"class":112},[102,47844,47845,47847],{"class":104,"line":1183},[102,47846,30383],{"class":108},[102,47848,30386],{"class":112},[102,47850,47851,47853,47855,47857],{"class":104,"line":1189},[102,47852,30728],{"class":108},[102,47854,31406],{"class":112},[102,47856,30383],{"class":108},[102,47858,31853],{"class":112},[102,47860,47861,47863,47865,47867,47870],{"class":104,"line":1203},[102,47862,30728],{"class":108},[102,47864,31359],{"class":112},[102,47866,30383],{"class":108},[102,47868,47869],{"class":112}," ImageFolder ",[102,47871,47872],{"class":171},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[102,47874,47875,47877,47879,47881],{"class":104,"line":1209},[102,47876,30728],{"class":108},[102,47878,31389],{"class":112},[102,47880,30383],{"class":108},[102,47882,31394],{"class":112},[102,47884,47885,47887,47889,47891],{"class":104,"line":1300},[102,47886,30383],{"class":108},[102,47888,31406],{"class":112},[102,47890,31374],{"class":108},[102,47892,31411],{"class":112},[102,47894,47895,47897,47899,47901],{"class":104,"line":1306},[102,47896,30383],{"class":108},[102,47898,31423],{"class":112},[102,47900,31374],{"class":108},[102,47902,31428],{"class":112},[102,47904,47905],{"class":104,"line":1318},[102,47906,31898],{"class":171},[102,47908,47909,47911,47913,47915],{"class":104,"line":1601},[102,47910,30728],{"class":108},[102,47912,31905],{"class":112},[102,47914,30383],{"class":108},[102,47916,43022],{"class":112},[102,47918,47919,47921,47923,47925],{"class":104,"line":1606},[102,47920,30728],{"class":108},[102,47922,30731],{"class":112},[102,47924,30383],{"class":108},[102,47926,30736],{"class":112},[102,47928,47929],{"class":104,"line":1612},[102,47930,2389],{"emptyLinePlaceholder":30},[102,47932,47933],{"class":104,"line":1617},[102,47934,31933],{"class":171},[102,47936,47937,47939,47941],{"class":104,"line":1631},[102,47938,31938],{"class":108},[102,47940,31941],{"class":1952},[102,47942,31944],{"class":112},[102,47944,47945],{"class":104,"line":1636},[102,47946,47947],{"class":171},"    # 导入自己的数据集，并进行数据处理\n",[102,47949,47950],{"class":104,"line":1642},[102,47951,47952],{"class":171},"    # 定义数据集的路径\n",[102,47954,47955,47958,47960,47962,47964,47966,47970],{"class":104,"line":1663},[102,47956,47957],{"class":161},"    ROOT_PATH",[102,47959,158],{"class":108},[102,47961,783],{"class":108},[102,47963,364],{"class":217},[102,47965,671],{"class":161},[102,47967,47969],{"class":47968},"sA_wV","\u002Fdata\u002Ftrain",[102,47971,25124],{"class":217},[102,47973,47974],{"class":104,"line":1668},[102,47975,2389],{"emptyLinePlaceholder":30},[102,47977,47978],{"class":104,"line":1682},[102,47979,47980],{"class":171},"    # 定义归一化方法\n",[102,47982,47983],{"class":104,"line":1687},[102,47984,47985],{"class":171},"    # 这里需要先计算一下数据集的均值和方差\n",[102,47987,47988],{"class":104,"line":1716},[102,47989,47990],{"class":171},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[102,47992,47993],{"class":104,"line":1721},[102,47994,47995],{"class":171},"    # 第一个参数是均值，第二个参数是方差\n",[102,47997,47998,48001,48003,48006,48009,48011,48014,48016,48019,48022,48025,48027,48030,48032,48035],{"class":104,"line":1738},[102,47999,48000],{"class":112},"    normalize",[102,48002,158],{"class":108},[102,48004,48005],{"class":112},"transforms.Normalize([",[102,48007,48008],{"class":161},"0.162",[102,48010,491],{"class":112},[102,48012,48013],{"class":161},"0.151",[102,48015,491],{"class":112},[102,48017,48018],{"class":161},"0.138",[102,48020,48021],{"class":112},"],[",[102,48023,48024],{"class":161},"0.058",[102,48026,491],{"class":112},[102,48028,48029],{"class":161},"0.052",[102,48031,491],{"class":112},[102,48033,48034],{"class":161},"0.048",[102,48036,4646],{"class":112},[102,48038,48039],{"class":104,"line":1743},[102,48040,48041],{"class":171},"    # 定义数据集处理方法变量\n",[102,48043,48044,48047,48049],{"class":104,"line":1748},[102,48045,48046],{"class":112},"    train_transform",[102,48048,158],{"class":108},[102,48050,48051],{"class":112},"transforms.Compose([\n",[102,48053,48054],{"class":104,"line":1753},[102,48055,48056],{"class":171},"        # 调整图像大小为224*224\n",[102,48058,48059,48062,48064,48066,48068],{"class":104,"line":1767},[102,48060,48061],{"class":112},"        transforms.Resize((",[102,48063,31492],{"class":161},[102,48065,491],{"class":112},[102,48067,31492],{"class":161},[102,48069,42613],{"class":112},[102,48071,48072],{"class":104,"line":1772},[102,48073,48074],{"class":171},"        # 将图像转换为张量\n",[102,48076,48077],{"class":104,"line":2566},[102,48078,48079],{"class":112},"        transforms.ToTensor(),\n",[102,48081,48082],{"class":104,"line":2580},[102,48083,48084],{"class":112},"        normalize])\n",[102,48086,48087],{"class":104,"line":2588},[102,48088,48089],{"class":171},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[102,48091,48092],{"class":104,"line":2593},[102,48093,48094],{"class":171},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[102,48096,48097],{"class":104,"line":2599},[102,48098,2389],{"emptyLinePlaceholder":30},[102,48100,48101],{"class":104,"line":2605},[102,48102,48103],{"class":171},"    # 加载数据集\n",[102,48105,48106],{"class":104,"line":2610},[102,48107,48108],{"class":171},"    # 传入数据集路径与处理方法\n",[102,48110,48111,48113,48115,48118,48121,48123,48126,48128],{"class":104,"line":7938},[102,48112,31949],{"class":112},[102,48114,158],{"class":108},[102,48116,48117],{"class":112},"ImageFolder(",[102,48119,48120],{"class":161},"ROOT_PATH",[102,48122,491],{"class":112},[102,48124,48125],{"class":5206},"transform",[102,48127,158],{"class":108},[102,48129,48130],{"class":112},"train_transform)\n",[102,48132,48133],{"class":104,"line":7962},[102,48134,2389],{"emptyLinePlaceholder":30},[102,48136,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157,48159,48161,48163,48165],{"class":104,"line":7967},[102,48138,32001],{"class":112},[102,48140,158],{"class":108},[102,48142,32006],{"class":112},[102,48144,32009],{"class":161},[102,48146,113],{"class":112},[102,48148,32014],{"class":161},[102,48150,568],{"class":108},[102,48152,7348],{"class":161},[102,48154,32021],{"class":112},[102,48156,32009],{"class":161},[102,48158,113],{"class":112},[102,48160,32028],{"class":161},[102,48162,568],{"class":108},[102,48164,7348],{"class":161},[102,48166,32035],{"class":112},[102,48168,48169,48171,48173,48175,48177,48179],{"class":104,"line":7973},[102,48170,32040],{"class":112},[102,48172,158],{"class":108},[102,48174,32045],{"class":112},[102,48176,31528],{"class":5206},[102,48178,158],{"class":108},[102,48180,31533],{"class":112},[102,48182,48183,48185,48187,48189],{"class":104,"line":8000},[102,48184,32056],{"class":5206},[102,48186,158],{"class":108},[102,48188,310],{"class":161},[102,48190,31457],{"class":112},[102,48192,48193,48195,48197,48199],{"class":104,"line":8005},[102,48194,32068],{"class":5206},[102,48196,158],{"class":108},[102,48198,31467],{"class":161},[102,48200,31457],{"class":112},[102,48202,48203],{"class":104,"line":8011},[102,48204,32079],{"class":171},[102,48206,48207,48209,48211,48213],{"class":104,"line":8023},[102,48208,32084],{"class":5206},[102,48210,158],{"class":108},[102,48212,508],{"class":161},[102,48214,119],{"class":112},[102,48216,48217,48219,48221,48223,48225,48227],{"class":104,"line":8035},[102,48218,32095],{"class":112},[102,48220,158],{"class":108},[102,48222,31525],{"class":112},[102,48224,31528],{"class":5206},[102,48226,158],{"class":108},[102,48228,32106],{"class":112},[102,48230,48231,48233,48235,48237],{"class":104,"line":8047},[102,48232,32111],{"class":5206},[102,48234,158],{"class":108},[102,48236,310],{"class":161},[102,48238,31457],{"class":112},[102,48240,48241,48243,48245,48247],{"class":104,"line":9706},[102,48242,32122],{"class":5206},[102,48244,158],{"class":108},[102,48246,31467],{"class":161},[102,48248,31457],{"class":112},[102,48250,48251,48253,48255,48257],{"class":104,"line":9731},[102,48252,32133],{"class":5206},[102,48254,158],{"class":108},[102,48256,508],{"class":161},[102,48258,119],{"class":112},[102,48260,48261,48263],{"class":104,"line":9754},[102,48262,4079],{"class":108},[102,48264,32146],{"class":112},[102,48266,48267],{"class":104,"line":9778},[102,48268,2389],{"emptyLinePlaceholder":30},[102,48270,48271],{"class":104,"line":9783},[102,48272,32155],{"class":171},[102,48274,48275],{"class":104,"line":9788},[102,48276,32160],{"class":171},[102,48278,48279],{"class":104,"line":9793},[102,48280,2389],{"emptyLinePlaceholder":30},[102,48282,48283],{"class":104,"line":9802},[102,48284,32169],{"class":171},[102,48286,48287,48289,48291],{"class":104,"line":9807},[102,48288,31938],{"class":108},[102,48290,32176],{"class":1952},[102,48292,32179],{"class":112},[102,48294,48295,48297,48299,48301,48303,48305,48307,48309,48311],{"class":104,"line":9813},[102,48296,31228],{"class":112},[102,48298,158],{"class":108},[102,48300,30442],{"class":112},[102,48302,31235],{"class":217},[102,48304,1693],{"class":108},[102,48306,31240],{"class":112},[102,48308,1690],{"class":108},[102,48310,32198],{"class":217},[102,48312,119],{"class":112},[102,48314,48315],{"class":104,"line":9834},[102,48316,2389],{"emptyLinePlaceholder":30},[102,48318,48319],{"class":104,"line":9840},[102,48320,32213],{"class":171},[102,48322,48323],{"class":104,"line":9854},[102,48324,32218],{"class":171},[102,48326,48327],{"class":104,"line":9860},[102,48328,32223],{"class":171},[102,48330,48331,48333,48335,48337,48339,48341,48343],{"class":104,"line":9887},[102,48332,32228],{"class":112},[102,48334,158],{"class":108},[102,48336,32233],{"class":112},[102,48338,32236],{"class":5206},[102,48340,158],{"class":108},[102,48342,32241],{"class":161},[102,48344,119],{"class":112},[102,48346,48347],{"class":104,"line":9896},[102,48348,2389],{"emptyLinePlaceholder":30},[102,48350,48351],{"class":104,"line":9902},[102,48352,32252],{"class":171},[102,48354,48355,48357,48359],{"class":104,"line":9910},[102,48356,32257],{"class":112},[102,48358,158],{"class":108},[102,48360,32262],{"class":112},[102,48362,48363],{"class":104,"line":9915},[102,48364,2389],{"emptyLinePlaceholder":30},[102,48366,48367],{"class":104,"line":16594},[102,48368,32271],{"class":171},[102,48370,48371,48373,48375],{"class":104,"line":16600},[102,48372,31280],{"class":112},[102,48374,158],{"class":108},[102,48376,32280],{"class":112},[102,48378,48379],{"class":104,"line":16623},[102,48380,32285],{"class":171},[102,48382,48383],{"class":104,"line":16629},[102,48384,32290],{"class":171},[102,48386,48387],{"class":104,"line":16652},[102,48388,32295],{"class":171},[102,48390,48391,48393,48395],{"class":104,"line":16666},[102,48392,32300],{"class":112},[102,48394,158],{"class":108},[102,48396,32305],{"class":112},[102,48398,48399],{"class":104,"line":16686},[102,48400,2389],{"emptyLinePlaceholder":30},[102,48402,48403],{"class":104,"line":16692},[102,48404,32318],{"class":171},[102,48406,48407],{"class":104,"line":16703},[102,48408,32323],{"class":171},[102,48410,48411,48413,48415],{"class":104,"line":16726},[102,48412,32328],{"class":112},[102,48414,158],{"class":108},[102,48416,32333],{"class":161},[102,48418,48419],{"class":104,"line":16748},[102,48420,32338],{"class":171},[102,48422,48423,48425,48427],{"class":104,"line":16753},[102,48424,32343],{"class":112},[102,48426,158],{"class":108},[102,48428,32348],{"class":112},[102,48430,48431],{"class":104,"line":16759},[102,48432,32353],{"class":171},[102,48434,48435,48437,48439],{"class":104,"line":16773},[102,48436,32358],{"class":112},[102,48438,158],{"class":108},[102,48440,32348],{"class":112},[102,48442,48443],{"class":104,"line":16786},[102,48444,32367],{"class":171},[102,48446,48447,48449,48451],{"class":104,"line":16791},[102,48448,32372],{"class":112},[102,48450,158],{"class":108},[102,48452,32348],{"class":112},[102,48454,48455],{"class":104,"line":16805},[102,48456,32381],{"class":171},[102,48458,48459,48461,48463],{"class":104,"line":16810},[102,48460,32386],{"class":112},[102,48462,158],{"class":108},[102,48464,32348],{"class":112},[102,48466,48467],{"class":104,"line":16816},[102,48468,2389],{"emptyLinePlaceholder":30},[102,48470,48471],{"class":104,"line":16821},[102,48472,32399],{"class":171},[102,48474,48475,48477,48479],{"class":104,"line":16835},[102,48476,32404],{"class":112},[102,48478,158],{"class":108},[102,48480,32409],{"class":112},[102,48482,48483],{"class":104,"line":16840},[102,48484,2389],{"emptyLinePlaceholder":30},[102,48486,48487],{"class":104,"line":16845},[102,48488,32422],{"class":171},[102,48490,48491,48493,48495,48497,48499],{"class":104,"line":16859},[102,48492,3190],{"class":108},[102,48494,32429],{"class":112},[102,48496,26034],{"class":108},[102,48498,32434],{"class":161},[102,48500,32437],{"class":112},[102,48502,48503,48505,48507,48509,48511,48513,48515,48517,48519,48521,48523],{"class":104,"line":16871},[102,48504,32442],{"class":161},[102,48506,113],{"class":112},[102,48508,32447],{"class":217},[102,48510,32450],{"class":161},[102,48512,697],{"class":217},[102,48514,32450],{"class":161},[102,48516,364],{"class":217},[102,48518,32459],{"class":112},[102,48520,645],{"class":108},[102,48522,330],{"class":161},[102,48524,30488],{"class":112},[102,48526,48527,48529,48531,48533,48535,48537],{"class":104,"line":16876},[102,48528,32442],{"class":161},[102,48530,113],{"class":112},[102,48532,32474],{"class":217},[102,48534,568],{"class":108},[102,48536,559],{"class":161},[102,48538,119],{"class":112},[102,48540,48541],{"class":104,"line":16889},[102,48542,2389],{"emptyLinePlaceholder":30},[102,48544,48545],{"class":104,"line":16894},[102,48546,32489],{"class":171},[102,48548,48549],{"class":104,"line":16899},[102,48550,32494],{"class":171},[102,48552,48553,48555,48557],{"class":104,"line":16904},[102,48554,32499],{"class":112},[102,48556,158],{"class":108},[102,48558,32333],{"class":161},[102,48560,48561],{"class":104,"line":16917},[102,48562,32508],{"class":171},[102,48564,48565,48567,48569],{"class":104,"line":16922},[102,48566,32513],{"class":112},[102,48568,158],{"class":108},[102,48570,3074],{"class":161},[102,48572,48573],{"class":104,"line":32624},[102,48574,32522],{"class":171},[102,48576,48577,48579,48581],{"class":104,"line":32630},[102,48578,32527],{"class":112},[102,48580,158],{"class":108},[102,48582,32333],{"class":161},[102,48584,48585],{"class":104,"line":32636},[102,48586,32536],{"class":171},[102,48588,48589,48591,48593],{"class":104,"line":32642},[102,48590,32541],{"class":112},[102,48592,158],{"class":108},[102,48594,3074],{"class":161},[102,48596,48597],{"class":104,"line":32648},[102,48598,32550],{"class":171},[102,48600,48601,48603,48605],{"class":104,"line":32659},[102,48602,32555],{"class":112},[102,48604,158],{"class":108},[102,48606,3074],{"class":161},[102,48608,48609],{"class":104,"line":32665},[102,48610,32564],{"class":171},[102,48612,48613,48615,48617],{"class":104,"line":32685},[102,48614,32569],{"class":112},[102,48616,158],{"class":108},[102,48618,3074],{"class":161},[102,48620,48621],{"class":104,"line":32691},[102,48622,32578],{"class":171},[102,48624,48625,48627,48629,48631,48633],{"class":104,"line":32702},[102,48626,3392],{"class":108},[102,48628,31592],{"class":112},[102,48630,26034],{"class":108},[102,48632,31597],{"class":161},[102,48634,32591],{"class":112},[102,48636,48637],{"class":104,"line":32708},[102,48638,32596],{"class":171},[102,48640,48641,48643,48645],{"class":104,"line":32714},[102,48642,32601],{"class":112},[102,48644,158],{"class":108},[102,48646,32606],{"class":112},[102,48648,48649],{"class":104,"line":32720},[102,48650,32611],{"class":171},[102,48652,48653,48655,48657],{"class":104,"line":32726},[102,48654,32616],{"class":112},[102,48656,158],{"class":108},[102,48658,32621],{"class":112},[102,48660,48661],{"class":104,"line":32732},[102,48662,32627],{"class":171},[102,48664,48665],{"class":104,"line":32738},[102,48666,32633],{"class":112},[102,48668,48669],{"class":104,"line":32744},[102,48670,32639],{"class":171},[102,48672,48673],{"class":104,"line":32764},[102,48674,32645],{"class":171},[102,48676,48677,48679,48681],{"class":104,"line":32770},[102,48678,32651],{"class":112},[102,48680,158],{"class":108},[102,48682,32656],{"class":112},[102,48684,48685],{"class":104,"line":32786},[102,48686,32662],{"class":171},[102,48688,48689,48691,48693,48695,48697,48699,48701],{"class":104,"line":32792},[102,48690,32668],{"class":112},[102,48692,158],{"class":108},[102,48694,32673],{"class":112},[102,48696,32676],{"class":5206},[102,48698,158],{"class":108},[102,48700,330],{"class":161},[102,48702,119],{"class":112},[102,48704,48705],{"class":104,"line":32806},[102,48706,32688],{"class":171},[102,48708,48709,48711,48713],{"class":104,"line":32812},[102,48710,32694],{"class":112},[102,48712,158],{"class":108},[102,48714,32699],{"class":112},[102,48716,48717],{"class":104,"line":32827},[102,48718,32705],{"class":171},[102,48720,48721],{"class":104,"line":32833},[102,48722,32711],{"class":112},[102,48724,48725],{"class":104,"line":32842},[102,48726,32717],{"class":171},[102,48728,48729],{"class":104,"line":32848},[102,48730,32723],{"class":112},[102,48732,48733],{"class":104,"line":32857},[102,48734,32729],{"class":171},[102,48736,48737],{"class":104,"line":32863},[102,48738,32735],{"class":112},[102,48740,48741],{"class":104,"line":32869},[102,48742,32741],{"class":171},[102,48744,48745,48747,48749,48751,48753,48755,48757],{"class":104,"line":32878},[102,48746,32747],{"class":112},[102,48748,9467],{"class":108},[102,48750,32752],{"class":112},[102,48752,568],{"class":108},[102,48754,32757],{"class":112},[102,48756,304],{"class":161},[102,48758,119],{"class":112},[102,48760,48761],{"class":104,"line":32884},[102,48762,32767],{"class":171},[102,48764,48765,48767,48769,48771,48773],{"class":104,"line":32895},[102,48766,32773],{"class":112},[102,48768,9467],{"class":108},[102,48770,32778],{"class":112},[102,48772,2938],{"class":108},[102,48774,32783],{"class":112},[102,48776,48777],{"class":104,"line":32901},[102,48778,32789],{"class":171},[102,48780,48781,48783,48785,48787,48789],{"class":104,"line":32920},[102,48782,32795],{"class":112},[102,48784,9467],{"class":108},[102,48786,32757],{"class":112},[102,48788,304],{"class":161},[102,48790,119],{"class":112},[102,48792,48793],{"class":104,"line":32926},[102,48794,32809],{"class":171},[102,48796,48797,48799,48801,48803,48805],{"class":104,"line":32937},[102,48798,3392],{"class":108},[102,48800,32817],{"class":112},[102,48802,26034],{"class":108},[102,48804,31597],{"class":161},[102,48806,32824],{"class":112},[102,48808,48809],{"class":104,"line":32943},[102,48810,32830],{"class":171},[102,48812,48813,48815,48817],{"class":104,"line":32963},[102,48814,32601],{"class":112},[102,48816,158],{"class":108},[102,48818,32606],{"class":112},[102,48820,48821],{"class":104,"line":32979},[102,48822,32845],{"class":171},[102,48824,48825,48827,48829],{"class":104,"line":32985},[102,48826,32616],{"class":112},[102,48828,158],{"class":108},[102,48830,32621],{"class":112},[102,48832,48833],{"class":104,"line":32999},[102,48834,32860],{"class":171},[102,48836,48837],{"class":104,"line":33005},[102,48838,32866],{"class":112},[102,48840,48841],{"class":104,"line":33011},[102,48842,36347],{"class":171},[102,48844,48845,48847],{"class":104,"line":33022},[102,48846,32872],{"class":108},[102,48848,32875],{"class":112},[102,48850,48851],{"class":104,"line":33028},[102,48852,32881],{"class":171},[102,48854,48855,48857,48859],{"class":104,"line":33034},[102,48856,36362],{"class":112},[102,48858,158],{"class":108},[102,48860,32656],{"class":112},[102,48862,48863],{"class":104,"line":33044},[102,48864,32898],{"class":171},[102,48866,48867,48869,48871,48873,48875,48877,48879],{"class":104,"line":33050},[102,48868,36375],{"class":112},[102,48870,158],{"class":108},[102,48872,32673],{"class":112},[102,48874,32676],{"class":5206},[102,48876,158],{"class":108},[102,48878,330],{"class":161},[102,48880,119],{"class":112},[102,48882,48883],{"class":104,"line":33061},[102,48884,32923],{"class":171},[102,48886,48887,48889,48891],{"class":104,"line":33067},[102,48888,36396],{"class":112},[102,48890,158],{"class":108},[102,48892,32699],{"class":112},[102,48894,48895],{"class":104,"line":33077},[102,48896,32940],{"class":171},[102,48898,48899,48901,48903,48905,48907,48909,48911],{"class":104,"line":33082},[102,48900,36409],{"class":112},[102,48902,9467],{"class":108},[102,48904,36414],{"class":112},[102,48906,568],{"class":108},[102,48908,32757],{"class":112},[102,48910,304],{"class":161},[102,48912,119],{"class":112},[102,48914,48915,48917,48919,48921,48923],{"class":104,"line":33088},[102,48916,36427],{"class":112},[102,48918,9467],{"class":108},[102,48920,32778],{"class":112},[102,48922,2938],{"class":108},[102,48924,32783],{"class":112},[102,48926,48927],{"class":104,"line":33137},[102,48928,36440],{"class":171},[102,48930,48931,48933,48935,48937,48939],{"class":104,"line":33184},[102,48932,36445],{"class":112},[102,48934,9467],{"class":108},[102,48936,32757],{"class":112},[102,48938,304],{"class":161},[102,48940,119],{"class":112},[102,48942,48943],{"class":104,"line":33189},[102,48944,33002],{"class":171},[102,48946,48947],{"class":104,"line":33195},[102,48948,33008],{"class":171},[102,48950,48951,48953,48955],{"class":104,"line":33214},[102,48952,33014],{"class":112},[102,48954,697],{"class":108},[102,48956,33019],{"class":112},[102,48958,48959],{"class":104,"line":33220},[102,48960,33025],{"class":171},[102,48962,48963],{"class":104,"line":33240},[102,48964,33031],{"class":171},[102,48966,48967,48969,48971],{"class":104,"line":33246},[102,48968,33037],{"class":112},[102,48970,697],{"class":108},[102,48972,33019],{"class":112},[102,48974,48975],{"class":104,"line":33252},[102,48976,33047],{"class":171},[102,48978,48979,48981,48983],{"class":104,"line":33262},[102,48980,33053],{"class":112},[102,48982,697],{"class":108},[102,48984,33058],{"class":112},[102,48986,48987],{"class":104,"line":33267},[102,48988,33064],{"class":171},[102,48990,48991,48993,48995],{"class":104,"line":33273},[102,48992,33070],{"class":112},[102,48994,697],{"class":108},[102,48996,33058],{"class":112},[102,48998,48999],{"class":104,"line":33289},[102,49000,2389],{"emptyLinePlaceholder":30},[102,49002,49003],{"class":104,"line":33334},[102,49004,33085],{"class":171},[102,49006,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035,49037,49039,49041,49043,49045],{"class":104,"line":33340},[102,49008,32442],{"class":161},[102,49010,113],{"class":112},[102,49012,3581],{"class":217},[102,49014,32450],{"class":161},[102,49016,33099],{"class":217},[102,49018,1009],{"class":161},[102,49020,33104],{"class":108},[102,49022,1059],{"class":161},[102,49024,33109],{"class":217},[102,49026,1009],{"class":161},[102,49028,33104],{"class":108},[102,49030,1059],{"class":161},[102,49032,3581],{"class":217},[102,49034,33120],{"class":112},[102,49036,645],{"class":108},[102,49038,330],{"class":161},[102,49040,33127],{"class":112},[102,49042,645],{"class":108},[102,49044,330],{"class":161},[102,49046,33134],{"class":112},[102,49048,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079,49081,49083,49085,49087],{"class":104,"line":33346},[102,49050,32442],{"class":161},[102,49052,113],{"class":112},[102,49054,3581],{"class":217},[102,49056,32450],{"class":161},[102,49058,33148],{"class":217},[102,49060,1009],{"class":161},[102,49062,33104],{"class":108},[102,49064,1059],{"class":161},[102,49066,33157],{"class":217},[102,49068,1009],{"class":161},[102,49070,33104],{"class":108},[102,49072,1059],{"class":161},[102,49074,3581],{"class":217},[102,49076,33168],{"class":112},[102,49078,645],{"class":108},[102,49080,330],{"class":161},[102,49082,33175],{"class":112},[102,49084,645],{"class":108},[102,49086,330],{"class":161},[102,49088,33134],{"class":112},[102,49090,49091],{"class":104,"line":33352},[102,49092,2389],{"emptyLinePlaceholder":30},[102,49094,49095],{"class":104,"line":33363},[102,49096,33192],{"class":171},[102,49098,49099,49101,49103,49105,49107,49109,49111],{"class":104,"line":33369},[102,49100,2486],{"class":108},[102,49102,33200],{"class":112},[102,49104,645],{"class":108},[102,49106,330],{"class":161},[102,49108,1053],{"class":112},[102,49110,1073],{"class":108},[102,49112,33211],{"class":112},[102,49114,49115],{"class":104,"line":33375},[102,49116,33217],{"class":171},[102,49118,49119,49121,49123,49125,49127,49129,49131],{"class":104,"line":33381},[102,49120,33223],{"class":112},[102,49122,152],{"class":161},[102,49124,158],{"class":108},[102,49126,33230],{"class":112},[102,49128,645],{"class":108},[102,49130,330],{"class":161},[102,49132,33237],{"class":112},[102,49134,49135],{"class":104,"line":33399},[102,49136,33243],{"class":171},[102,49138,49139],{"class":104,"line":33413},[102,49140,33249],{"class":171},[102,49142,49143,49145,49147],{"class":104,"line":33422},[102,49144,33255],{"class":112},[102,49146,158],{"class":108},[102,49148,32305],{"class":112},[102,49150,49151],{"class":104,"line":33431},[102,49152,2389],{"emptyLinePlaceholder":30},[102,49154,49155],{"class":104,"line":33440},[102,49156,33270],{"class":171},[102,49158,49159,49161,49163,49165,49167],{"class":104,"line":33449},[102,49160,33276],{"class":112},[102,49162,158],{"class":108},[102,49164,33281],{"class":112},[102,49166,645],{"class":108},[102,49168,33286],{"class":112},[102,49170,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199,49201,49203,49205],{"class":104,"line":33455},[102,49172,32442],{"class":161},[102,49174,113],{"class":112},[102,49176,33296],{"class":217},[102,49178,1009],{"class":161},[102,49180,33301],{"class":108},[102,49182,1059],{"class":161},[102,49184,657],{"class":217},[102,49186,1009],{"class":161},[102,49188,33301],{"class":108},[102,49190,1059],{"class":161},[102,49192,33314],{"class":217},[102,49194,33317],{"class":112},[102,49196,33320],{"class":108},[102,49198,1020],{"class":161},[102,49200,33325],{"class":112},[102,49202,441],{"class":108},[102,49204,1020],{"class":161},[102,49206,30488],{"class":112},[102,49208,49209],{"class":104,"line":33461},[102,49210,36724],{"class":171},[102,49212,49213],{"class":104,"line":33469},[102,49214,36729],{"class":171},[102,49216,49217,49219,49221],{"class":104,"line":33474},[102,49218,36734],{"class":112},[102,49220,33358],{"class":217},[102,49222,119],{"class":112},[102,49224,49225],{"class":104,"line":33480},[102,49226,33378],{"class":171},[102,49228,49229,49231,49233,49235,49237,49239],{"class":104,"line":33491},[102,49230,33384],{"class":112},[102,49232,158],{"class":108},[102,49234,33389],{"class":112},[102,49236,33392],{"class":5206},[102,49238,158],{"class":108},[102,49240,1535],{"class":112},[102,49242,49243,49245,49247,49249],{"class":104,"line":33497},[102,49244,33402],{"class":217},[102,49246,972],{"class":112},[102,49248,33407],{"class":161},[102,49250,33410],{"class":112},[102,49252,49253,49255],{"class":104,"line":33517},[102,49254,33416],{"class":217},[102,49256,33419],{"class":112},[102,49258,49259,49261],{"class":104,"line":33523},[102,49260,33425],{"class":217},[102,49262,33428],{"class":112},[102,49264,49265,49267],{"class":104,"line":33529},[102,49266,33434],{"class":217},[102,49268,33437],{"class":112},[102,49270,49271,49273],{"class":104,"line":33535},[102,49272,33443],{"class":217},[102,49274,33446],{"class":112},[102,49276,49277],{"class":104,"line":33552},[102,49278,33452],{"class":112},[102,49280,49281],{"class":104,"line":33558},[102,49282,33458],{"class":171},[102,49284,49285,49287],{"class":104,"line":33564},[102,49286,4079],{"class":108},[102,49288,33466],{"class":112},[102,49290,49291],{"class":104,"line":33570},[102,49292,2389],{"emptyLinePlaceholder":30},[102,49294,49295],{"class":104,"line":33576},[102,49296,33477],{"class":171},[102,49298,49299,49301,49303],{"class":104,"line":33582},[102,49300,31938],{"class":108},[102,49302,33485],{"class":1952},[102,49304,33488],{"class":112},[102,49306,49307],{"class":104,"line":33609},[102,49308,33494],{"class":171},[102,49310,49311,49313,49315,49317,49319,49321,49323,49325],{"class":104,"line":33633},[102,49312,33500],{"class":112},[102,49314,31684],{"class":5206},[102,49316,158],{"class":108},[102,49318,113],{"class":112},[102,49320,611],{"class":161},[102,49322,491],{"class":112},[102,49324,406],{"class":161},[102,49326,30488],{"class":112},[102,49328,49329],{"class":104,"line":33639},[102,49330,33520],{"class":171},[102,49332,49333],{"class":104,"line":33645},[102,49334,33526],{"class":171},[102,49336,49337],{"class":104,"line":33651},[102,49338,33532],{"class":171},[102,49340,49341,49343,49345,49347,49349,49351,49353],{"class":104,"line":33662},[102,49342,31718],{"class":112},[102,49344,330],{"class":161},[102,49346,491],{"class":112},[102,49348,190],{"class":161},[102,49350,491],{"class":112},[102,49352,330],{"class":161},[102,49354,119],{"class":112},[102,49356,49357],{"class":104,"line":33673},[102,49358,33555],{"class":171},[102,49360,49361],{"class":104,"line":33679},[102,49362,33561],{"class":171},[102,49364,49365],{"class":104,"line":33696},[102,49366,33567],{"class":171},[102,49368,49369],{"class":104,"line":33719},[102,49370,33573],{"class":171},[102,49372,49373],{"class":104,"line":33742},[102,49374,33579],{"class":171},[102,49376,49377,49379,49381,49383,49385,49387,49389,49391,49393],{"class":104,"line":33748},[102,49378,33585],{"class":112},[102,49380,33588],{"class":217},[102,49382,33591],{"class":112},[102,49384,33594],{"class":217},[102,49386,491],{"class":112},[102,49388,33599],{"class":5206},[102,49390,158],{"class":108},[102,49392,33604],{"class":217},[102,49394,119],{"class":112},[102,49396,49397,49399,49401,49403,49405,49407,49409,49411,49413],{"class":104,"line":33753},[102,49398,33585],{"class":112},[102,49400,33588],{"class":217},[102,49402,33616],{"class":112},[102,49404,33619],{"class":217},[102,49406,491],{"class":112},[102,49408,33599],{"class":5206},[102,49410,158],{"class":108},[102,49412,33628],{"class":217},[102,49414,119],{"class":112},[102,49416,49417],{"class":104,"line":33762},[102,49418,33636],{"class":171},[102,49420,49421],{"class":104,"line":33772},[102,49422,33642],{"class":112},[102,49424,49425],{"class":104,"line":33778},[102,49426,33648],{"class":171},[102,49428,49429,49431,49433],{"class":104,"line":33783},[102,49430,33654],{"class":112},[102,49432,33657],{"class":217},[102,49434,119],{"class":112},[102,49436,49437,49439,49441],{"class":104,"line":33789},[102,49438,33665],{"class":112},[102,49440,33668],{"class":217},[102,49442,119],{"class":112},[102,49444,49445],{"class":104,"line":33802},[102,49446,33676],{"class":171},[102,49448,49449,49451,49453,49455,49457,49459,49461],{"class":104,"line":33808},[102,49450,31718],{"class":112},[102,49452,330],{"class":161},[102,49454,491],{"class":112},[102,49456,190],{"class":161},[102,49458,491],{"class":112},[102,49460,190],{"class":161},[102,49462,119],{"class":112},[102,49464,49465,49467,49469,49471,49473,49475,49477,49479,49481],{"class":104,"line":33819},[102,49466,33585],{"class":112},[102,49468,33588],{"class":217},[102,49470,33703],{"class":112},[102,49472,33594],{"class":217},[102,49474,491],{"class":112},[102,49476,33599],{"class":5206},[102,49478,158],{"class":108},[102,49480,33714],{"class":217},[102,49482,119],{"class":112},[102,49484,49485,49487,49489,49491,49493,49495,49497,49499,49501],{"class":104,"line":33830},[102,49486,33585],{"class":112},[102,49488,33588],{"class":217},[102,49490,33726],{"class":112},[102,49492,33619],{"class":217},[102,49494,491],{"class":112},[102,49496,33599],{"class":5206},[102,49498,158],{"class":108},[102,49500,33737],{"class":217},[102,49502,119],{"class":112},[102,49504,49505],{"class":104,"line":33849},[102,49506,33745],{"class":171},[102,49508,49510],{"class":104,"line":49509},219,[102,49511,33642],{"class":112},[102,49513,49515,49517,49519],{"class":104,"line":49514},220,[102,49516,33654],{"class":112},[102,49518,33588],{"class":217},[102,49520,119],{"class":112},[102,49522,49524,49526,49528],{"class":104,"line":49523},221,[102,49525,33665],{"class":112},[102,49527,33767],{"class":217},[102,49529,119],{"class":112},[102,49531,49533],{"class":104,"line":49532},222,[102,49534,33775],{"class":112},[102,49536,49538],{"class":104,"line":49537},223,[102,49539,2389],{"emptyLinePlaceholder":30},[102,49541,49543],{"class":104,"line":49542},224,[102,49544,33786],{"class":171},[102,49546,49548,49550,49552,49554,49556],{"class":104,"line":49547},225,[102,49549,1520],{"class":108},[102,49551,31211],{"class":161},[102,49553,2938],{"class":108},[102,49555,31216],{"class":217},[102,49557,3728],{"class":112},[102,49559,49561],{"class":104,"line":49560},226,[102,49562,33805],{"class":171},[102,49564,49566,49568,49570],{"class":104,"line":49565},227,[102,49567,44537],{"class":112},[102,49569,158],{"class":108},[102,49571,44542],{"class":112},[102,49573,49575,49577,49579],{"class":104,"line":49574},228,[102,49576,33822],{"class":112},[102,49578,158],{"class":108},[102,49580,33827],{"class":112},[102,49582,49584,49586,49588,49590,49592,49594,49596],{"class":104,"line":49583},229,[102,49585,33384],{"class":112},[102,49587,158],{"class":108},[102,49589,44559],{"class":112},[102,49591,33840],{"class":5206},[102,49593,158],{"class":108},[102,49595,1020],{"class":161},[102,49597,119],{"class":112},[102,49599,49601],{"class":104,"line":49600},230,[102,49602,33852],{"class":112},[21988,49604,49606],{"id":49605},"_242测试代码","2.4.2.测试代码",[19,49608,49609],{},"使用测试集进行测试与推理",[93,49611,49613],{"className":30369,"code":49612,"language":30371,"meta":23,"style":23},"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",[99,49614,49615,49621,49631,49641,49652,49662,49666,49670,49678,49683,49687,49704,49708,49712,49716,49720,49724,49756,49760,49768,49772,49784,49788,49792,49796,49800,49804,49808,49812,49816,49834,49848,49852,49862,49872,49882,49888,49892,49896,49904,49908,49924,49932,49936,49940,49948,49956,49960,49964,49968,49972,49978,49982,49992,50000,50008,50012,50016,50020,50028,50032,50048,50052,50056,50060,50072,50076,50088,50092,50096,50108,50112,50122,50126,50130,50142,50146,50154,50158,50162,50170,50174,50182,50186,50190,50194,50198,50202,50218,50226,50230,50234,50252,50258,50262,50272,50280,50288,50292,50296,50300,50304,50312,50316,50332,50336,50344,50352],{"__ignoreMap":23},[102,49616,49617,49619],{"class":104,"line":105},[102,49618,30383],{"class":108},[102,49620,30386],{"class":112},[102,49622,49623,49625,49627,49629],{"class":104,"line":24},[102,49624,30383],{"class":108},[102,49626,31406],{"class":112},[102,49628,31374],{"class":108},[102,49630,31411],{"class":112},[102,49632,49633,49635,49637,49639],{"class":104,"line":1168},[102,49634,30728],{"class":108},[102,49636,31389],{"class":112},[102,49638,30383],{"class":108},[102,49640,31394],{"class":112},[102,49642,49643,49645,49647,49649],{"class":104,"line":1183},[102,49644,30728],{"class":108},[102,49646,31359],{"class":112},[102,49648,30383],{"class":108},[102,49650,49651],{"class":112}," ImageFolder\n",[102,49653,49654,49656,49658,49660],{"class":104,"line":1189},[102,49655,30728],{"class":108},[102,49657,31905],{"class":112},[102,49659,30383],{"class":108},[102,49661,44631],{"class":112},[102,49663,49664],{"class":104,"line":1203},[102,49665,2389],{"emptyLinePlaceholder":30},[102,49667,49668],{"class":104,"line":1209},[102,49669,33942],{"class":171},[102,49671,49672,49674,49676],{"class":104,"line":1300},[102,49673,31938],{"class":108},[102,49675,33949],{"class":1952},[102,49677,31944],{"class":112},[102,49679,49680],{"class":104,"line":1306},[102,49681,49682],{"class":171},"   # 导入自己的数据集，并进行数据处理\n",[102,49684,49685],{"class":104,"line":1318},[102,49686,47952],{"class":171},[102,49688,49689,49691,49693,49695,49697,49699,49702],{"class":104,"line":1601},[102,49690,47957],{"class":161},[102,49692,158],{"class":108},[102,49694,783],{"class":108},[102,49696,364],{"class":217},[102,49698,671],{"class":161},[102,49700,49701],{"class":47968},"\u002Fdata\u002Ftest",[102,49703,25124],{"class":217},[102,49705,49706],{"class":104,"line":1606},[102,49707,2389],{"emptyLinePlaceholder":30},[102,49709,49710],{"class":104,"line":1612},[102,49711,47980],{"class":171},[102,49713,49714],{"class":104,"line":1617},[102,49715,47985],{"class":171},[102,49717,49718],{"class":104,"line":1631},[102,49719,47990],{"class":171},[102,49721,49722],{"class":104,"line":1636},[102,49723,47995],{"class":171},[102,49725,49726,49728,49730,49732,49734,49736,49738,49740,49742,49744,49746,49748,49750,49752,49754],{"class":104,"line":1642},[102,49727,48000],{"class":112},[102,49729,158],{"class":108},[102,49731,48005],{"class":112},[102,49733,48008],{"class":161},[102,49735,491],{"class":112},[102,49737,48013],{"class":161},[102,49739,491],{"class":112},[102,49741,48018],{"class":161},[102,49743,48021],{"class":112},[102,49745,48024],{"class":161},[102,49747,491],{"class":112},[102,49749,48029],{"class":161},[102,49751,491],{"class":112},[102,49753,48034],{"class":161},[102,49755,4646],{"class":112},[102,49757,49758],{"class":104,"line":1663},[102,49759,48041],{"class":171},[102,49761,49762,49764,49766],{"class":104,"line":1668},[102,49763,48046],{"class":112},[102,49765,158],{"class":108},[102,49767,48051],{"class":112},[102,49769,49770],{"class":104,"line":1682},[102,49771,48056],{"class":171},[102,49773,49774,49776,49778,49780,49782],{"class":104,"line":1687},[102,49775,48061],{"class":112},[102,49777,31492],{"class":161},[102,49779,491],{"class":112},[102,49781,31492],{"class":161},[102,49783,42613],{"class":112},[102,49785,49786],{"class":104,"line":1716},[102,49787,48074],{"class":171},[102,49789,49790],{"class":104,"line":1721},[102,49791,48079],{"class":112},[102,49793,49794],{"class":104,"line":1738},[102,49795,48084],{"class":112},[102,49797,49798],{"class":104,"line":1743},[102,49799,48089],{"class":171},[102,49801,49802],{"class":104,"line":1748},[102,49803,48094],{"class":171},[102,49805,49806],{"class":104,"line":1753},[102,49807,2389],{"emptyLinePlaceholder":30},[102,49809,49810],{"class":104,"line":1767},[102,49811,48103],{"class":171},[102,49813,49814],{"class":104,"line":1772},[102,49815,48108],{"class":171},[102,49817,49818,49820,49822,49824,49826,49828,49830,49832],{"class":104,"line":2566},[102,49819,33956],{"class":112},[102,49821,158],{"class":108},[102,49823,48117],{"class":112},[102,49825,48120],{"class":161},[102,49827,491],{"class":112},[102,49829,48125],{"class":5206},[102,49831,158],{"class":108},[102,49833,48130],{"class":112},[102,49835,49836,49838,49840,49842,49844,49846],{"class":104,"line":2580},[102,49837,34013],{"class":112},[102,49839,158],{"class":108},[102,49841,31525],{"class":112},[102,49843,31528],{"class":5206},[102,49845,158],{"class":108},[102,49847,34024],{"class":112},[102,49849,49850],{"class":104,"line":2588},[102,49851,34029],{"class":171},[102,49853,49854,49856,49858,49860],{"class":104,"line":2593},[102,49855,34034],{"class":5206},[102,49857,158],{"class":108},[102,49859,330],{"class":161},[102,49861,31457],{"class":112},[102,49863,49864,49866,49868,49870],{"class":104,"line":2599},[102,49865,34045],{"class":5206},[102,49867,158],{"class":108},[102,49869,31467],{"class":161},[102,49871,31457],{"class":112},[102,49873,49874,49876,49878,49880],{"class":104,"line":2605},[102,49875,34056],{"class":5206},[102,49877,158],{"class":108},[102,49879,304],{"class":161},[102,49881,119],{"class":112},[102,49883,49884,49886],{"class":104,"line":2610},[102,49885,4079],{"class":108},[102,49887,34069],{"class":112},[102,49889,49890],{"class":104,"line":7938},[102,49891,2389],{"emptyLinePlaceholder":30},[102,49893,49894],{"class":104,"line":7962},[102,49895,34078],{"class":171},[102,49897,49898,49900,49902],{"class":104,"line":7967},[102,49899,31938],{"class":108},[102,49901,34085],{"class":1952},[102,49903,34088],{"class":112},[102,49905,49906],{"class":104,"line":7973},[102,49907,34093],{"class":171},[102,49909,49910,49912,49914,49916,49918,49920,49922],{"class":104,"line":8000},[102,49911,31228],{"class":112},[102,49913,158],{"class":108},[102,49915,31235],{"class":217},[102,49917,1693],{"class":108},[102,49919,31240],{"class":112},[102,49921,1690],{"class":108},[102,49923,34110],{"class":217},[102,49925,49926,49928,49930],{"class":104,"line":8005},[102,49927,31280],{"class":112},[102,49929,158],{"class":108},[102,49931,32280],{"class":112},[102,49933,49934],{"class":104,"line":8011},[102,49935,2389],{"emptyLinePlaceholder":30},[102,49937,49938],{"class":104,"line":8023},[102,49939,34127],{"class":171},[102,49941,49942,49944,49946],{"class":104,"line":8035},[102,49943,34132],{"class":112},[102,49945,158],{"class":108},[102,49947,32333],{"class":161},[102,49949,49950,49952,49954],{"class":104,"line":8047},[102,49951,34141],{"class":112},[102,49953,158],{"class":108},[102,49955,3074],{"class":161},[102,49957,49958],{"class":104,"line":9706},[102,49959,2389],{"emptyLinePlaceholder":30},[102,49961,49962],{"class":104,"line":9731},[102,49963,34154],{"class":171},[102,49965,49966],{"class":104,"line":9754},[102,49967,34159],{"class":171},[102,49969,49970],{"class":104,"line":9778},[102,49971,34164],{"class":171},[102,49973,49974,49976],{"class":104,"line":9783},[102,49975,34169],{"class":108},[102,49977,32875],{"class":112},[102,49979,49980],{"class":104,"line":9788},[102,49981,34176],{"class":171},[102,49983,49984,49986,49988,49990],{"class":104,"line":9793},[102,49985,3392],{"class":108},[102,49987,34183],{"class":112},[102,49989,26034],{"class":108},[102,49991,34188],{"class":112},[102,49993,49994,49996,49998],{"class":104,"line":9802},[102,49995,34193],{"class":112},[102,49997,158],{"class":108},[102,49999,34198],{"class":112},[102,50001,50002,50004,50006],{"class":104,"line":9807},[102,50003,34203],{"class":112},[102,50005,158],{"class":108},[102,50007,34208],{"class":112},[102,50009,50010],{"class":104,"line":9813},[102,50011,34213],{"class":171},[102,50013,50014],{"class":104,"line":9834},[102,50015,32866],{"class":112},[102,50017,50018],{"class":104,"line":9840},[102,50019,34222],{"class":171},[102,50021,50022,50024,50026],{"class":104,"line":9854},[102,50023,32651],{"class":112},[102,50025,158],{"class":108},[102,50027,34231],{"class":112},[102,50029,50030],{"class":104,"line":9860},[102,50031,34236],{"class":171},[102,50033,50034,50036,50038,50040,50042,50044,50046],{"class":104,"line":9887},[102,50035,32668],{"class":112},[102,50037,158],{"class":108},[102,50039,32673],{"class":112},[102,50041,32676],{"class":5206},[102,50043,158],{"class":108},[102,50045,330],{"class":161},[102,50047,119],{"class":112},[102,50049,50050],{"class":104,"line":9896},[102,50051,34257],{"class":171},[102,50053,50054],{"class":104,"line":9902},[102,50055,34262],{"class":171},[102,50057,50058],{"class":104,"line":9910},[102,50059,34267],{"class":171},[102,50061,50062,50064,50066,50068,50070],{"class":104,"line":9915},[102,50063,34272],{"class":112},[102,50065,9467],{"class":108},[102,50067,32778],{"class":112},[102,50069,2938],{"class":108},[102,50071,34281],{"class":112},[102,50073,50074],{"class":104,"line":16594},[102,50075,34286],{"class":171},[102,50077,50078,50080,50082,50084,50086],{"class":104,"line":16600},[102,50079,34291],{"class":112},[102,50081,9467],{"class":108},[102,50083,34296],{"class":112},[102,50085,304],{"class":161},[102,50087,119],{"class":112},[102,50089,50090],{"class":104,"line":16623},[102,50091,2389],{"emptyLinePlaceholder":30},[102,50093,50094],{"class":104,"line":16629},[102,50095,34309],{"class":171},[102,50097,50098,50100,50102,50104,50106],{"class":104,"line":16652},[102,50099,34314],{"class":112},[102,50101,158],{"class":108},[102,50103,34319],{"class":112},[102,50105,697],{"class":108},[102,50107,34324],{"class":112},[102,50109,50110],{"class":104,"line":16666},[102,50111,34329],{"class":171},[102,50113,50114,50116,50118,50120],{"class":104,"line":16686},[102,50115,32442],{"class":161},[102,50117,113],{"class":112},[102,50119,34338],{"class":217},[102,50121,34341],{"class":112},[102,50123,50124],{"class":104,"line":16692},[102,50125,2389],{"emptyLinePlaceholder":30},[102,50127,50128],{"class":104,"line":16703},[102,50129,34350],{"class":171},[102,50131,50132,50134,50136,50138,50140],{"class":104,"line":16726},[102,50133,1520],{"class":108},[102,50135,31211],{"class":161},[102,50137,2938],{"class":108},[102,50139,31216],{"class":217},[102,50141,3728],{"class":112},[102,50143,50144],{"class":104,"line":16748},[102,50145,34367],{"class":171},[102,50147,50148,50150,50152],{"class":104,"line":16753},[102,50149,31280],{"class":112},[102,50151,158],{"class":108},[102,50153,44542],{"class":112},[102,50155,50156],{"class":104,"line":16759},[102,50157,34380],{"class":171},[102,50159,50160],{"class":104,"line":16773},[102,50161,34385],{"class":171},[102,50163,50164,50166,50168],{"class":104,"line":16786},[102,50165,34390],{"class":112},[102,50167,34393],{"class":217},[102,50169,30488],{"class":112},[102,50171,50172],{"class":104,"line":16791},[102,50173,34400],{"class":171},[102,50175,50176,50178,50180],{"class":104,"line":16805},[102,50177,34013],{"class":112},[102,50179,158],{"class":108},[102,50181,34409],{"class":112},[102,50183,50184],{"class":104,"line":16810},[102,50185,34414],{"class":171},[102,50187,50188],{"class":104,"line":16816},[102,50189,34419],{"class":112},[102,50191,50192],{"class":104,"line":16821},[102,50193,2389],{"emptyLinePlaceholder":30},[102,50195,50196],{"class":104,"line":16835},[102,50197,34428],{"class":171},[102,50199,50200],{"class":104,"line":16840},[102,50201,34433],{"class":171},[102,50203,50204,50206,50208,50210,50212,50214,50216],{"class":104,"line":16845},[102,50205,31228],{"class":112},[102,50207,158],{"class":108},[102,50209,31235],{"class":217},[102,50211,1693],{"class":108},[102,50213,31240],{"class":112},[102,50215,1690],{"class":108},[102,50217,34110],{"class":217},[102,50219,50220,50222,50224],{"class":104,"line":16859},[102,50221,31280],{"class":112},[102,50223,158],{"class":108},[102,50225,32280],{"class":112},[102,50227,50228],{"class":104,"line":16871},[102,50229,34462],{"class":171},[102,50231,50232],{"class":104,"line":16876},[102,50233,34467],{"class":171},[102,50235,50236,50238,50240,50242,50245,50247,50250],{"class":104,"line":16889},[102,50237,34472],{"class":112},[102,50239,158],{"class":108},[102,50241,1003],{"class":112},[102,50243,50244],{"class":217},"'猫'",[102,50246,491],{"class":112},[102,50248,50249],{"class":217},"'狗'",[102,50251,33237],{"class":112},[102,50253,50254,50256],{"class":104,"line":16894},[102,50255,34169],{"class":108},[102,50257,32875],{"class":112},[102,50259,50260],{"class":104,"line":16899},[102,50261,34537],{"class":171},[102,50263,50264,50266,50268,50270],{"class":104,"line":16904},[102,50265,3392],{"class":108},[102,50267,34544],{"class":112},[102,50269,26034],{"class":108},[102,50271,34188],{"class":112},[102,50273,50274,50276,50278],{"class":104,"line":16917},[102,50275,32601],{"class":112},[102,50277,158],{"class":108},[102,50279,32606],{"class":112},[102,50281,50282,50284,50286],{"class":104,"line":16922},[102,50283,32616],{"class":112},[102,50285,158],{"class":108},[102,50287,32621],{"class":112},[102,50289,50290],{"class":104,"line":32624},[102,50291,2389],{"emptyLinePlaceholder":30},[102,50293,50294],{"class":104,"line":32630},[102,50295,34573],{"class":171},[102,50297,50298],{"class":104,"line":32636},[102,50299,32866],{"class":112},[102,50301,50302],{"class":104,"line":32642},[102,50303,34582],{"class":171},[102,50305,50306,50308,50310],{"class":104,"line":32648},[102,50307,32651],{"class":112},[102,50309,158],{"class":108},[102,50311,32656],{"class":112},[102,50313,50314],{"class":104,"line":32659},[102,50315,34595],{"class":171},[102,50317,50318,50320,50322,50324,50326,50328,50330],{"class":104,"line":32665},[102,50319,32668],{"class":112},[102,50321,158],{"class":108},[102,50323,32673],{"class":112},[102,50325,32676],{"class":5206},[102,50327,158],{"class":108},[102,50329,330],{"class":161},[102,50331,119],{"class":112},[102,50333,50334],{"class":104,"line":32685},[102,50335,34616],{"class":171},[102,50337,50338,50340,50342],{"class":104,"line":32691},[102,50339,34621],{"class":112},[102,50341,158],{"class":108},[102,50343,34626],{"class":112},[102,50345,50346,50348,50350],{"class":104,"line":32702},[102,50347,34631],{"class":112},[102,50349,158],{"class":108},[102,50351,34636],{"class":112},[102,50353,50354,50356,50358,50360,50362,50364,50366,50368],{"class":104,"line":32708},[102,50355,34641],{"class":161},[102,50357,113],{"class":112},[102,50359,34646],{"class":217},[102,50361,34649],{"class":112},[102,50363,34652],{"class":217},[102,50365,491],{"class":112},[102,50367,34657],{"class":217},[102,50369,34660],{"class":112},[5116,50371,50372],{},"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":23,"searchDepth":24,"depth":24,"links":50374},[50375,50376,50377,50378],{"id":30582,"depth":1168,"text":30583},{"id":37830,"depth":1168,"text":37831},{"id":41263,"depth":1168,"text":41264},{"id":45272,"depth":1168,"text":45273},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30574,"description":27},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50385,"title":50386,"body":50387,"description":27,"extension":28,"meta":50394,"navigation":30,"path":50395,"seo":50396,"stem":50397,"__hash__":50398},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50388,"toc":50392},[50389],[10,50390,50386],{"id":50391},"_3yolo模型学习",{"title":23,"searchDepth":24,"depth":24,"links":50393},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50386,"description":27},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50400,"title":50401,"body":50402,"description":50409,"extension":28,"meta":50410,"navigation":30,"path":50412,"seo":50413,"stem":50414,"__hash__":50415},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50403,"toc":50407},[50404],[19,50405,50406],{},"yolo模型还未补充",{"title":23,"searchDepth":24,"depth":24,"links":50408},[],"深度学习学习",{"category":50411},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50401,"description":50409},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50417,"title":50418,"body":50419,"description":27,"extension":28,"meta":50444,"navigation":30,"path":50445,"seo":50446,"stem":50447,"__hash__":50448},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50420,"toc":50442},[50421,50424,50427,50432,50439],[10,50422,50418],{"id":50423},"_1工具",[19,50425,50426],{},"提示错误插件：有问题会提前报错",[19,50428,50429],{},[1451,50430],{"alt":23,"src":50431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50433,50434],{},[351,50435,50438],{"href":50436,"rel":50437},"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",[23855],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50440,50441],{},"alt键加上下箭头可以实现语句的移动",{"title":23,"searchDepth":24,"depth":24,"links":50443},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50418,"description":27},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50450,"title":50451,"body":50452,"description":27,"extension":28,"meta":53316,"navigation":30,"path":53317,"seo":53318,"stem":53319,"__hash__":53320},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50453,"toc":53267},[50454,50457,50461,50465,50470,50473,50478,50482,50489,50494,50501,50506,50513,50518,50522,50527,50530,50534,50539,50543,50548,50551,50554,50557,50560,50563,50566,50569,50572,50577,50582,50587,50591,50594,50597,50601,50606,50609,50617,50622,50639,50647,50652,50657,50662,50667,50672,50675,50680,50685,50689,50698,50703,50708,50712,50717,50720,50724,50729,50737,50742,50747,50750,50755,50760,50765,50768,50771,50774,50779,50784,50787,50792,50795,50800,50803,50806,50809,50814,50817,50820,50835,50840,50845,50850,50853,50856,50859,50873,50876,50881,50886,50889,50892,50895,50898,50901,50904,50907,50911,50915,50920,50924,50927,50932,50937,50940,50945,50948,50952,50957,50960,50963,50966,50969,50972,50975,50978,50981,50984,50988,50993,50998,51003,51006,51009,51013,51018,51021,51025,51028,51031,51036,51039,51042,51046,51050,51053,51058,51063,51066,51095,51100,51105,51110,51115,51119,51124,51128,51133,51136,51140,51144,51149,51153,51158,51163,51167,51172,51175,51177,51180,51185,51189,51194,51198,51202,51207,51212,51217,51222,51226,51231,51236,51241,51244,51247,51252,51255,51260,51265,51270,51275,51279,52086,52090,52433,52438,52441,52444,52447,52450,52453,52456,52459,52462,52464,52467,52469,52472,52476,52481,52484,52487,52490,52494,52499,52504,52524,52527,52531,52536,52541,52558,52562,52591,52595,52617,52619,52658,52666,52672,52676,52679,52682,52687,52692,52695,52698,52701,52706,52711,52714,52717,52720,52723,52726,52729,52732,52735,52738,52741,52744,52746,52749,52752,52755,52758,52761,52764,52767,52770,52774,52779,52782,52787,52790,52793,52796,52799,52802,52805,52808,52810,52813,52816,52819,52822,52825,52828,52832,52835,52844,52847,52852,52855,52860,52863,52866,52869,52872,52875,52878,52881,52885,52889,52892,52895,52900,52905,52910,52914,52919,52924,52927,52930,52933,52936,52939,52944,52947,52952,52954,52959,52962,52966,52971,52974,52977,52982,52986,52989,52994,52997,53000,53029,53034,53037,53040,53043,53046,53049,53053,53056,53142,53146,53149,53154,53159,53166,53169,53172,53175,53178,53181,53186,53191,53194,53197,53200,53203,53206,53209,53212,53215,53218,53220,53223,53227,53232,53237,53242,53245,53250,53255,53258,53261,53264],[10,50455,50451],{"id":50456},"_2基础语法",[14,50458,50460],{"id":50459},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[73,50462,50464],{"id":50463},"_211-js组成","2.1.1 js组成",[56,50466,50467],{},[59,50468,50469],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50471,50472],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[56,50474,50475],{"start":24},[59,50476,50477],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[73,50479,50481],{"id":50480},"_212-js书写位置","2.1.2 js书写位置",[56,50483,50484],{},[59,50485,50486],{},[262,50487,50488],{},"内部 JavaScript",[19,50490,50491],{},[1451,50492],{"alt":23,"src":50493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[56,50495,50496],{"start":24},[59,50497,50498],{},[262,50499,50500],{},"外部 JavaScript",[19,50502,50503],{},[1451,50504],{"alt":23,"src":50505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[56,50507,50508],{"start":1168},[59,50509,50510],{},[262,50511,50512],{},"内联 JavaScript",[19,50514,50515],{},[1451,50516],{"alt":23,"src":50517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[73,50519,50521],{"id":50520},"_213-javascript注释","2.1.3 JavaScript注释",[19,50523,50524],{},[1451,50525],{"alt":23,"src":50526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50528,50529],{},"alt+shift+a一定要记住！",[73,50531,50533],{"id":50532},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50535,50536],{},[1451,50537],{"alt":23,"src":50538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[73,50540,50542],{"id":50541},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[56,50544,50545],{},[59,50546,50547],{},"输出语法：",[19,50549,50550],{},"①document.write('要出的内容')",[19,50552,50553],{},"向body内输出内容；",[19,50555,50556],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50558,50559],{},"②alert('要出的内容')",[19,50561,50562],{},"页面弹出警告对话框",[19,50564,50565],{},"③console.log('控制台打印')",[19,50567,50568],{},"控制台输出语法，程序员调试使用",[19,50570,50571],{},"输入log就行，自动生成：",[19,50573,50574],{},[1451,50575],{"alt":23,"src":50576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[56,50578,50579],{"start":24},[59,50580,50581],{},"输入语法：",[19,50583,50584],{},[1451,50585],{"alt":23,"src":50586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[73,50588,50590],{"id":50589},"_2116-字面量","21.1.6 字面量",[19,50592,50593],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50595,50596],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50598,50600],{"id":50599},"_22-变量","2.2 变量",[56,50602,50603],{},[59,50604,50605],{},"变量声明",[19,50607,50608],{},"let 变量名",[1120,50610,50611,50614],{},[59,50612,50613],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[59,50615,50616],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[56,50618,50619],{"start":24},[59,50620,50621],{},"变量赋值",[93,50623,50627],{"className":50624,"code":50625,"language":50626,"meta":23,"style":23},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[99,50628,50629,50634],{"__ignoreMap":23},[102,50630,50631],{"class":104,"line":105},[102,50632,50633],{"class":112},"let age\n",[102,50635,50636],{"class":104,"line":24},[102,50637,50638],{"class":112},"age=18\n",[56,50640,50641,50644],{"start":1168},[59,50642,50643],{},"连这些（变量的初始化）：let age=18",[59,50645,50646],{},"更新变量",[19,50648,50649],{},[1451,50650],{"alt":23,"src":50651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[56,50653,50654],{"start":1189},[59,50655,50656],{},"声明多个变量",[19,50658,50659],{},[1451,50660],{"alt":23,"src":50661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[56,50663,50664],{"start":1203},[59,50665,50666],{},"变量命名规则与规范",[19,50668,50669],{},[1451,50670],{"alt":23,"src":50671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50673,50674],{},"遵守小驼峰！",[56,50676,50677],{"start":1209},[59,50678,50679],{},"变量拓展-let和var的区别",[19,50681,50682],{},[1451,50683],{"alt":23,"src":50684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50686,50688],{"id":50687},"_23-数组","2.3 数组",[93,50690,50692],{"className":50624,"code":50691,"language":50626,"meta":23,"style":23},"let arr = []\n",[99,50693,50694],{"__ignoreMap":23},[102,50695,50696],{"class":104,"line":105},[102,50697,50691],{"class":112},[19,50699,50700],{},[1451,50701],{"alt":23,"src":50702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50704,50705],{},[1451,50706],{"alt":23,"src":50707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50709,50711],{"id":50710},"_24-常量","2.4 常量",[19,50713,50714],{},[1451,50715],{"alt":23,"src":50716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,50718,50719],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50721,50723],{"id":50722},"_25-数据类型","2.5 数据类型",[19,50725,50726],{},[1451,50727],{"alt":23,"src":50728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[56,50730,50731,50734],{},[59,50732,50733],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[59,50735,50736],{},"算数运算符：",[19,50738,50739],{},[1451,50740],{"alt":23,"src":50741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[56,50743,50744],{"start":1168},[59,50745,50746],{},"数字类型（Number）",[19,50748,50749],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,50751,50752],{},[1451,50753],{"alt":23,"src":50754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[56,50756,50757],{"start":1183},[59,50758,50759],{},"字符串类型（string）",[19,50761,50762],{},[1451,50763],{"alt":23,"src":50764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,50766,50767],{},"反引号也是可以使用的",[19,50769,50770],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,50772,50773],{},"例如：document.write(\"我今年\"+age+\"岁\")",[56,50775,50776],{"start":1189},[59,50777,50778],{},"模板字符串",[19,50780,50781],{},[1451,50782],{"alt":23,"src":50783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,50785,50786],{},"类似于python的字符串格式化",[56,50788,50789],{"start":1203},[59,50790,50791],{},"布尔类型",[19,50793,50794],{},"true 和 false",[56,50796,50797],{"start":1209},[59,50798,50799],{},"未定义类型（underfined）",[19,50801,50802],{},"表示没有赋值",[19,50804,50805],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,50807,50808],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[56,50810,50811],{"start":1300},[59,50812,50813],{},"null（空类型）",[19,50815,50816],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,50818,50819],{},"赋值了，但是内容为空",[93,50821,50823],{"className":50624,"code":50822,"language":50626,"meta":23,"style":23},"typeof null\n输出的是'object'，是一个对象数据类型\n",[99,50824,50825,50830],{"__ignoreMap":23},[102,50826,50827],{"class":104,"line":105},[102,50828,50829],{"class":112},"typeof null\n",[102,50831,50832],{"class":104,"line":24},[102,50833,50834],{"class":112},"输出的是'object'，是一个对象数据类型\n",[56,50836,50837],{"start":1306},[59,50838,50839],{},"控制台检测数据类型",[19,50841,50842],{},[1451,50843],{"alt":23,"src":50844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[56,50846,50847],{"start":1318},[59,50848,50849],{},"类型转换",[19,50851,50852],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,50854,50855],{},"转换方式：隐式转换和显示转换",[19,50857,50858],{},"①隐式转换",[1120,50860,50861,50864,50867,50870],{},[59,50862,50863],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[59,50865,50866],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[59,50868,50869],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[59,50871,50872],{},"任何数据和字符串相加结果都是字符串",[19,50874,50875],{},"②显示转换",[19,50877,50878],{},[1451,50879],{"alt":23,"src":50880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,50882,50883],{},[1451,50884],{"alt":23,"src":50885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,50887,50888],{},"在输入的时候要用好隐式转换，简单写起来",[19,50890,50891],{},"let num = +prompt(’请输入数字：‘)",[19,50893,50894],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,50896,50897],{},"console.log(parseInt('12.333px'))",[19,50899,50900],{},"输出为：12",[19,50902,50903],{},"console.log(parseInt('a'a'a12.333px'))",[19,50905,50906],{},"输出：NaN",[14,50908,50910],{"id":50909},"_26-运算符","2.6 运算符",[73,50912,50914],{"id":50913},"_261-赋值运算符","2.6.1 赋值运算符",[19,50916,50917],{},[1451,50918],{"alt":23,"src":50919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[73,50921,50923],{"id":50922},"_262-一元运算符","2.6.2 一元运算符",[19,50925,50926],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,50928,50929],{},[1451,50930],{"alt":23,"src":50931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,50933,50934],{},[1451,50935],{"alt":23,"src":50936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,50938,50939],{},"两者的区别：",[19,50941,50942],{},[1451,50943],{"alt":23,"src":50944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,50946,50947],{},"前置先自加；后置后加，代码执行完之后再加",[73,50949,50951],{"id":50950},"_263-比较运算符","2.6.3 比较运算符",[19,50953,50954],{},[1451,50955],{"alt":23,"src":50956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,50958,50959],{},"比较运算符也有隐式转换",[19,50961,50962],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,50964,50965],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,50967,50968],{},"要使用三等，开发的时候",[19,50970,50971],{},"NaN不等于任何人，包括它自己",[19,50973,50974],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,50976,50977],{},"7\u002F10=0.7",[19,50979,50980],{},"最后：0.5+0.2=0.7",[19,50982,50983],{},"字符串比较，比较的是字符对应的ASCII码",[73,50985,50987],{"id":50986},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,50989,50990],{},[1451,50991],{"alt":23,"src":50992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,50994,50995],{},[1451,50996],{"alt":23,"src":50997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,50999,51000],{},[1451,51001],{"alt":23,"src":51002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51004,51005],{},"上述题目选D",[19,51007,51008],{},"与真2假1；或真1假2",[73,51010,51012],{"id":51011},"_265-运算符优先级","2.6.5 运算符优先级",[19,51014,51015],{},[1451,51016],{"alt":23,"src":51017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51019,51020],{},"先算逻辑与，后算逻辑或",[14,51022,51024],{"id":51023},"_27-语句","2.7 语句",[19,51026,51027],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51029,51030],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51032,51033],{},[1451,51034],{"alt":23,"src":51035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51037,51038],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51040,51041],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[73,51043,51045],{"id":51044},"_271-分支语句","2.7.1 分支语句",[21988,51047,51049],{"id":51048},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51051,51052],{},"if语句单行简单的话，可以不写{}，写在一行就行",[56,51054,51055],{},[59,51056,51057],{},"单分支语句",[19,51059,51060],{},[1451,51061],{"alt":23,"src":51062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51064,51065],{},"除了0，所有数字都为真",[93,51067,51069],{"className":50624,"code":51068,"language":50626,"meta":23,"style":23},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[99,51070,51071,51076,51081,51086,51090],{"__ignoreMap":23},[102,51072,51073],{"class":104,"line":105},[102,51074,51075],{"class":112},"if（0) {\n",[102,51077,51078],{"class":104,"line":24},[102,51079,51080],{"class":112},"    let a=1\n",[102,51082,51083],{"class":104,"line":1168},[102,51084,51085],{"class":112},"    alert(typeof a)\n",[102,51087,51088],{"class":104,"line":1183},[102,51089,1554],{"class":112},[102,51091,51092],{"class":104,"line":1189},[102,51093,51094],{"class":112},"不输出，括号为假\n",[56,51096,51097],{"start":24},[59,51098,51099],{},"双分支语句",[19,51101,51102],{},[1451,51103],{"alt":23,"src":51104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[56,51106,51107],{"start":1168},[59,51108,51109],{},"多分支语句",[19,51111,51112],{},[1451,51113],{"alt":23,"src":51114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21988,51116,51118],{"id":51117},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51120,51121],{},[1451,51122],{"alt":23,"src":51123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21988,51125,51127],{"id":51126},"_2713-switch语句","2.7.1.3 switch语句",[19,51129,51130],{},[1451,51131],{"alt":23,"src":51132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51134,51135],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[73,51137,51139],{"id":51138},"_272-循环语句","2.7.2 循环语句",[21988,51141,51143],{"id":51142},"_2721-断点演示","2.7.2.1 断点演示",[19,51145,51146],{},[1451,51147],{"alt":23,"src":51148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21988,51150,51152],{"id":51151},"_2722-while循环","2.7.2.2 while循环",[19,51154,51155],{},[1451,51156],{"alt":23,"src":51157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51159,51160],{},[1451,51161],{"alt":23,"src":51162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21988,51164,51166],{"id":51165},"_2723-for循环","2.7.2.3 for循环",[19,51168,51169],{},[1451,51170],{"alt":23,"src":51171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51173,51174],{},"for(;;) {",[19,51176,1059],{},[19,51178,51179],{},"表示无限循环",[19,51181,51182],{},[1451,51183],{"alt":23,"src":51184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21988,51186,51188],{"id":51187},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51190,51191],{},[1451,51192],{"alt":23,"src":51193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51195,51197],{"id":51196},"_28-数组","2.8 数组",[73,51199,51201],{"id":51200},"_281-基础认识","2.8.1 基础认识",[19,51203,51204],{},[1451,51205],{"alt":23,"src":51206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51208,51209],{},[1451,51210],{"alt":23,"src":51211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51213,51214],{},[1451,51215],{"alt":23,"src":51216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51218,51219],{},[1451,51220],{"alt":23,"src":51221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[73,51223,51225],{"id":51224},"_282-操作数组","2.8.2 操作数组",[19,51227,51228],{},[1451,51229],{"alt":23,"src":51230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[56,51232,51233],{},[59,51234,51235],{},"添加元素",[19,51237,51238],{},[1451,51239],{"alt":23,"src":51240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51242,51243],{},"console.log(arr.push('green'))",[19,51245,51246],{},"输出结果：为新数组的长度",[19,51248,51249],{},[1451,51250],{"alt":23,"src":51251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51253,51254],{},"push用的非常多，一定要记住",[56,51256,51257],{},[59,51258,51259],{},"删除元素",[19,51261,51262],{},[1451,51263],{"alt":23,"src":51264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51266,51267],{},[1451,51268],{"alt":23,"src":51269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51271,51272],{},[1451,51273],{"alt":23,"src":51274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[73,51276,51278],{"id":51277},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[93,51280,51282],{"className":50624,"code":51281,"language":50626,"meta":23,"style":23},"\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",[99,51283,51284,51299,51315,51319,51328,51346,51370,51392,51406,51414,51421,51433,51444,51448,51452,51459,51471,51486,51499,51518,51535,51550,51562,51574,51586,51590,51594,51605,51615,51627,51639,51651,51662,51666,51670,51682,51686,51700,51704,51708,51719,51733,51745,51759,51763,51772,51781,51785,51794,51798,51807,51812,51817,51830,51858,51863,51868,51893,51898,51902,51907,51912,51927,51931,51936,51966,51978,51994,52010,52024,52029,52036,52040,52045,52058,52066,52074,52078],{"__ignoreMap":23},[102,51285,51286,51289,51293,51296],{"class":104,"line":105},[102,51287,51288],{"class":112},"\u003C!",[102,51290,51292],{"class":51291},"s9eBZ","DOCTYPE",[102,51294,51295],{"class":1952}," html",[102,51297,51298],{"class":112},">\n",[102,51300,51301,51303,51305,51308,51310,51313],{"class":104,"line":24},[102,51302,1023],{"class":112},[102,51304,50626],{"class":51291},[102,51306,51307],{"class":1952}," lang",[102,51309,158],{"class":112},[102,51311,51312],{"class":217},"\"en\"",[102,51314,51298],{"class":112},[102,51316,51317],{"class":104,"line":1168},[102,51318,2389],{"emptyLinePlaceholder":30},[102,51320,51321,51323,51326],{"class":104,"line":1183},[102,51322,1023],{"class":112},[102,51324,51325],{"class":51291},"head",[102,51327,51298],{"class":112},[102,51329,51330,51333,51336,51339,51341,51344],{"class":104,"line":1189},[102,51331,51332],{"class":112},"    \u003C",[102,51334,51335],{"class":51291},"meta",[102,51337,51338],{"class":1952}," charset",[102,51340,158],{"class":112},[102,51342,51343],{"class":217},"\"UTF-8\"",[102,51345,51298],{"class":112},[102,51347,51348,51350,51352,51355,51357,51360,51363,51365,51368],{"class":104,"line":1203},[102,51349,51332],{"class":112},[102,51351,51335],{"class":51291},[102,51353,51354],{"class":1952}," http-equiv",[102,51356,158],{"class":112},[102,51358,51359],{"class":217},"\"X-UA-Compatible\"",[102,51361,51362],{"class":1952}," content",[102,51364,158],{"class":112},[102,51366,51367],{"class":217},"\"IE=edge\"",[102,51369,51298],{"class":112},[102,51371,51372,51374,51376,51378,51380,51383,51385,51387,51390],{"class":104,"line":1209},[102,51373,51332],{"class":112},[102,51375,51335],{"class":51291},[102,51377,14910],{"class":1952},[102,51379,158],{"class":112},[102,51381,51382],{"class":217},"\"viewport\"",[102,51384,51362],{"class":1952},[102,51386,158],{"class":112},[102,51388,51389],{"class":217},"\"width=device-width, initial-scale=1.0\"",[102,51391,51298],{"class":112},[102,51393,51394,51396,51399,51402,51404],{"class":104,"line":1300},[102,51395,51332],{"class":112},[102,51397,51398],{"class":51291},"title",[102,51400,51401],{"class":112},">Document\u003C\u002F",[102,51403,51398],{"class":51291},[102,51405,51298],{"class":112},[102,51407,51408,51410,51412],{"class":104,"line":1306},[102,51409,51332],{"class":112},[102,51411,5116],{"class":51291},[102,51413,51298],{"class":112},[102,51415,51416,51419],{"class":104,"line":1318},[102,51417,51418],{"class":51291},"        *",[102,51420,15562],{"class":112},[102,51422,51423,51426,51429,51431],{"class":104,"line":1601},[102,51424,51425],{"class":161},"            margin",[102,51427,51428],{"class":112},": ",[102,51430,304],{"class":161},[102,51432,1279],{"class":112},[102,51434,51435,51438,51440,51442],{"class":104,"line":1606},[102,51436,51437],{"class":161},"            padding",[102,51439,51428],{"class":112},[102,51441,304],{"class":161},[102,51443,1279],{"class":112},[102,51445,51446],{"class":104,"line":1612},[102,51447,2518],{"class":112},[102,51449,51450],{"class":104,"line":1617},[102,51451,2389],{"emptyLinePlaceholder":30},[102,51453,51454,51457],{"class":104,"line":1631},[102,51455,51456],{"class":1952},"        .box",[102,51458,15562],{"class":112},[102,51460,51461,51464,51466,51469],{"class":104,"line":1636},[102,51462,51463],{"class":161},"            display",[102,51465,51428],{"class":112},[102,51467,51468],{"class":161},"flex",[102,51470,1279],{"class":112},[102,51472,51473,51476,51478,51481,51484],{"class":104,"line":1642},[102,51474,51475],{"class":161},"            width",[102,51477,51428],{"class":112},[102,51479,51480],{"class":161},"700",[102,51482,51483],{"class":108},"px",[102,51485,1279],{"class":112},[102,51487,51488,51491,51493,51495,51497],{"class":104,"line":1663},[102,51489,51490],{"class":161},"            height",[102,51492,51428],{"class":112},[102,51494,3962],{"class":161},[102,51496,51483],{"class":108},[102,51498,1279],{"class":112},[102,51500,51501,51504,51506,51508,51510,51513,51516],{"class":104,"line":1668},[102,51502,51503],{"class":161},"            border-left",[102,51505,51428],{"class":112},[102,51507,330],{"class":161},[102,51509,51483],{"class":108},[102,51511,51512],{"class":161}," solid",[102,51514,51515],{"class":161}," pink",[102,51517,1279],{"class":112},[102,51519,51520,51523,51525,51527,51529,51531,51533],{"class":104,"line":1682},[102,51521,51522],{"class":161},"            border-bottom",[102,51524,51428],{"class":112},[102,51526,330],{"class":161},[102,51528,51483],{"class":108},[102,51530,51512],{"class":161},[102,51532,51515],{"class":161},[102,51534,1279],{"class":112},[102,51536,51537,51539,51541,51543,51545,51548],{"class":104,"line":1687},[102,51538,51425],{"class":161},[102,51540,51428],{"class":112},[102,51542,769],{"class":161},[102,51544,51483],{"class":108},[102,51546,51547],{"class":161}," auto",[102,51549,1279],{"class":112},[102,51551,51552,51555,51557,51560],{"class":104,"line":1716},[102,51553,51554],{"class":161},"            justify-content",[102,51556,51428],{"class":112},[102,51558,51559],{"class":161},"space-around",[102,51561,1279],{"class":112},[102,51563,51564,51567,51569,51572],{"class":104,"line":1721},[102,51565,51566],{"class":161},"            align-items",[102,51568,51428],{"class":112},[102,51570,51571],{"class":161},"flex-end",[102,51573,1279],{"class":112},[102,51575,51576,51579,51581,51584],{"class":104,"line":1738},[102,51577,51578],{"class":161},"            text-align",[102,51580,51428],{"class":112},[102,51582,51583],{"class":161},"center",[102,51585,1279],{"class":112},[102,51587,51588],{"class":104,"line":1743},[102,51589,2518],{"class":112},[102,51591,51592],{"class":104,"line":1748},[102,51593,2389],{"emptyLinePlaceholder":30},[102,51595,51596,51598,51600,51603],{"class":104,"line":1753},[102,51597,51456],{"class":1952},[102,51599,1073],{"class":108},[102,51601,51602],{"class":51291},"div",[102,51604,15562],{"class":112},[102,51606,51607,51609,51611,51613],{"class":104,"line":1767},[102,51608,51463],{"class":161},[102,51610,51428],{"class":112},[102,51612,51468],{"class":161},[102,51614,1279],{"class":112},[102,51616,51617,51619,51621,51623,51625],{"class":104,"line":1772},[102,51618,51475],{"class":161},[102,51620,51428],{"class":112},[102,51622,769],{"class":161},[102,51624,51483],{"class":108},[102,51626,1279],{"class":112},[102,51628,51629,51632,51634,51637],{"class":104,"line":2566},[102,51630,51631],{"class":161},"            background-color",[102,51633,51428],{"class":112},[102,51635,51636],{"class":161},"pink",[102,51638,1279],{"class":112},[102,51640,51641,51644,51646,51649],{"class":104,"line":2580},[102,51642,51643],{"class":161},"            flex-direction",[102,51645,51428],{"class":112},[102,51647,51648],{"class":161},"column",[102,51650,1279],{"class":112},[102,51652,51653,51655,51657,51660],{"class":104,"line":2588},[102,51654,51554],{"class":161},[102,51656,51428],{"class":112},[102,51658,51659],{"class":161},"space-between",[102,51661,1279],{"class":112},[102,51663,51664],{"class":104,"line":2593},[102,51665,2518],{"class":112},[102,51667,51668],{"class":104,"line":2599},[102,51669,2389],{"emptyLinePlaceholder":30},[102,51671,51672,51674,51677,51680],{"class":104,"line":2605},[102,51673,51456],{"class":1952},[102,51675,51676],{"class":51291}," div",[102,51678,51679],{"class":51291}," span",[102,51681,15562],{"class":112},[102,51683,51684],{"class":104,"line":2610},[102,51685,2389],{"emptyLinePlaceholder":30},[102,51687,51688,51691,51693,51696,51698],{"class":104,"line":7938},[102,51689,51690],{"class":161},"            margin-top",[102,51692,51428],{"class":112},[102,51694,51695],{"class":161},"-20",[102,51697,51483],{"class":108},[102,51699,1279],{"class":112},[102,51701,51702],{"class":104,"line":7962},[102,51703,2518],{"class":112},[102,51705,51706],{"class":104,"line":7967},[102,51707,2389],{"emptyLinePlaceholder":30},[102,51709,51710,51712,51714,51717],{"class":104,"line":7973},[102,51711,51456],{"class":1952},[102,51713,51676],{"class":51291},[102,51715,51716],{"class":51291}," h4",[102,51718,15562],{"class":112},[102,51720,51721,51724,51726,51729,51731],{"class":104,"line":8000},[102,51722,51723],{"class":161},"            margin-bottom",[102,51725,51428],{"class":112},[102,51727,51728],{"class":161},"-35",[102,51730,51483],{"class":108},[102,51732,1279],{"class":112},[102,51734,51735,51737,51739,51741,51743],{"class":104,"line":8005},[102,51736,51475],{"class":161},[102,51738,51428],{"class":112},[102,51740,469],{"class":161},[102,51742,51483],{"class":108},[102,51744,1279],{"class":112},[102,51746,51747,51750,51752,51755,51757],{"class":104,"line":8011},[102,51748,51749],{"class":161},"            margin-left",[102,51751,51428],{"class":112},[102,51753,51754],{"class":161},"-10",[102,51756,51483],{"class":108},[102,51758,1279],{"class":112},[102,51760,51761],{"class":104,"line":8023},[102,51762,2518],{"class":112},[102,51764,51765,51768,51770],{"class":104,"line":8035},[102,51766,51767],{"class":112},"    \u003C\u002F",[102,51769,5116],{"class":51291},[102,51771,51298],{"class":112},[102,51773,51774,51777,51779],{"class":104,"line":8047},[102,51775,51776],{"class":112},"\u003C\u002F",[102,51778,51325],{"class":51291},[102,51780,51298],{"class":112},[102,51782,51783],{"class":104,"line":9706},[102,51784,2389],{"emptyLinePlaceholder":30},[102,51786,51787,51789,51792],{"class":104,"line":9731},[102,51788,1023],{"class":112},[102,51790,51791],{"class":51291},"body",[102,51793,51298],{"class":112},[102,51795,51796],{"class":104,"line":9754},[102,51797,2389],{"emptyLinePlaceholder":30},[102,51799,51800,51802,51805],{"class":104,"line":9778},[102,51801,51332],{"class":112},[102,51803,51804],{"class":51291},"script",[102,51806,51298],{"class":112},[102,51808,51809],{"class":104,"line":9783},[102,51810,51811],{"class":171},"        \u002F\u002F 1. 四次弹框效果\n",[102,51813,51814],{"class":104,"line":9788},[102,51815,51816],{"class":171},"        \u002F\u002F 声明一个新的数组\n",[102,51818,51819,51822,51825,51827],{"class":104,"line":9793},[102,51820,51821],{"class":108},"        let",[102,51823,51824],{"class":112}," arr ",[102,51826,158],{"class":108},[102,51828,51829],{"class":112}," []\n",[102,51831,51832,51834,51836,51839,51841,51843,51845,51847,51849,51852,51854,51856],{"class":104,"line":9802},[102,51833,3392],{"class":108},[102,51835,1647],{"class":112},[102,51837,51838],{"class":108},"let",[102,51840,9428],{"class":112},[102,51842,158],{"class":108},[102,51844,25109],{"class":161},[102,51846,9435],{"class":112},[102,51848,1577],{"class":108},[102,51850,51851],{"class":161}," 4",[102,51853,3203],{"class":112},[102,51855,2281],{"class":108},[102,51857,12432],{"class":112},[102,51859,51860],{"class":104,"line":9807},[102,51861,51862],{"class":171},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[102,51864,51865],{"class":104,"line":9813},[102,51866,51867],{"class":171},"            \u002F\u002F arr.push(num)\n",[102,51869,51870,51873,51876,51878,51881,51883,51886,51888,51891],{"class":104,"line":9834},[102,51871,51872],{"class":112},"            arr.",[102,51874,51875],{"class":1952},"push",[102,51877,113],{"class":112},[102,51879,51880],{"class":1952},"prompt",[102,51882,113],{"class":112},[102,51884,51885],{"class":217},"`请输入第${",[102,51887,554],{"class":112},[102,51889,51890],{"class":217},"}季度的数据:`",[102,51892,30488],{"class":112},[102,51894,51895],{"class":104,"line":9840},[102,51896,51897],{"class":171},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[102,51899,51900],{"class":104,"line":9854},[102,51901,2518],{"class":112},[102,51903,51904],{"class":104,"line":9860},[102,51905,51906],{"class":171},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[102,51908,51909],{"class":104,"line":9887},[102,51910,51911],{"class":171},"        \u002F\u002F 盒子开头\n",[102,51913,51914,51917,51920,51922,51925],{"class":104,"line":9896},[102,51915,51916],{"class":112},"        document.",[102,51918,51919],{"class":1952},"write",[102,51921,113],{"class":112},[102,51923,51924],{"class":217},"` \u003Cdiv class=\"box\">`",[102,51926,119],{"class":112},[102,51928,51929],{"class":104,"line":9902},[102,51930,2389],{"emptyLinePlaceholder":30},[102,51932,51933],{"class":104,"line":9910},[102,51934,51935],{"class":171},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[102,51937,51938,51940,51942,51944,51946,51948,51950,51952,51954,51957,51960,51962,51964],{"class":104,"line":9915},[102,51939,3392],{"class":108},[102,51941,1647],{"class":112},[102,51943,51838],{"class":108},[102,51945,9428],{"class":112},[102,51947,158],{"class":108},[102,51949,4082],{"class":161},[102,51951,9435],{"class":112},[102,51953,1023],{"class":108},[102,51955,51956],{"class":112}," arr.",[102,51958,51959],{"class":161},"length",[102,51961,3203],{"class":112},[102,51963,2281],{"class":108},[102,51965,12432],{"class":112},[102,51967,51968,51971,51973,51975],{"class":104,"line":16594},[102,51969,51970],{"class":112},"            document.",[102,51972,51919],{"class":1952},[102,51974,113],{"class":112},[102,51976,51977],{"class":217},"`\n",[102,51979,51980,51983,51985,51987,51989,51991],{"class":104,"line":16600},[102,51981,51982],{"class":217},"              \u003Cdiv style=\"height: ${",[102,51984,3869],{"class":112},[102,51986,1003],{"class":217},[102,51988,554],{"class":112},[102,51990,1053],{"class":217},[102,51992,51993],{"class":217},"}px;\">\n",[102,51995,51996,51999,52001,52003,52005,52007],{"class":104,"line":16623},[102,51997,51998],{"class":217},"                \u003Cspan>${",[102,52000,3869],{"class":112},[102,52002,1003],{"class":217},[102,52004,554],{"class":112},[102,52006,1053],{"class":217},[102,52008,52009],{"class":217},"}\u003C\u002Fspan>\n",[102,52011,52012,52015,52017,52019,52021],{"class":104,"line":16629},[102,52013,52014],{"class":217},"                \u003Ch4>第${",[102,52016,554],{"class":112},[102,52018,45557],{"class":108},[102,52020,25109],{"class":161},[102,52022,52023],{"class":217},"}季度\u003C\u002Fh4>\n",[102,52025,52026],{"class":104,"line":16652},[102,52027,52028],{"class":217},"              \u003C\u002Fdiv>          \n",[102,52030,52031,52034],{"class":104,"line":16666},[102,52032,52033],{"class":217},"            `",[102,52035,119],{"class":112},[102,52037,52038],{"class":104,"line":16686},[102,52039,2518],{"class":112},[102,52041,52042],{"class":104,"line":16692},[102,52043,52044],{"class":171},"        \u002F\u002F 盒子结尾\n",[102,52046,52047,52049,52051,52053,52056],{"class":104,"line":16703},[102,52048,51916],{"class":112},[102,52050,51919],{"class":1952},[102,52052,113],{"class":112},[102,52054,52055],{"class":217},"` \u003C\u002Fdiv>`",[102,52057,119],{"class":112},[102,52059,52060,52062,52064],{"class":104,"line":16726},[102,52061,51767],{"class":112},[102,52063,51804],{"class":51291},[102,52065,51298],{"class":112},[102,52067,52068,52070,52072],{"class":104,"line":16748},[102,52069,51776],{"class":112},[102,52071,51791],{"class":51291},[102,52073,51298],{"class":112},[102,52075,52076],{"class":104,"line":16753},[102,52077,2389],{"emptyLinePlaceholder":30},[102,52079,52080,52082,52084],{"class":104,"line":16759},[102,52081,51776],{"class":112},[102,52083,50626],{"class":51291},[102,52085,51298],{"class":112},[73,52087,52089],{"id":52088},"_284-冒泡排序","2.8.4 冒泡排序",[93,52091,52093],{"className":50624,"code":52092,"language":50626,"meta":23,"style":23},"\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",[99,52094,52095,52105,52119,52123,52131,52146,52166,52178,52186,52190,52198,52206,52238,52271,52308,52313,52332,52337,52350,52365,52381,52385,52390,52394,52404,52413,52421,52425],{"__ignoreMap":23},[102,52096,52097,52099,52101,52103],{"class":104,"line":105},[102,52098,51288],{"class":112},[102,52100,51292],{"class":51291},[102,52102,51295],{"class":1952},[102,52104,51298],{"class":112},[102,52106,52107,52109,52111,52113,52115,52117],{"class":104,"line":24},[102,52108,1023],{"class":112},[102,52110,50626],{"class":51291},[102,52112,51307],{"class":1952},[102,52114,158],{"class":112},[102,52116,51312],{"class":217},[102,52118,51298],{"class":112},[102,52120,52121],{"class":104,"line":1168},[102,52122,2389],{"emptyLinePlaceholder":30},[102,52124,52125,52127,52129],{"class":104,"line":1183},[102,52126,1023],{"class":112},[102,52128,51325],{"class":51291},[102,52130,51298],{"class":112},[102,52132,52133,52136,52138,52140,52142,52144],{"class":104,"line":1189},[102,52134,52135],{"class":112},"  \u003C",[102,52137,51335],{"class":51291},[102,52139,51338],{"class":1952},[102,52141,158],{"class":112},[102,52143,51343],{"class":217},[102,52145,51298],{"class":112},[102,52147,52148,52150,52152,52154,52156,52158,52160,52162,52164],{"class":104,"line":1203},[102,52149,52135],{"class":112},[102,52151,51335],{"class":51291},[102,52153,14910],{"class":1952},[102,52155,158],{"class":112},[102,52157,51382],{"class":217},[102,52159,51362],{"class":1952},[102,52161,158],{"class":112},[102,52163,51389],{"class":217},[102,52165,51298],{"class":112},[102,52167,52168,52170,52172,52174,52176],{"class":104,"line":1209},[102,52169,52135],{"class":112},[102,52171,51398],{"class":51291},[102,52173,51401],{"class":112},[102,52175,51398],{"class":51291},[102,52177,51298],{"class":112},[102,52179,52180,52182,52184],{"class":104,"line":1300},[102,52181,51776],{"class":112},[102,52183,51325],{"class":51291},[102,52185,51298],{"class":112},[102,52187,52188],{"class":104,"line":1306},[102,52189,2389],{"emptyLinePlaceholder":30},[102,52191,52192,52194,52196],{"class":104,"line":1318},[102,52193,1023],{"class":112},[102,52195,51791],{"class":51291},[102,52197,51298],{"class":112},[102,52199,52200,52202,52204],{"class":104,"line":1601},[102,52201,52135],{"class":112},[102,52203,51804],{"class":51291},[102,52205,51298],{"class":112},[102,52207,52208,52211,52213,52215,52218,52220,52222,52224,52226,52228,52230,52232,52234,52236],{"class":104,"line":1606},[102,52209,52210],{"class":108},"    let",[102,52212,51824],{"class":112},[102,52214,158],{"class":108},[102,52216,52217],{"class":112}," [",[102,52219,432],{"class":161},[102,52221,12425],{"class":112},[102,52223,406],{"class":161},[102,52225,12425],{"class":112},[102,52227,184],{"class":161},[102,52229,12425],{"class":112},[102,52231,190],{"class":161},[102,52233,12425],{"class":112},[102,52235,330],{"class":161},[102,52237,33237],{"class":112},[102,52239,52240,52242,52244,52246,52248,52250,52252,52254,52256,52258,52260,52263,52265,52267,52269],{"class":104,"line":1612},[102,52241,3190],{"class":108},[102,52243,1647],{"class":112},[102,52245,51838],{"class":108},[102,52247,9428],{"class":112},[102,52249,158],{"class":108},[102,52251,4082],{"class":161},[102,52253,9435],{"class":112},[102,52255,1023],{"class":108},[102,52257,51956],{"class":112},[102,52259,51959],{"class":161},[102,52261,52262],{"class":108}," -",[102,52264,25109],{"class":161},[102,52266,3203],{"class":112},[102,52268,2281],{"class":108},[102,52270,12432],{"class":112},[102,52272,52273,52276,52278,52280,52282,52284,52286,52288,52290,52292,52294,52296,52298,52300,52302,52304,52306],{"class":104,"line":1617},[102,52274,52275],{"class":108},"      for",[102,52277,1647],{"class":112},[102,52279,51838],{"class":108},[102,52281,9490],{"class":112},[102,52283,158],{"class":108},[102,52285,4082],{"class":161},[102,52287,9497],{"class":112},[102,52289,1023],{"class":108},[102,52291,51956],{"class":112},[102,52293,51959],{"class":161},[102,52295,52262],{"class":108},[102,52297,9428],{"class":112},[102,52299,645],{"class":108},[102,52301,25109],{"class":161},[102,52303,9504],{"class":112},[102,52305,2281],{"class":108},[102,52307,12432],{"class":112},[102,52309,52310],{"class":104,"line":1631},[102,52311,52312],{"class":171},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[102,52314,52315,52317,52320,52322,52325,52327,52329],{"class":104,"line":1636},[102,52316,2486],{"class":108},[102,52318,52319],{"class":112}," (arr[j] ",[102,52321,1073],{"class":108},[102,52323,52324],{"class":112}," arr[j ",[102,52326,594],{"class":108},[102,52328,25109],{"class":161},[102,52330,52331],{"class":112},"]) {\n",[102,52333,52334],{"class":104,"line":1642},[102,52335,52336],{"class":171},"          \u002F\u002F 交换两个变量\n",[102,52338,52339,52342,52345,52347],{"class":104,"line":1663},[102,52340,52341],{"class":108},"          let",[102,52343,52344],{"class":112}," tmp ",[102,52346,158],{"class":108},[102,52348,52349],{"class":112}," arr[j]\n",[102,52351,52352,52355,52357,52359,52361,52363],{"class":104,"line":1668},[102,52353,52354],{"class":112},"          arr[j] ",[102,52356,158],{"class":108},[102,52358,52324],{"class":112},[102,52360,594],{"class":108},[102,52362,25109],{"class":161},[102,52364,33237],{"class":112},[102,52366,52367,52370,52372,52374,52376,52378],{"class":104,"line":1682},[102,52368,52369],{"class":112},"          arr[j ",[102,52371,594],{"class":108},[102,52373,25109],{"class":161},[102,52375,4432],{"class":112},[102,52377,158],{"class":108},[102,52379,52380],{"class":112}," tmp\n",[102,52382,52383],{"class":104,"line":1687},[102,52384,2518],{"class":112},[102,52386,52387],{"class":104,"line":1716},[102,52388,52389],{"class":112},"      }\n",[102,52391,52392],{"class":104,"line":1721},[102,52393,2176],{"class":112},[102,52395,52396,52399,52401],{"class":104,"line":1738},[102,52397,52398],{"class":112},"    document.",[102,52400,51919],{"class":1952},[102,52402,52403],{"class":112},"(arr)\n",[102,52405,52406,52409,52411],{"class":104,"line":1743},[102,52407,52408],{"class":112},"  \u003C\u002F",[102,52410,51804],{"class":51291},[102,52412,51298],{"class":112},[102,52414,52415,52417,52419],{"class":104,"line":1748},[102,52416,51776],{"class":112},[102,52418,51791],{"class":51291},[102,52420,51298],{"class":112},[102,52422,52423],{"class":104,"line":1753},[102,52424,2389],{"emptyLinePlaceholder":30},[102,52426,52427,52429,52431],{"class":104,"line":1767},[102,52428,51776],{"class":112},[102,52430,50626],{"class":51291},[102,52432,51298],{"class":112},[19,52434,52435],{},[1451,52436],{"alt":23,"src":52437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52439,52440],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52442,52443],{},"let arr = [4, 2, 5, 1, 3]",[19,52445,52446],{},"\u002F\u002F 1.升序排列写法",[19,52448,52449],{},"arr.sort(function (a, b) {",[19,52451,52452],{},"return a - b",[19,52454,52455],{},"})",[19,52457,52458],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52460,52461],{},"\u002F\u002F 降序排列写法",[19,52463,52449],{},[19,52465,52466],{},"return b - a",[19,52468,52455],{},[19,52470,52471],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52473,52475],{"id":52474},"_29-函数","2.9 函数",[19,52477,52478],{},[1451,52479],{"alt":23,"src":52480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52482,52483],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52485,52486],{},"函数的声明用function",[19,52488,52489],{},"函数里边可以嵌套函数",[73,52491,52493],{"id":52492},"_291-函数传参","2.9.1 函数传参",[19,52495,52496],{},[1451,52497],{"alt":23,"src":52498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52500,52501],{},[1451,52502],{"alt":23,"src":52503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1120,52505,52506,52509,52512,52515,52518,52521],{},[59,52507,52508],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[59,52510,52511],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[59,52513,52514],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[59,52516,52517],{},"开发中尽量保持形参和实参个数一致",[59,52519,52520],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[59,52522,52523],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52525,52526],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[73,52528,52530],{"id":52529},"_292-函数的返回值","2.9.2 函数的返回值",[19,52532,52533],{},[1451,52534],{"alt":23,"src":52535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52537,52538],{},[1451,52539],{"alt":23,"src":52540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1120,52542,52543,52546,52549,52552,52555],{},[59,52544,52545],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[59,52547,52548],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[59,52550,52551],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[59,52553,52554],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[59,52556,52557],{},"断点调试:进入函数内部看执行过程F11",[73,52559,52561],{"id":52560},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[93,52563,52565],{"className":50624,"code":52564,"language":50626,"meta":23,"style":23},"    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",[99,52566,52567,52572,52577,52581,52586],{"__ignoreMap":23},[102,52568,52569],{"class":104,"line":105},[102,52570,52571],{"class":112},"    function fn(a, b) {\n",[102,52573,52574],{"class":104,"line":24},[102,52575,52576],{"class":112},"      console.log(a + b);\n",[102,52578,52579],{"class":104,"line":1168},[102,52580,2176],{"class":112},[102,52582,52583],{"class":104,"line":1183},[102,52584,52585],{"class":112},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[102,52587,52588],{"class":104,"line":1189},[102,52589,52590],{"class":112},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[73,52592,52594],{"id":52593},"_294-作用域","2.9.4 作用域",[1120,52596,52597,52603,52608,52611,52614],{},[59,52598,52599,52600],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[262,52601,52602],{},"作用域",[59,52604,52605],{},[262,52606,52607],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[59,52609,52610],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[59,52612,52613],{},"函数内部可以直接所使用全局变量",[59,52615,52616],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52618,14623],{},[93,52620,52622],{"className":50624,"code":52621,"language":50626,"meta":23,"style":23},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[99,52623,52624,52629,52634,52638,52643,52648,52653],{"__ignoreMap":23},[102,52625,52626],{"class":104,"line":105},[102,52627,52628],{"class":112},"    function fun() {\n",[102,52630,52631],{"class":104,"line":24},[102,52632,52633],{"class":112},"      num = 10\n",[102,52635,52636],{"class":104,"line":1168},[102,52637,2176],{"class":112},[102,52639,52640],{"class":104,"line":1183},[102,52641,52642],{"class":112},"    fun()\n",[102,52644,52645],{"class":104,"line":1189},[102,52646,52647],{"class":112},"    console.log(num)\n",[102,52649,52650],{"class":104,"line":1203},[102,52651,52652],{"class":112},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[102,52654,52655],{"class":104,"line":1209},[102,52656,52657],{"class":112},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1120,52659,52660,52663],{},[59,52661,52662],{},"函数内部的形参可以看做是局部变量",[59,52664,52665],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52667,52668,52669],{},"变量访问原则： ",[262,52670,52671],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[73,52673,52675],{"id":52674},"_295-匿名函数","2.9.5 匿名函数",[19,52677,52678],{},"函数可以分为具名函数和匿名函数",[19,52680,52681],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[56,52683,52684],{},[59,52685,52686],{},"函数表达式",[19,52688,52689],{},[1451,52690],{"alt":23,"src":52691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52693,52694],{},"里边也可以写参数",[19,52696,52697],{},"具名函数调用位置可以随意调整；",[19,52699,52700],{},"匿名函数函数表达式形式只能在声明后才可以使用",[56,52702,52703],{"start":24},[59,52704,52705],{},"立即执行函数",[19,52707,52708],{},[1451,52709],{"alt":23,"src":52710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52712,52713],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52715,52716],{},"写法：两个小括号，然后在第一个小括号中写function",[19,52718,52719],{},"(function () {})();",[19,52721,52722],{},"不要落下最后的;",[19,52724,52725],{},"立即执行函数必须要加;",[19,52727,52728],{},"分号写前写后都没问题",[19,52730,52731],{},"写前：",[19,52733,52734],{},"(function() {})()",[19,52736,52737],{},";(function () {})();",[19,52739,52740],{},"写后:",[19,52742,52743],{},"(function() {})();",[19,52745,52719],{},[19,52747,52748],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,52750,52751],{},"还有一种写法：",[19,52753,52754],{},"(function(){}());",[19,52756,52757],{},"或者:",[19,52759,52760],{},"!function(){}();",[19,52762,52763],{},"立即执行函数有时候也是可以加名字的：",[19,52765,52766],{},"(function flexible(window,document) {}(window,document));",[19,52768,52769],{},"省一些调用方法",[73,52771,52773],{"id":52772},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,52775,52776],{},[1451,52777],{"alt":23,"src":52778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,52780,52781],{},"这样就不用非得给x,y初始化了",[19,52783,52784],{},[1451,52785],{"alt":23,"src":52786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,52788,52789],{},"代码执行时先看左边",[19,52791,52792],{},"例如：console.log(false && 3+5)",[19,52794,52795],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,52797,52798],{},"&&都是真时，就返回最后一个真值",[19,52800,52801],{},"console.log(11 && 22)",[19,52803,52804],{},"输出22",[19,52806,52807],{},"逻辑与：遇真则真",[19,52809,14623],{},[19,52811,52812],{},"let age=1",[19,52814,52815],{},"console.log(11 || age++)",[19,52817,52818],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,52820,52821],{},"console.log(11 || 22)",[19,52823,52824],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,52826,52827],{},"||如果都是假的话，就取最后一个假的值了",[73,52829,52831],{"id":52830},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,52833,52834],{},"显示转换：",[19,52836,52837,52840,52841],{},[262,52838,52839],{},"记忆","： ",[262,52842,52843],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,52845,52846],{},"空字符串为假，其他字符串全为真",[19,52848,52849],{},[1451,52850],{"alt":23,"src":52851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,52853,52854],{},"隐式转换：",[19,52856,52857],{},[1451,52858],{"alt":23,"src":52859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,52861,52862],{},"隐式转换:",[19,52864,52865],{},"null+3=3",[19,52867,52868],{},"undefined+3=NaN",[19,52870,52871],{},"null==undefined 输出true,他两个都当0看",[19,52873,52874],{},"null===undefined 输出false",[19,52876,52877],{},"undefined做任何操作都是NaN",[19,52879,52880],{},"NaN不等于NaN，NaN表示计算错误",[14,52882,52884],{"id":52883},"_210-对象","2.10 对象",[73,52886,52888],{"id":52887},"_2101-对象的介绍","2.10.1 对象的介绍",[19,52890,52891],{},"对象也是一种数据类型，里边的数据是无序的",[19,52893,52894],{},"对象由属性和方法组成",[19,52896,52897],{},[1451,52898],{"alt":23,"src":52899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,52901,52902],{},[1451,52903],{"alt":23,"src":52904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,52906,52907],{},[1451,52908],{"alt":23,"src":52909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[73,52911,52913],{"id":52912},"_2102-对象属性","2.10.2 对象属性",[19,52915,52916],{},[1451,52917],{"alt":23,"src":52918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[56,52920,52921],{},[59,52922,52923],{},"查询对象",[19,52925,52926],{},"对象名.属性 goods.uname",[19,52928,52929],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,52931,52932],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,52934,52935],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,52937,52938],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[56,52940,52941],{"start":24},[59,52942,52943],{},"重新赋值",[19,52945,52946],{},"对象名.属性=新值",[56,52948,52949],{"start":1168},[59,52950,52951],{},"增加新数据",[19,52953,52946],{},[56,52955,52956],{"start":1183},[59,52957,52958],{},"删除对象中的属性",[19,52960,52961],{},"delete 对象名.属性",[73,52963,52965],{"id":52964},"_2103-对象方法","2.10.3 对象方法",[19,52967,52968],{},[1451,52969],{"alt":23,"src":52970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,52972,52973],{},"后边跟的是匿名函数",[19,52975,52976],{},"对象外面的叫函数；对象内部的叫方法",[19,52978,52979],{},[1451,52980],{"alt":23,"src":52981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[73,52983,52985],{"id":52984},"_2104-遍历对象","2.10.4 遍历对象",[19,52987,52988],{},"理解为加括号的python字典遍历",[19,52990,52991],{},[1451,52992],{"alt":23,"src":52993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,52995,52996],{},"k是字符串类型",[19,52998,52999],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[93,53001,53003],{"className":50624,"code":53002,"language":50626,"meta":23,"style":23},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[99,53004,53005,53010,53015,53020,53025],{"__ignoreMap":23},[102,53006,53007],{"class":104,"line":105},[102,53008,53009],{"class":112},"   let arr = [1, 2, 3]\n",[102,53011,53012],{"class":104,"line":24},[102,53013,53014],{"class":112},"    for (let k in arr) {\n",[102,53016,53017],{"class":104,"line":1168},[102,53018,53019],{"class":112},"      console.log(k)\n",[102,53021,53022],{"class":104,"line":1183},[102,53023,53024],{"class":112},"      console.log(arr[k])\n",[102,53026,53027],{"class":104,"line":1189},[102,53028,2176],{"class":112},[19,53030,53031],{},[1451,53032],{"alt":23,"src":53033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53035,53036],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53038,53039],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53041,53042],{},"for in 得到的k是属性名",[51804,53044,53045],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,53047,53048],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[73,53050,53052],{"id":53051},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53054,53055],{},"数组中放对象信息",[93,53057,53061],{"className":53058,"code":53059,"language":53060,"meta":23,"style":23},"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",[99,53062,53063,53071,53076,53081,53086,53091,53096,53101,53106,53111,53116,53121,53126,53130,53134],{"__ignoreMap":23},[102,53064,53065,53067,53069],{"class":104,"line":105},[102,53066,1023],{"class":112},[102,53068,51804],{"class":51291},[102,53070,51298],{"class":112},[102,53072,53073],{"class":104,"line":24},[102,53074,53075],{"class":112},"    let students = [\n",[102,53077,53078],{"class":104,"line":1168},[102,53079,53080],{"class":112},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[102,53082,53083],{"class":104,"line":1183},[102,53084,53085],{"class":112},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[102,53087,53088],{"class":104,"line":1189},[102,53089,53090],{"class":112},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[102,53092,53093],{"class":104,"line":1203},[102,53094,53095],{"class":112},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[102,53097,53098],{"class":104,"line":1209},[102,53099,53100],{"class":112},"    ]\n",[102,53102,53103],{"class":104,"line":1300},[102,53104,53105],{"class":112},"    for (let i = 0; i \u003C students.length; i++) {\n",[102,53107,53108],{"class":104,"line":1306},[102,53109,53110],{"class":112},"      for (let k in students[i]) {\n",[102,53112,53113],{"class":104,"line":1318},[102,53114,53115],{"class":112},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[102,53117,53118],{"class":104,"line":1601},[102,53119,53120],{"class":112},"        \u002F\u002F输出每个人的名字：\n",[102,53122,53123],{"class":104,"line":1606},[102,53124,53125],{"class":112},"        \u002F\u002Fconsole.log(students[i].name)\n",[102,53127,53128],{"class":104,"line":1612},[102,53129,52389],{"class":112},[102,53131,53132],{"class":104,"line":1617},[102,53133,2176],{"class":112},[102,53135,53136,53138,53140],{"class":104,"line":1631},[102,53137,52408],{"class":112},[102,53139,51804],{"class":51291},[102,53141,51298],{"class":112},[73,53143,53145],{"id":53144},"_2106-内置对象","2.10.6 内置对象",[19,53147,53148],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[56,53150,53151],{},[59,53152,53153],{},"数学对象Math",[19,53155,53156],{},[1451,53157],{"alt":23,"src":53158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53160,53161],{},[351,53162,53165],{"href":53163,"rel":53164},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23855],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53167,53168],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53170,53171],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53173,53174],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53176,53177],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53179,53180],{},"null属于对象数据类型",[56,53182,53183],{"start":24},[59,53184,53185],{},"生成任意范围随机数",[19,53187,53188],{},[1451,53189],{"alt":23,"src":53190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53192,53193],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53195,53196],{},"乘以几就取不到几",[19,53198,53199],{},"取数组中的随机元素：",[19,53201,53202],{},"let arr = ['red', 'green', 'blue']",[19,53204,53205],{},"let random = Math.floor(Math.random() * arr.length)",[19,53207,53208],{},"console.log(arr[random])",[19,53210,53211],{},"这个函数得到的是全闭区间",[19,53213,53214],{},"function getRandom(N, M) {",[19,53216,53217],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53219,1059],{},[19,53221,53222],{},"console.log(getRandom(4, 8))",[73,53224,53226],{"id":53225},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53228,53229],{},[1451,53230],{"alt":23,"src":53231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53233,53234],{},[1451,53235],{"alt":23,"src":53236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53238,53239],{},[1451,53240],{"alt":23,"src":53241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53243,53244],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53246,53247],{},[1451,53248],{"alt":23,"src":53249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53251,53252],{},[1451,53253],{"alt":23,"src":53254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53256,53257],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53259,53260],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53262,53263],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5116,53265,53266],{},"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":23,"searchDepth":24,"depth":24,"links":53268},[53269,53277,53278,53279,53280,53281,53288,53292,53298,53307],{"id":50459,"depth":24,"text":50460,"children":53270},[53271,53272,53273,53274,53275,53276],{"id":50463,"depth":1168,"text":50464},{"id":50480,"depth":1168,"text":50481},{"id":50520,"depth":1168,"text":50521},{"id":50532,"depth":1168,"text":50533},{"id":50541,"depth":1168,"text":50542},{"id":50589,"depth":1168,"text":50590},{"id":50599,"depth":24,"text":50600},{"id":50687,"depth":24,"text":50688},{"id":50710,"depth":24,"text":50711},{"id":50722,"depth":24,"text":50723},{"id":50909,"depth":24,"text":50910,"children":53282},[53283,53284,53285,53286,53287],{"id":50913,"depth":1168,"text":50914},{"id":50922,"depth":1168,"text":50923},{"id":50950,"depth":1168,"text":50951},{"id":50986,"depth":1168,"text":50987},{"id":51011,"depth":1168,"text":51012},{"id":51023,"depth":24,"text":51024,"children":53289},[53290,53291],{"id":51044,"depth":1168,"text":51045},{"id":51138,"depth":1168,"text":51139},{"id":51196,"depth":24,"text":51197,"children":53293},[53294,53295,53296,53297],{"id":51200,"depth":1168,"text":51201},{"id":51224,"depth":1168,"text":51225},{"id":51277,"depth":1168,"text":51278},{"id":52088,"depth":1168,"text":52089},{"id":52474,"depth":24,"text":52475,"children":53299},[53300,53301,53302,53303,53304,53305,53306],{"id":52492,"depth":1168,"text":52493},{"id":52529,"depth":1168,"text":52530},{"id":52560,"depth":1168,"text":52561},{"id":52593,"depth":1168,"text":52594},{"id":52674,"depth":1168,"text":52675},{"id":52772,"depth":1168,"text":52773},{"id":52830,"depth":1168,"text":52831},{"id":52883,"depth":24,"text":52884,"children":53308},[53309,53310,53311,53312,53313,53314,53315],{"id":52887,"depth":1168,"text":52888},{"id":52912,"depth":1168,"text":52913},{"id":52964,"depth":1168,"text":52965},{"id":52984,"depth":1168,"text":52985},{"id":53051,"depth":1168,"text":53052},{"id":53144,"depth":1168,"text":53145},{"id":53225,"depth":1168,"text":53226},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50451,"description":27},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53322,"title":53323,"body":53324,"description":27,"extension":28,"meta":76664,"navigation":30,"path":76665,"seo":76666,"stem":76667,"__hash__":76668},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53325,"toc":76604},[53326,53329,53332,53335,53340,53343,53346,53349,53353,53357,53363,53368,53376,53383,53386,53390,53395,53400,53405,53408,53411,53422,53425,53429,53432,53435,53440,53445,53450,53453,53456,53548,53551,53556,53559,53564,53567,53570,53575,53578,53583,53587,53590,53604,53608,53613,53616,53619,53623,53628,53631,53635,53639,53644,53648,53653,53656,53659,53662,53665,53668,53671,53676,53681,53709,53712,53715,53718,53723,53726,53729,53732,53735,53739,53768,53772,53777,53782,53785,53788,53791,53796,53911,53916,53921,54082,54087,54090,54094,54099,54104,54107,54110,54113,54116,54119,54122,54125,54128,54131,54134,54137,54140,54143,54146,54148,54151,54154,54157,54162,54166,54563,54566,54572,54576,54581,55863,55868,55871,55874,55877,55882,57078,57082,57088,57093,57096,57101,57106,57110,57114,57119,57122,57127,57130,57133,57137,58045,58048,58052,58273,58276,58279,58282,58508,58511,58735,58738,58742,58747,58750,58753,58981,58984,59017,59020,59024,59029,59033,59036,59039,59042,59045,59048,59051,59054,59059,60339,60343,60346,61439,61443,61446,61449,61452,61455,61459,61462,61465,61467,61475,62956,62960,62963,62966,62969,63178,63181,63185,63189,63194,63199,63202,63205,63210,63214,63219,63222,63331,63335,63340,63345,63348,63351,63355,63360,63365,63370,63373,63376,63387,63390,63395,63400,63403,63406,63479,63483,63488,63491,63493,63504,63508,63513,64839,64842,64845,64848,64850,64853,64856,64859,64862,64865,64868,64871,64874,64877,64880,64883,64886,64888,64890,64893,64897,65991,65994,65997,66013,66027,66030,66035,66041,66046,66050,66054,66059,66063,66068,66510,66515,66518,66522,66527,66530,66533,66537,66542,66546,66551,66556,66560,66565,66570,66573,66578,66583,66587,66592,66597,66701,66704,66708,66713,67079,67082,67085,67088,67091,67094,67097,67100,67103,68399,68403,68408,68413,68416,68419,68422,68425,68427,68432,68437,68440,68444,68449,68454,68459,68462,68465,68468,68471,68474,68479,68482,68486,68491,68496,68500,68505,68508,68513,68516,68519,68522,68525,68528,68533,68536,68539,68542,68545,68549,68554,68557,68561,68566,68569,68572,68576,68605,68608,68612,68616,68621,68625,68630,68633,68636,68639,68642,68645,68648,68651,68654,68657,68660,68663,68666,68669,68672,68676,68681,68686,68689,68693,68697,68702,68705,68709,68712,68715,68720,68725,68730,68735,68740,68743,68746,68751,68756,68760,68765,68768,68773,68776,68779,68782,68785,68790,68793,68802,68806,68811,68814,68817,68821,68824,68829,68833,68836,68842,68848,68852,68878,68881,70442,70445,70941,70944,70949,70954,70959,70963,70968,70973,70978,70982,70987,70990,70993,70996,70999,71003,71006,71011,71014,71019,71023,71028,71031,71036,71041,71046,71049,71052,71057,71062,71065,71068,71072,71075,71080,71083,71088,71091,71096,71101,71106,71109,71114,71179,71182,71193,71197,71202,71374,71378,71383,71386,71389,71392,71396,71407,71411,71414,71419,71424,71427,71430,71433,71436,71439,71441,71444,71447,71450,71455,71458,71463,71466,71470,71473,71476,71490,71494,71497,71552,71557,71560,71563,71568,71571,71575,71580,71710,71714,71719,71724,71805,71810,71814,71817,71822,71827,71833,71836,71839,71842,71846,71851,71854,71865,71869,71886,74933,74937,74940,74943,74946,74967,74971,74974,74982,74985,74990,74993,74996,75001,75006,75010,75031,75035,75040,75043,75046,75049,75052,75056,75061,75064,75068,75073,75076,75081,75084,75089,75092,75097,76300,76304,76309,76312,76317,76601],[10,53327,53323],{"id":53328},"_3web-apis",[19,53330,53331],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53333,53334],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53336,53337],{},[1451,53338],{"alt":23,"src":53339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53341,53342],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53344,53345],{},"建议数组和对象使用 const 来声明",[19,53347,53348],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53350,53352],{"id":53351},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[73,53354,53356],{"id":53355},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53358,53359,53362],{},[99,53360,53361],{},"document"," = HTML 文件解析后的对象化表示；",[19,53364,53365,53367],{},[99,53366,53361],{}," ≠ HTML 文件本身",[19,53369,53370,53375],{},[262,53371,53372],{},[99,53373,53374],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53377,53378,53382],{},[262,53379,53380],{},[99,53381,53361],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53384,53385],{},"document实际上为window.document的简写",[73,53387,53389],{"id":53388},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53391,53392],{},[1451,53393],{"alt":23,"src":53394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53396,53397],{},[1451,53398],{"alt":23,"src":53399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53401,53402],{},[1451,53403],{"alt":23,"src":53404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53406,53407],{},"console.dir()",[19,53409,53410],{},"dir用来打印对象",[1120,53412,53413,53416,53419],{},[59,53414,53415],{},"任何一个标签，都是一个对象",[59,53417,53418],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[59,53420,53421],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53423,53424],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[73,53426,53428],{"id":53427},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53430,53431],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53433,53434],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53436,53437],{},[262,53438,53439],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[56,53441,53442],{},[59,53443,53444],{},"利用CSS选择器来获取标签元素",[19,53446,53447],{},[1451,53448],{"alt":23,"src":53449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53451,53452],{},"里边的选择器必须必须加引号！！！",[19,53454,53455],{},"只选择第一个元素",[93,53457,53459],{"className":53058,"code":53458,"language":53060,"meta":23,"style":23},"\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",[99,53460,53461,53469,53490,53509,53517,53522,53527,53532,53540],{"__ignoreMap":23},[102,53462,53463,53465,53467],{"class":104,"line":105},[102,53464,1023],{"class":112},[102,53466,51791],{"class":51291},[102,53468,51298],{"class":112},[102,53470,53471,53473,53475,53478,53480,53483,53486,53488],{"class":104,"line":24},[102,53472,52135],{"class":112},[102,53474,51602],{"class":51291},[102,53476,53477],{"class":1952}," class",[102,53479,158],{"class":112},[102,53481,53482],{"class":217},"\"box\"",[102,53484,53485],{"class":112},">123\u003C\u002F",[102,53487,51602],{"class":51291},[102,53489,51298],{"class":112},[102,53491,53492,53494,53496,53498,53500,53502,53505,53507],{"class":104,"line":1168},[102,53493,52135],{"class":112},[102,53495,51602],{"class":51291},[102,53497,53477],{"class":1952},[102,53499,158],{"class":112},[102,53501,53482],{"class":217},[102,53503,53504],{"class":112},">456\u003C\u002F",[102,53506,51602],{"class":51291},[102,53508,51298],{"class":112},[102,53510,53511,53513,53515],{"class":104,"line":1183},[102,53512,52135],{"class":112},[102,53514,51804],{"class":51291},[102,53516,51298],{"class":112},[102,53518,53519],{"class":104,"line":1189},[102,53520,53521],{"class":112},"    \u002F\u002F 1.获取匹配的第一个元素\n",[102,53523,53524],{"class":104,"line":1203},[102,53525,53526],{"class":112},"    const box = document.querySelector('div')\n",[102,53528,53529],{"class":104,"line":1209},[102,53530,53531],{"class":112},"    console.dir(box)\n",[102,53533,53534,53536,53538],{"class":104,"line":1300},[102,53535,52408],{"class":112},[102,53537,51804],{"class":51291},[102,53539,51298],{"class":112},[102,53541,53542,53544,53546],{"class":104,"line":1306},[102,53543,51776],{"class":112},[102,53545,51791],{"class":51291},[102,53547,51298],{"class":112},[19,53549,53550],{},"只选123，不选456",[19,53552,53553],{},[1451,53554],{"alt":23,"src":53555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53557,53558],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53560,53561],{},[1451,53562],{"alt":23,"src":53563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53565,53566],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53568,53569],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[56,53571,53572],{"start":24},[59,53573,53574],{},"其他方法来获取标签元素",[19,53576,53577],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53579,53580],{},[1451,53581],{"alt":23,"src":53582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[73,53584,53586],{"id":53585},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53588,53589],{},"设置修改DOM元素内容有两种方式：",[1120,53591,53592,53595,53598,53601],{},[59,53593,53594],{},"元素.innerText=''",[59,53596,53597],{},"元素.innerHTML=''",[59,53599,53600],{},"不写字符串输出数字也是可以的",[59,53602,53603],{},"元素.innerHtml=1",[21988,53605,53607],{"id":53606},"_3131-innertext","3.1.3.1 innerText",[19,53609,53610],{},[1451,53611],{"alt":23,"src":53612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53614,53615],{},"思路：实现了修改盒子中的内容！",[19,53617,53618],{},"它只显示纯文本，不解析标签",[21988,53620,53622],{"id":53621},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53624,53625],{},[1451,53626],{"alt":23,"src":53627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53629,53630],{},"相比于innerText，他的强大之处在于可以解析标签",[73,53632,53634],{"id":53633},"_314-操作元素属性","3.1.4 操作元素属性",[21988,53636,53638],{"id":53637},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53640,53641],{},[1451,53642],{"alt":23,"src":53643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21988,53645,53647],{"id":53646},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53649,53650],{},[1451,53651],{"alt":23,"src":53652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53654,53655],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53657,53658],{},"div.style.backgroundColor = 'hotpink'",[19,53660,53661],{},"如果按照css的写法，-表示减，就会出错",[19,53663,53664],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53666,53667],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53669,53670],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53672,53673],{},[1451,53674],{"alt":23,"src":53675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53677,53678],{},[1451,53679],{"alt":23,"src":53680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[56,53682,53683,53686,53689,53692,53695,53698],{},[59,53684,53685],{},"className这个方式就是修改很多样式的时候来使用的！",[59,53687,53688],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[59,53690,53691],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[59,53693,53694],{},"className为属性名，如果还用class的话就导致与关键字冲突",[59,53696,53697],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[59,53699,53700,53701,53706],{},"解析标签的时候就变为了",[51602,53702],{"className":53703},[53704,53705],"nav","box",[53707,53708],"br",{},[19,53710,53711],{},"例子：",[51602,53713],{"className":53714},[53704],[51804,53716,53717],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,53719,53720],{},[1451,53721],{"alt":23,"src":53722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,53724,53725],{},"追加和删除类名用classList",[19,53727,53728],{},"常用于类似于开关的操作",[19,53730,53731],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,53733,53734],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21988,53736,53738],{"id":53737},"_3143-牢记点","3.1.4.3 牢记点",[56,53740,53741,53744,53747,53750,53753,53756,53759,53762,53765],{},[59,53742,53743],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[59,53745,53746],{},"使用style属性操作css时不要忘记引号",[59,53748,53749],{},"使用className或者classList时也不要忘记引号",[59,53751,53752],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[59,53754,53755],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[59,53757,53758],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[59,53760,53761],{},"若： let arr=['1','2',3] arr[0]=1",[59,53763,53764],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[59,53766,53767],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[73,53769,53771],{"id":53770},"_315-操作表单元素","3.1.5 操作表单元素",[56,53773,53774],{},[59,53775,53776],{},"天生的属性",[19,53778,53779],{},[1451,53780],{"alt":23,"src":53781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,53783,53784],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,53786,53787],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,53789,53790],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,53792,53793],{},[1451,53794],{"alt":23,"src":53795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[93,53797,53799],{"className":50624,"code":53798,"language":50626,"meta":23,"style":23},"在复选框中如果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",[99,53800,53801,53806,53838,53843,53848,53853,53858,53862,53867,53872,53889,53901,53906],{"__ignoreMap":23},[102,53802,53803],{"class":104,"line":105},[102,53804,53805],{"class":112},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[102,53807,53808,53810,53813,53816,53818,53821,53823,53825,53827,53829,53831,53833,53836],{"class":104,"line":24},[102,53809,1023],{"class":112},[102,53811,53812],{"class":51291},"input",[102,53814,53815],{"class":1952}," type",[102,53817,158],{"class":112},[102,53819,53820],{"class":217},"\"checkbox\"",[102,53822,14910],{"class":1952},[102,53824,158],{"class":112},[102,53826,7642],{"class":217},[102,53828,14949],{"class":1952},[102,53830,158],{"class":112},[102,53832,7642],{"class":217},[102,53834,53835],{"class":1952}," checked",[102,53837,51298],{"class":112},[102,53839,53840],{"class":104,"line":1168},[102,53841,53842],{"class":112},"不选的话：\n",[102,53844,53845],{"class":104,"line":1183},[102,53846,53847],{"class":112},"const input = document.querySelector('input')\n",[102,53849,53850],{"class":104,"line":1189},[102,53851,53852],{"class":112},"input.checked=false\n",[102,53854,53855],{"class":104,"line":1203},[102,53856,53857],{"class":112},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[102,53859,53860],{"class":104,"line":1209},[102,53861,2389],{"emptyLinePlaceholder":30},[102,53863,53864],{"class":104,"line":1300},[102,53865,53866],{"class":112},"禁用按钮：\n",[102,53868,53869],{"class":104,"line":1306},[102,53870,53871],{"class":112},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[102,53873,53874,53876,53879,53882,53885,53887],{"class":104,"line":1318},[102,53875,1023],{"class":112},[102,53877,53878],{"class":51291},"button",[102,53880,53881],{"class":1952}," disabled",[102,53883,53884],{"class":112},">点击\u003C\u002F",[102,53886,53878],{"class":51291},[102,53888,51298],{"class":112},[102,53890,53891,53893,53895,53897,53899],{"class":104,"line":1601},[102,53892,1023],{"class":112},[102,53894,53878],{"class":51291},[102,53896,53884],{"class":112},[102,53898,53878],{"class":51291},[102,53900,51298],{"class":112},[102,53902,53903],{"class":104,"line":1606},[102,53904,53905],{"class":112},"const bt = document.querySelector('button')\n",[102,53907,53908],{"class":104,"line":1612},[102,53909,53910],{"class":112},"bt.disabled = false\n",[56,53912,53913],{"start":24},[59,53914,53915],{},"自定义属性",[19,53917,53918],{},[1451,53919],{"alt":23,"src":53920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[93,53922,53924],{"className":53058,"code":53923,"language":53060,"meta":23,"style":23},"\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",[99,53925,53926,53934,53962,53981,54000,54019,54038,54046,54051,54056,54061,54066,54074],{"__ignoreMap":23},[102,53927,53928,53930,53932],{"class":104,"line":105},[102,53929,1023],{"class":112},[102,53931,51791],{"class":51291},[102,53933,51298],{"class":112},[102,53935,53936,53938,53940,53943,53945,53947,53950,53952,53955,53958,53960],{"class":104,"line":24},[102,53937,52135],{"class":112},[102,53939,51602],{"class":51291},[102,53941,53942],{"class":1952}," data-id",[102,53944,158],{"class":112},[102,53946,3667],{"class":217},[102,53948,53949],{"class":1952}," data-spm",[102,53951,158],{"class":112},[102,53953,53954],{"class":217},"\"我不知道\"",[102,53956,53957],{"class":112},">1\u003C\u002F",[102,53959,51602],{"class":51291},[102,53961,51298],{"class":112},[102,53963,53964,53966,53968,53970,53972,53974,53977,53979],{"class":104,"line":1168},[102,53965,52135],{"class":112},[102,53967,51602],{"class":51291},[102,53969,53942],{"class":1952},[102,53971,158],{"class":112},[102,53973,3690],{"class":217},[102,53975,53976],{"class":112},">2\u003C\u002F",[102,53978,51602],{"class":51291},[102,53980,51298],{"class":112},[102,53982,53983,53985,53987,53989,53991,53993,53996,53998],{"class":104,"line":1183},[102,53984,52135],{"class":112},[102,53986,51602],{"class":51291},[102,53988,53942],{"class":1952},[102,53990,158],{"class":112},[102,53992,3703],{"class":217},[102,53994,53995],{"class":112},">3\u003C\u002F",[102,53997,51602],{"class":51291},[102,53999,51298],{"class":112},[102,54001,54002,54004,54006,54008,54010,54012,54015,54017],{"class":104,"line":1189},[102,54003,52135],{"class":112},[102,54005,51602],{"class":51291},[102,54007,53942],{"class":1952},[102,54009,158],{"class":112},[102,54011,3716],{"class":217},[102,54013,54014],{"class":112},">4\u003C\u002F",[102,54016,51602],{"class":51291},[102,54018,51298],{"class":112},[102,54020,54021,54023,54025,54027,54029,54031,54034,54036],{"class":104,"line":1203},[102,54022,52135],{"class":112},[102,54024,51602],{"class":51291},[102,54026,53942],{"class":1952},[102,54028,158],{"class":112},[102,54030,3737],{"class":217},[102,54032,54033],{"class":112},">5\u003C\u002F",[102,54035,51602],{"class":51291},[102,54037,51298],{"class":112},[102,54039,54040,54042,54044],{"class":104,"line":1209},[102,54041,52135],{"class":112},[102,54043,51804],{"class":51291},[102,54045,51298],{"class":112},[102,54047,54048],{"class":104,"line":1300},[102,54049,54050],{"class":112},"    const one = document.querySelector('div')\n",[102,54052,54053],{"class":104,"line":1306},[102,54054,54055],{"class":112},"    console.log(one.dataset)\n",[102,54057,54058],{"class":104,"line":1318},[102,54059,54060],{"class":112},"    console.log(one.dataset.id)\n",[102,54062,54063],{"class":104,"line":1601},[102,54064,54065],{"class":112},"    console.log(one.dataset.spm)\n",[102,54067,54068,54070,54072],{"class":104,"line":1606},[102,54069,52408],{"class":112},[102,54071,51804],{"class":51291},[102,54073,51298],{"class":112},[102,54075,54076,54078,54080],{"class":104,"line":1612},[102,54077,51776],{"class":112},[102,54079,51791],{"class":51291},[102,54081,51298],{"class":112},[19,54083,54084],{},[1451,54085],{"alt":23,"src":54086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54088,54089],{},"document.querySelector选择的是第一个对象（元素）",[73,54091,54093],{"id":54092},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54095,54096],{},[1451,54097],{"alt":23,"src":54098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54100,54101],{},[1451,54102],{"alt":23,"src":54103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54105,54106],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51804,54108,54109],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54111,54112],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51804,54114,54115],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,54117,54118],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54120,54121],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54123,54124],{},"单位为毫秒！！！",[19,54126,54127],{},"可以搭配匿名函数来用！！！",[19,54129,54130],{},"setInterval(function () {",[19,54132,54133],{},"alert('两秒执行一次')",[19,54135,54136],{},"}, 2000)",[19,54138,54139],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54141,54142],{},"function fn() {",[19,54144,54145],{},"document.write(1)",[19,54147,1059],{},[19,54149,54150],{},"setInterval(fn, 1000)",[19,54152,54153],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54155,54156],{},"setInterval('fn()', 1000)",[19,54158,54159],{},[1451,54160],{"alt":23,"src":54161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21988,54163,54165],{"id":54164},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[93,54167,54169],{"className":50624,"code":54168,"language":50626,"meta":23,"style":23},"\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",[99,54170,54171,54181,54195,54199,54207,54221,54241,54253,54261,54265,54273,54310,54315,54320,54325,54333,54341,54363,54371,54376,54398,54403,54408,54419,54424,54444,54452,54467,54482,54493,54498,54508,54518,54522,54531,54535,54543,54551,54555],{"__ignoreMap":23},[102,54172,54173,54175,54177,54179],{"class":104,"line":105},[102,54174,51288],{"class":112},[102,54176,51292],{"class":51291},[102,54178,51295],{"class":1952},[102,54180,51298],{"class":112},[102,54182,54183,54185,54187,54189,54191,54193],{"class":104,"line":24},[102,54184,1023],{"class":112},[102,54186,50626],{"class":51291},[102,54188,51307],{"class":1952},[102,54190,158],{"class":112},[102,54192,51312],{"class":217},[102,54194,51298],{"class":112},[102,54196,54197],{"class":104,"line":1168},[102,54198,2389],{"emptyLinePlaceholder":30},[102,54200,54201,54203,54205],{"class":104,"line":1183},[102,54202,1023],{"class":112},[102,54204,51325],{"class":51291},[102,54206,51298],{"class":112},[102,54208,54209,54211,54213,54215,54217,54219],{"class":104,"line":1189},[102,54210,52135],{"class":112},[102,54212,51335],{"class":51291},[102,54214,51338],{"class":1952},[102,54216,158],{"class":112},[102,54218,51343],{"class":217},[102,54220,51298],{"class":112},[102,54222,54223,54225,54227,54229,54231,54233,54235,54237,54239],{"class":104,"line":1203},[102,54224,52135],{"class":112},[102,54226,51335],{"class":51291},[102,54228,14910],{"class":1952},[102,54230,158],{"class":112},[102,54232,51382],{"class":217},[102,54234,51362],{"class":1952},[102,54236,158],{"class":112},[102,54238,51389],{"class":217},[102,54240,51298],{"class":112},[102,54242,54243,54245,54247,54249,54251],{"class":104,"line":1209},[102,54244,52135],{"class":112},[102,54246,51398],{"class":51291},[102,54248,51401],{"class":112},[102,54250,51398],{"class":51291},[102,54252,51298],{"class":112},[102,54254,54255,54257,54259],{"class":104,"line":1300},[102,54256,51776],{"class":112},[102,54258,51325],{"class":51291},[102,54260,51298],{"class":112},[102,54262,54263],{"class":104,"line":1306},[102,54264,2389],{"emptyLinePlaceholder":30},[102,54266,54267,54269,54271],{"class":104,"line":1318},[102,54268,1023],{"class":112},[102,54270,51791],{"class":51291},[102,54272,51298],{"class":112},[102,54274,54275,54277,54280,54282,54284,54286,54288,54290,54292,54295,54297,54300,54303,54305,54308],{"class":104,"line":1601},[102,54276,52135],{"class":112},[102,54278,54279],{"class":51291},"textarea",[102,54281,14910],{"class":1952},[102,54283,158],{"class":112},[102,54285,7642],{"class":217},[102,54287,14949],{"class":1952},[102,54289,158],{"class":112},[102,54291,7642],{"class":217},[102,54293,54294],{"class":1952}," cols",[102,54296,158],{"class":112},[102,54298,54299],{"class":217},"\"30\"",[102,54301,54302],{"class":1952}," rows",[102,54304,158],{"class":112},[102,54306,54307],{"class":217},"\"10\"",[102,54309,51298],{"class":112},[102,54311,54312],{"class":104,"line":1606},[102,54313,54314],{"class":112},"        用户注册协议\n",[102,54316,54317],{"class":104,"line":1612},[102,54318,54319],{"class":112},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[102,54321,54322],{"class":104,"line":1617},[102,54323,54324],{"class":112},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[102,54326,54327,54329,54331],{"class":104,"line":1631},[102,54328,51767],{"class":112},[102,54330,54279],{"class":51291},[102,54332,51298],{"class":112},[102,54334,54335,54337,54339],{"class":104,"line":1636},[102,54336,52135],{"class":112},[102,54338,53707],{"class":51291},[102,54340,51298],{"class":112},[102,54342,54343,54345,54347,54349,54351,54354,54356,54359,54361],{"class":104,"line":1642},[102,54344,52135],{"class":112},[102,54346,53878],{"class":51291},[102,54348,53477],{"class":1952},[102,54350,158],{"class":112},[102,54352,54353],{"class":217},"\"btn\"",[102,54355,53881],{"class":1952},[102,54357,54358],{"class":112},">我已经阅读用户协议(5)\u003C\u002F",[102,54360,53878],{"class":51291},[102,54362,51298],{"class":112},[102,54364,54365,54367,54369],{"class":104,"line":1663},[102,54366,52135],{"class":112},[102,54368,51804],{"class":51291},[102,54370,51298],{"class":112},[102,54372,54373],{"class":104,"line":1668},[102,54374,54375],{"class":171},"    \u002F\u002F 1. 获取元素\n",[102,54377,54378,54380,54383,54385,54388,54391,54393,54396],{"class":104,"line":1682},[102,54379,11211],{"class":108},[102,54381,54382],{"class":161}," btn",[102,54384,13554],{"class":108},[102,54386,54387],{"class":112}," document.",[102,54389,54390],{"class":1952},"querySelector",[102,54392,113],{"class":112},[102,54394,54395],{"class":217},"'.btn'",[102,54397,119],{"class":112},[102,54399,54400],{"class":104,"line":1687},[102,54401,54402],{"class":171},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[102,54404,54405],{"class":104,"line":1716},[102,54406,54407],{"class":171},"    \u002F\u002F 2. 倒计时\n",[102,54409,54410,54412,54414,54416],{"class":104,"line":1721},[102,54411,52210],{"class":108},[102,54413,9428],{"class":112},[102,54415,158],{"class":108},[102,54417,54418],{"class":161}," 5\n",[102,54420,54421],{"class":104,"line":1738},[102,54422,54423],{"class":171},"    \u002F\u002F 2.1 开启定时器\n",[102,54425,54426,54428,54431,54433,54436,54438,54441],{"class":104,"line":1743},[102,54427,52210],{"class":108},[102,54429,54430],{"class":112}," n ",[102,54432,158],{"class":108},[102,54434,54435],{"class":1952}," setInterval",[102,54437,113],{"class":112},[102,54439,54440],{"class":108},"function",[102,54442,54443],{"class":112}," () {\n",[102,54445,54446,54449],{"class":104,"line":1748},[102,54447,54448],{"class":112},"      i",[102,54450,54451],{"class":108},"--\n",[102,54453,54454,54457,54459,54462,54464],{"class":104,"line":1753},[102,54455,54456],{"class":112},"      btn.innerHTML ",[102,54458,158],{"class":108},[102,54460,54461],{"class":217}," `我已经阅读用户协议(${",[102,54463,554],{"class":112},[102,54465,54466],{"class":217},"})`\n",[102,54468,54469,54472,54475,54478,54480],{"class":104,"line":1767},[102,54470,54471],{"class":108},"      if",[102,54473,54474],{"class":112}," (i ",[102,54476,54477],{"class":108},"===",[102,54479,4082],{"class":161},[102,54481,12432],{"class":112},[102,54483,54484,54487,54490],{"class":104,"line":1772},[102,54485,54486],{"class":1952},"        clearInterval",[102,54488,54489],{"class":112},"(n)  ",[102,54491,54492],{"class":171},"\u002F\u002F 关闭定时器\n",[102,54494,54495],{"class":104,"line":2566},[102,54496,54497],{"class":171},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[102,54499,54500,54503,54505],{"class":104,"line":2580},[102,54501,54502],{"class":112},"        btn.disabled ",[102,54504,158],{"class":108},[102,54506,54507],{"class":161}," false\n",[102,54509,54510,54513,54515],{"class":104,"line":2588},[102,54511,54512],{"class":112},"        btn.innerHTML ",[102,54514,158],{"class":108},[102,54516,54517],{"class":217}," '同意'\n",[102,54519,54520],{"class":104,"line":2593},[102,54521,52389],{"class":112},[102,54523,54524,54527,54529],{"class":104,"line":2599},[102,54525,54526],{"class":112},"    }, ",[102,54528,6400],{"class":161},[102,54530,119],{"class":112},[102,54532,54533],{"class":104,"line":2605},[102,54534,2389],{"emptyLinePlaceholder":30},[102,54536,54537,54539,54541],{"class":104,"line":2610},[102,54538,52408],{"class":112},[102,54540,51804],{"class":51291},[102,54542,51298],{"class":112},[102,54544,54545,54547,54549],{"class":104,"line":7938},[102,54546,51776],{"class":112},[102,54548,51791],{"class":51291},[102,54550,51298],{"class":112},[102,54552,54553],{"class":104,"line":7962},[102,54554,2389],{"emptyLinePlaceholder":30},[102,54556,54557,54559,54561],{"class":104,"line":7967},[102,54558,51776],{"class":112},[102,54560,50626],{"class":51291},[102,54562,51298],{"class":112},[19,54564,54565],{},"不要一直想着用死循环,避免死循环",[19,54567,54568,54571],{},[99,54569,54570],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21988,54573,54575],{"id":54574},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[56,54577,54578],{},[59,54579,54580],{},"法1",[93,54582,54584],{"className":50624,"code":54583,"language":50626,"meta":23,"style":23},"\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",[99,54585,54586,54596,54610,54614,54622,54636,54656,54668,54676,54682,54693,54704,54708,54712,54719,54731,54735,54739,54746,54758,54772,54785,54799,54803,54807,54814,54825,54836,54847,54859,54871,54883,54887,54891,54899,54909,54922,54934,54947,54951,54955,54962,54972,54984,54996,55007,55018,55028,55040,55052,55056,55060,55069,55081,55093,55121,55134,55138,55142,55149,55160,55164,55172,55180,55184,55192,55206,55221,55245,55253,55268,55281,55289,55310,55322,55334,55346,55358,55370,55382,55394,55403,55411,55419,55427,55439,55462,55481,55500,55519,55538,55557,55576,55596,55600,55620,55639,55659,55680,55691,55708,55718,55728,55738,55743,55748,55753,55758,55783,55796,55800,55823,55827,55835,55843,55851,55855],{"__ignoreMap":23},[102,54587,54588,54590,54592,54594],{"class":104,"line":105},[102,54589,51288],{"class":112},[102,54591,51292],{"class":51291},[102,54593,51295],{"class":1952},[102,54595,51298],{"class":112},[102,54597,54598,54600,54602,54604,54606,54608],{"class":104,"line":24},[102,54599,1023],{"class":112},[102,54601,50626],{"class":51291},[102,54603,51307],{"class":1952},[102,54605,158],{"class":112},[102,54607,51312],{"class":217},[102,54609,51298],{"class":112},[102,54611,54612],{"class":104,"line":1168},[102,54613,2389],{"emptyLinePlaceholder":30},[102,54615,54616,54618,54620],{"class":104,"line":1183},[102,54617,1023],{"class":112},[102,54619,51325],{"class":51291},[102,54621,51298],{"class":112},[102,54623,54624,54626,54628,54630,54632,54634],{"class":104,"line":1189},[102,54625,52135],{"class":112},[102,54627,51335],{"class":51291},[102,54629,51338],{"class":1952},[102,54631,158],{"class":112},[102,54633,51343],{"class":217},[102,54635,51298],{"class":112},[102,54637,54638,54640,54642,54644,54646,54648,54650,54652,54654],{"class":104,"line":1203},[102,54639,52135],{"class":112},[102,54641,51335],{"class":51291},[102,54643,14910],{"class":1952},[102,54645,158],{"class":112},[102,54647,51382],{"class":217},[102,54649,51362],{"class":1952},[102,54651,158],{"class":112},[102,54653,51389],{"class":217},[102,54655,51298],{"class":112},[102,54657,54658,54660,54662,54664,54666],{"class":104,"line":1209},[102,54659,52135],{"class":112},[102,54661,51398],{"class":51291},[102,54663,51401],{"class":112},[102,54665,51398],{"class":51291},[102,54667,51298],{"class":112},[102,54669,54670,54672,54674],{"class":104,"line":1300},[102,54671,52135],{"class":112},[102,54673,5116],{"class":51291},[102,54675,51298],{"class":112},[102,54677,54678,54680],{"class":104,"line":1306},[102,54679,6393],{"class":51291},[102,54681,15562],{"class":112},[102,54683,54684,54687,54689,54691],{"class":104,"line":1318},[102,54685,54686],{"class":161},"      padding",[102,54688,51428],{"class":112},[102,54690,304],{"class":161},[102,54692,1279],{"class":112},[102,54694,54695,54698,54700,54702],{"class":104,"line":1601},[102,54696,54697],{"class":161},"      margin",[102,54699,51428],{"class":112},[102,54701,304],{"class":161},[102,54703,1279],{"class":112},[102,54705,54706],{"class":104,"line":1606},[102,54707,2176],{"class":112},[102,54709,54710],{"class":104,"line":1612},[102,54711,2389],{"emptyLinePlaceholder":30},[102,54713,54714,54717],{"class":104,"line":1617},[102,54715,54716],{"class":51291},"    li",[102,54718,15562],{"class":112},[102,54720,54721,54724,54726,54729],{"class":104,"line":1631},[102,54722,54723],{"class":161},"      list-style",[102,54725,51428],{"class":112},[102,54727,54728],{"class":161},"none",[102,54730,1279],{"class":112},[102,54732,54733],{"class":104,"line":1636},[102,54734,2176],{"class":112},[102,54736,54737],{"class":104,"line":1642},[102,54738,2389],{"emptyLinePlaceholder":30},[102,54740,54741,54744],{"class":104,"line":1663},[102,54742,54743],{"class":1952},"    .box",[102,54745,15562],{"class":112},[102,54747,54748,54751,54753,54756],{"class":104,"line":1668},[102,54749,54750],{"class":161},"      position",[102,54752,51428],{"class":112},[102,54754,54755],{"class":161},"relative",[102,54757,1279],{"class":112},[102,54759,54760,54763,54765,54768,54770],{"class":104,"line":1682},[102,54761,54762],{"class":161},"      width",[102,54764,51428],{"class":112},[102,54766,54767],{"class":161},"976",[102,54769,51483],{"class":108},[102,54771,1279],{"class":112},[102,54773,54774,54777,54779,54781,54783],{"class":104,"line":1687},[102,54775,54776],{"class":161},"      height",[102,54778,51428],{"class":112},[102,54780,1528],{"class":161},[102,54782,51483],{"class":108},[102,54784,1279],{"class":112},[102,54786,54787,54789,54791,54793,54795,54797],{"class":104,"line":1716},[102,54788,54697],{"class":161},[102,54790,51428],{"class":112},[102,54792,424],{"class":161},[102,54794,51483],{"class":108},[102,54796,51547],{"class":161},[102,54798,1279],{"class":112},[102,54800,54801],{"class":104,"line":1721},[102,54802,2176],{"class":112},[102,54804,54805],{"class":104,"line":1738},[102,54806,2389],{"emptyLinePlaceholder":30},[102,54808,54809,54812],{"class":104,"line":1743},[102,54810,54811],{"class":1952},"    .slider-footer",[102,54813,15562],{"class":112},[102,54815,54816,54818,54820,54823],{"class":104,"line":1748},[102,54817,54750],{"class":161},[102,54819,51428],{"class":112},[102,54821,54822],{"class":161},"absolute",[102,54824,1279],{"class":112},[102,54826,54827,54830,54832,54834],{"class":104,"line":1753},[102,54828,54829],{"class":161},"      left",[102,54831,51428],{"class":112},[102,54833,304],{"class":161},[102,54835,1279],{"class":112},[102,54837,54838,54841,54843,54845],{"class":104,"line":1767},[102,54839,54840],{"class":161},"      bottom",[102,54842,51428],{"class":112},[102,54844,304],{"class":161},[102,54846,1279],{"class":112},[102,54848,54849,54851,54853,54855,54857],{"class":104,"line":1772},[102,54850,54762],{"class":161},[102,54852,51428],{"class":112},[102,54854,424],{"class":161},[102,54856,441],{"class":108},[102,54858,1279],{"class":112},[102,54860,54861,54863,54865,54867,54869],{"class":104,"line":2566},[102,54862,54776],{"class":161},[102,54864,51428],{"class":112},[102,54866,688],{"class":161},[102,54868,441],{"class":108},[102,54870,1279],{"class":112},[102,54872,54873,54876,54878,54881],{"class":104,"line":2580},[102,54874,54875],{"class":161},"      background-color",[102,54877,51428],{"class":112},[102,54879,54880],{"class":161},"skyblue",[102,54882,1279],{"class":112},[102,54884,54885],{"class":104,"line":2588},[102,54886,2176],{"class":112},[102,54888,54889],{"class":104,"line":2593},[102,54890,2389],{"emptyLinePlaceholder":30},[102,54892,54893,54895,54897],{"class":104,"line":2599},[102,54894,54811],{"class":1952},[102,54896,6815],{"class":51291},[102,54898,15562],{"class":112},[102,54900,54901,54903,54905,54907],{"class":104,"line":2605},[102,54902,54750],{"class":161},[102,54904,51428],{"class":112},[102,54906,54822],{"class":161},[102,54908,1279],{"class":112},[102,54910,54911,54914,54916,54918,54920],{"class":104,"line":2610},[102,54912,54913],{"class":161},"      font-size",[102,54915,51428],{"class":112},[102,54917,1014],{"class":161},[102,54919,51483],{"class":108},[102,54921,1279],{"class":112},[102,54923,54924,54926,54928,54930,54932],{"class":104,"line":7938},[102,54925,54829],{"class":161},[102,54927,51428],{"class":112},[102,54929,813],{"class":161},[102,54931,51483],{"class":108},[102,54933,1279],{"class":112},[102,54935,54936,54939,54941,54943,54945],{"class":104,"line":7962},[102,54937,54938],{"class":161},"      top",[102,54940,51428],{"class":112},[102,54942,432],{"class":161},[102,54944,51483],{"class":108},[102,54946,1279],{"class":112},[102,54948,54949],{"class":104,"line":7967},[102,54950,2176],{"class":112},[102,54952,54953],{"class":104,"line":7973},[102,54954,2389],{"emptyLinePlaceholder":30},[102,54956,54957,54960],{"class":104,"line":8000},[102,54958,54959],{"class":51291},"    ul",[102,54961,15562],{"class":112},[102,54963,54964,54966,54968,54970],{"class":104,"line":8005},[102,54965,54750],{"class":161},[102,54967,51428],{"class":112},[102,54969,54822],{"class":161},[102,54971,1279],{"class":112},[102,54973,54974,54976,54978,54980,54982],{"class":104,"line":8011},[102,54975,54938],{"class":161},[102,54977,51428],{"class":112},[102,54979,894],{"class":161},[102,54981,51483],{"class":108},[102,54983,1279],{"class":112},[102,54985,54986,54988,54990,54992,54994],{"class":104,"line":8023},[102,54987,54829],{"class":161},[102,54989,51428],{"class":112},[102,54991,813],{"class":161},[102,54993,51483],{"class":108},[102,54995,1279],{"class":112},[102,54997,54998,55001,55003,55005],{"class":104,"line":8035},[102,54999,55000],{"class":161},"      display",[102,55002,51428],{"class":112},[102,55004,51468],{"class":161},[102,55006,1279],{"class":112},[102,55008,55009,55012,55014,55016],{"class":104,"line":8047},[102,55010,55011],{"class":161},"      justify-content",[102,55013,51428],{"class":112},[102,55015,51659],{"class":161},[102,55017,1279],{"class":112},[102,55019,55020,55022,55024,55026],{"class":104,"line":9706},[102,55021,54750],{"class":161},[102,55023,51428],{"class":112},[102,55025,54822],{"class":161},[102,55027,1279],{"class":112},[102,55029,55030,55032,55034,55036,55038],{"class":104,"line":9731},[102,55031,54762],{"class":161},[102,55033,51428],{"class":112},[102,55035,3981],{"class":161},[102,55037,51483],{"class":108},[102,55039,1279],{"class":112},[102,55041,55042,55044,55046,55048,55050],{"class":104,"line":9754},[102,55043,54776],{"class":161},[102,55045,51428],{"class":112},[102,55047,813],{"class":161},[102,55049,51483],{"class":108},[102,55051,1279],{"class":112},[102,55053,55054],{"class":104,"line":9778},[102,55055,2176],{"class":112},[102,55057,55058],{"class":104,"line":9783},[102,55059,2389],{"emptyLinePlaceholder":30},[102,55061,55062,55064,55067],{"class":104,"line":9788},[102,55063,54959],{"class":51291},[102,55065,55066],{"class":51291}," li",[102,55068,15562],{"class":112},[102,55070,55071,55073,55075,55077,55079],{"class":104,"line":9793},[102,55072,54762],{"class":161},[102,55074,51428],{"class":112},[102,55076,813],{"class":161},[102,55078,51483],{"class":108},[102,55080,1279],{"class":112},[102,55082,55083,55085,55087,55089,55091],{"class":104,"line":9802},[102,55084,54776],{"class":161},[102,55086,51428],{"class":112},[102,55088,813],{"class":161},[102,55090,51483],{"class":108},[102,55092,1279],{"class":112},[102,55094,55095,55097,55099,55102,55104,55106,55108,55110,55112,55114,55116,55119],{"class":104,"line":9807},[102,55096,54875],{"class":161},[102,55098,51428],{"class":112},[102,55100,55101],{"class":161},"rgba",[102,55103,113],{"class":112},[102,55105,304],{"class":161},[102,55107,12425],{"class":112},[102,55109,304],{"class":161},[102,55111,12425],{"class":112},[102,55113,304],{"class":161},[102,55115,12425],{"class":112},[102,55117,55118],{"class":161},".4",[102,55120,2708],{"class":112},[102,55122,55123,55126,55128,55130,55132],{"class":104,"line":9813},[102,55124,55125],{"class":161},"      border-radius",[102,55127,51428],{"class":112},[102,55129,559],{"class":161},[102,55131,51483],{"class":108},[102,55133,1279],{"class":112},[102,55135,55136],{"class":104,"line":9834},[102,55137,2176],{"class":112},[102,55139,55140],{"class":104,"line":9840},[102,55141,2389],{"emptyLinePlaceholder":30},[102,55143,55144,55147],{"class":104,"line":9854},[102,55145,55146],{"class":1952},"    .activate",[102,55148,15562],{"class":112},[102,55150,55151,55153,55155,55158],{"class":104,"line":9860},[102,55152,54875],{"class":161},[102,55154,51428],{"class":112},[102,55156,55157],{"class":161},"#f7f7f7",[102,55159,1279],{"class":112},[102,55161,55162],{"class":104,"line":9887},[102,55163,2176],{"class":112},[102,55165,55166,55168,55170],{"class":104,"line":9896},[102,55167,52408],{"class":112},[102,55169,5116],{"class":51291},[102,55171,51298],{"class":112},[102,55173,55174,55176,55178],{"class":104,"line":9902},[102,55175,51776],{"class":112},[102,55177,51325],{"class":51291},[102,55179,51298],{"class":112},[102,55181,55182],{"class":104,"line":9910},[102,55183,2389],{"emptyLinePlaceholder":30},[102,55185,55186,55188,55190],{"class":104,"line":9915},[102,55187,1023],{"class":112},[102,55189,51791],{"class":51291},[102,55191,51298],{"class":112},[102,55193,55194,55196,55198,55200,55202,55204],{"class":104,"line":16594},[102,55195,52135],{"class":112},[102,55197,51602],{"class":51291},[102,55199,53477],{"class":1952},[102,55201,158],{"class":112},[102,55203,53482],{"class":217},[102,55205,51298],{"class":112},[102,55207,55208,55210,55212,55214,55216,55219],{"class":104,"line":16600},[102,55209,51332],{"class":112},[102,55211,51602],{"class":51291},[102,55213,53477],{"class":1952},[102,55215,158],{"class":112},[102,55217,55218],{"class":217},"\"slider-wrapper\"",[102,55220,51298],{"class":112},[102,55222,55223,55226,55228,55231,55233,55236,55239,55241,55243],{"class":104,"line":16623},[102,55224,55225],{"class":112},"      \u003C",[102,55227,1451],{"class":51291},[102,55229,55230],{"class":1952}," src",[102,55232,158],{"class":112},[102,55234,55235],{"class":217},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[102,55237,55238],{"class":1952}," alt",[102,55240,158],{"class":112},[102,55242,7642],{"class":217},[102,55244,51298],{"class":112},[102,55246,55247,55249,55251],{"class":104,"line":16629},[102,55248,51767],{"class":112},[102,55250,51602],{"class":51291},[102,55252,51298],{"class":112},[102,55254,55255,55257,55259,55261,55263,55266],{"class":104,"line":16652},[102,55256,51332],{"class":112},[102,55258,51602],{"class":51291},[102,55260,53477],{"class":1952},[102,55262,158],{"class":112},[102,55264,55265],{"class":217},"\"slider-footer\"",[102,55267,51298],{"class":112},[102,55269,55270,55272,55274,55277,55279],{"class":104,"line":16666},[102,55271,55225],{"class":112},[102,55273,19],{"class":51291},[102,55275,55276],{"class":112},">对人类来说会不会太超前了?\u003C\u002F",[102,55278,19],{"class":51291},[102,55280,51298],{"class":112},[102,55282,55283,55285,55287],{"class":104,"line":16686},[102,55284,55225],{"class":112},[102,55286,1120],{"class":51291},[102,55288,51298],{"class":112},[102,55290,55291,55294,55296,55298,55300,55303,55306,55308],{"class":104,"line":16692},[102,55292,55293],{"class":112},"        \u003C",[102,55295,59],{"class":51291},[102,55297,53477],{"class":1952},[102,55299,158],{"class":112},[102,55301,55302],{"class":217},"\"activate\"",[102,55304,55305],{"class":112},">\u003C\u002F",[102,55307,59],{"class":51291},[102,55309,51298],{"class":112},[102,55311,55312,55314,55316,55318,55320],{"class":104,"line":16703},[102,55313,55293],{"class":112},[102,55315,59],{"class":51291},[102,55317,55305],{"class":112},[102,55319,59],{"class":51291},[102,55321,51298],{"class":112},[102,55323,55324,55326,55328,55330,55332],{"class":104,"line":16726},[102,55325,55293],{"class":112},[102,55327,59],{"class":51291},[102,55329,55305],{"class":112},[102,55331,59],{"class":51291},[102,55333,51298],{"class":112},[102,55335,55336,55338,55340,55342,55344],{"class":104,"line":16748},[102,55337,55293],{"class":112},[102,55339,59],{"class":51291},[102,55341,55305],{"class":112},[102,55343,59],{"class":51291},[102,55345,51298],{"class":112},[102,55347,55348,55350,55352,55354,55356],{"class":104,"line":16753},[102,55349,55293],{"class":112},[102,55351,59],{"class":51291},[102,55353,55305],{"class":112},[102,55355,59],{"class":51291},[102,55357,51298],{"class":112},[102,55359,55360,55362,55364,55366,55368],{"class":104,"line":16759},[102,55361,55293],{"class":112},[102,55363,59],{"class":51291},[102,55365,55305],{"class":112},[102,55367,59],{"class":51291},[102,55369,51298],{"class":112},[102,55371,55372,55374,55376,55378,55380],{"class":104,"line":16773},[102,55373,55293],{"class":112},[102,55375,59],{"class":51291},[102,55377,55305],{"class":112},[102,55379,59],{"class":51291},[102,55381,51298],{"class":112},[102,55383,55384,55386,55388,55390,55392],{"class":104,"line":16786},[102,55385,55293],{"class":112},[102,55387,59],{"class":51291},[102,55389,55305],{"class":112},[102,55391,59],{"class":51291},[102,55393,51298],{"class":112},[102,55395,55396,55399,55401],{"class":104,"line":16791},[102,55397,55398],{"class":112},"      \u003C\u002F",[102,55400,1120],{"class":51291},[102,55402,51298],{"class":112},[102,55404,55405,55407,55409],{"class":104,"line":16805},[102,55406,51767],{"class":112},[102,55408,51602],{"class":51291},[102,55410,51298],{"class":112},[102,55412,55413,55415,55417],{"class":104,"line":16810},[102,55414,52408],{"class":112},[102,55416,51602],{"class":51291},[102,55418,51298],{"class":112},[102,55420,55421,55423,55425],{"class":104,"line":16816},[102,55422,52135],{"class":112},[102,55424,51804],{"class":51291},[102,55426,51298],{"class":112},[102,55428,55429,55431,55434,55436],{"class":104,"line":16821},[102,55430,11211],{"class":108},[102,55432,55433],{"class":161}," arrImage",[102,55435,13554],{"class":108},[102,55437,55438],{"class":112}," [\n",[102,55440,55441,55444,55447,55450,55453,55456,55459],{"class":104,"line":16835},[102,55442,55443],{"class":112},"      { url: ",[102,55445,55446],{"class":217},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[102,55448,55449],{"class":112},", title: ",[102,55451,55452],{"class":217},"'对人类来说会不会太超前了?'",[102,55454,55455],{"class":112},", color: ",[102,55457,55458],{"class":217},"'rgba(100,67,68)'",[102,55460,55461],{"class":112}," },\n",[102,55463,55464,55466,55469,55471,55474,55476,55479],{"class":104,"line":16840},[102,55465,55443],{"class":112},[102,55467,55468],{"class":217},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[102,55470,55449],{"class":112},[102,55472,55473],{"class":217},"'开启剑与雪的黑暗传说!'",[102,55475,55455],{"class":112},[102,55477,55478],{"class":217},"'rgba(43,35,26)'",[102,55480,55461],{"class":112},[102,55482,55483,55485,55488,55490,55493,55495,55498],{"class":104,"line":16845},[102,55484,55443],{"class":112},[102,55486,55487],{"class":217},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[102,55489,55449],{"class":112},[102,55491,55492],{"class":217},"'真正的jo厨出现了!'",[102,55494,55455],{"class":112},[102,55496,55497],{"class":217},"'rgba(36,31,33)'",[102,55499,55461],{"class":112},[102,55501,55502,55504,55507,55509,55512,55514,55517],{"class":104,"line":16859},[102,55503,55443],{"class":112},[102,55505,55506],{"class":217},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[102,55508,55449],{"class":112},[102,55510,55511],{"class":217},"'李玉刚:让世界通过b站看到东方大国文化'",[102,55513,55455],{"class":112},[102,55515,55516],{"class":217},"'rgba(139,98,66)'",[102,55518,55461],{"class":112},[102,55520,55521,55523,55526,55528,55531,55533,55536],{"class":104,"line":16871},[102,55522,55443],{"class":112},[102,55524,55525],{"class":217},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[102,55527,55449],{"class":112},[102,55529,55530],{"class":217},"'快来分享你的寒假日常吧'",[102,55532,55455],{"class":112},[102,55534,55535],{"class":217},"'rgba(67,90,92)'",[102,55537,55461],{"class":112},[102,55539,55540,55542,55545,55547,55550,55552,55555],{"class":104,"line":16876},[102,55541,55443],{"class":112},[102,55543,55544],{"class":217},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[102,55546,55449],{"class":112},[102,55548,55549],{"class":217},"'哔哩哔哩小年YEAR'",[102,55551,55455],{"class":112},[102,55553,55554],{"class":217},"'rgba(166,131,143)'",[102,55556,55461],{"class":112},[102,55558,55559,55561,55564,55566,55569,55571,55574],{"class":104,"line":16889},[102,55560,55443],{"class":112},[102,55562,55563],{"class":217},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[102,55565,55449],{"class":112},[102,55567,55568],{"class":217},"'一站式解决你的电脑配置问题'",[102,55570,55455],{"class":112},[102,55572,55573],{"class":217},"'rgba(53,29,25)'",[102,55575,55461],{"class":112},[102,55577,55578,55580,55583,55585,55588,55590,55593],{"class":104,"line":16894},[102,55579,55443],{"class":112},[102,55581,55582],{"class":217},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[102,55584,55449],{"class":112},[102,55586,55587],{"class":217},"'谁不想和小猫咪贴贴呢?'",[102,55589,55455],{"class":112},[102,55591,55592],{"class":217},"'rgba(99,72,114)'",[102,55594,55595],{"class":112}," }\n",[102,55597,55598],{"class":104,"line":16899},[102,55599,53100],{"class":112},[102,55601,55602,55604,55607,55609,55611,55613,55615,55618],{"class":104,"line":16904},[102,55603,11211],{"class":108},[102,55605,55606],{"class":161}," img",[102,55608,13554],{"class":108},[102,55610,54387],{"class":112},[102,55612,54390],{"class":1952},[102,55614,113],{"class":112},[102,55616,55617],{"class":217},"'.slider-wrapper img'",[102,55619,119],{"class":112},[102,55621,55622,55624,55626,55628,55630,55632,55634,55637],{"class":104,"line":16917},[102,55623,11211],{"class":108},[102,55625,6815],{"class":161},[102,55627,13554],{"class":108},[102,55629,54387],{"class":112},[102,55631,54390],{"class":1952},[102,55633,113],{"class":112},[102,55635,55636],{"class":217},"'.slider-footer p'",[102,55638,119],{"class":112},[102,55640,55641,55643,55646,55648,55650,55652,55654,55657],{"class":104,"line":16922},[102,55642,11211],{"class":108},[102,55644,55645],{"class":161}," color",[102,55647,13554],{"class":108},[102,55649,54387],{"class":112},[102,55651,54390],{"class":1952},[102,55653,113],{"class":112},[102,55655,55656],{"class":217},"'.slider-footer'",[102,55658,119],{"class":112},[102,55660,55661,55663,55666,55668,55670,55673,55675,55678],{"class":104,"line":32624},[102,55662,11211],{"class":108},[102,55664,55665],{"class":161}," lis",[102,55667,13554],{"class":108},[102,55669,54387],{"class":112},[102,55671,55672],{"class":1952},"querySelectorAll",[102,55674,113],{"class":112},[102,55676,55677],{"class":217},"'.slider-footer ul li'",[102,55679,119],{"class":112},[102,55681,55682,55684,55686,55688],{"class":104,"line":32630},[102,55683,52210],{"class":108},[102,55685,9428],{"class":112},[102,55687,158],{"class":108},[102,55689,55690],{"class":161}," 1\n",[102,55692,55693,55695,55698,55700,55702,55704,55706],{"class":104,"line":32636},[102,55694,52210],{"class":108},[102,55696,55697],{"class":112}," timer ",[102,55699,158],{"class":108},[102,55701,54435],{"class":1952},[102,55703,113],{"class":112},[102,55705,54440],{"class":108},[102,55707,54443],{"class":112},[102,55709,55710,55713,55715],{"class":104,"line":32642},[102,55711,55712],{"class":112},"      img.src ",[102,55714,158],{"class":108},[102,55716,55717],{"class":112}," arrImage[i].url\n",[102,55719,55720,55723,55725],{"class":104,"line":32648},[102,55721,55722],{"class":112},"      p.innerHTML ",[102,55724,158],{"class":108},[102,55726,55727],{"class":112}," arrImage[i].title\n",[102,55729,55730,55733,55735],{"class":104,"line":32659},[102,55731,55732],{"class":112},"      color.style.backgroundColor ",[102,55734,158],{"class":108},[102,55736,55737],{"class":112}," arrImage[i].color\n",[102,55739,55740],{"class":104,"line":32665},[102,55741,55742],{"class":171},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[102,55744,55745],{"class":104,"line":32685},[102,55746,55747],{"class":171},"      \u002F\u002F li.classList.add('activate')\n",[102,55749,55750],{"class":104,"line":32691},[102,55751,55752],{"class":171},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[102,55754,55755],{"class":104,"line":32702},[102,55756,55757],{"class":171},"      \u002F\u002F lis[i].classList.remove('activate')\n",[102,55759,55760,55763,55765,55767,55770,55773,55776,55778,55781],{"class":104,"line":32708},[102,55761,55762],{"class":112},"      document.",[102,55764,54390],{"class":1952},[102,55766,113],{"class":112},[102,55768,55769],{"class":217},"'.activate'",[102,55771,55772],{"class":112},")?.classList.",[102,55774,55775],{"class":1952},"toggle",[102,55777,113],{"class":112},[102,55779,55780],{"class":217},"'activate'",[102,55782,119],{"class":112},[102,55784,55785,55788,55790,55792,55794],{"class":104,"line":32714},[102,55786,55787],{"class":112},"      lis[i].classList.",[102,55789,5324],{"class":1952},[102,55791,113],{"class":112},[102,55793,55780],{"class":217},[102,55795,119],{"class":112},[102,55797,55798],{"class":104,"line":32720},[102,55799,2389],{"emptyLinePlaceholder":30},[102,55801,55802,55805,55807,55809,55811,55813,55815,55817,55820],{"class":104,"line":32726},[102,55803,55804],{"class":112},"      i ",[102,55806,158],{"class":108},[102,55808,54474],{"class":112},[102,55810,594],{"class":108},[102,55812,25109],{"class":161},[102,55814,13704],{"class":112},[102,55816,441],{"class":108},[102,55818,55819],{"class":112}," arrImage.",[102,55821,55822],{"class":161},"length\n",[102,55824,55825],{"class":104,"line":32732},[102,55826,2389],{"emptyLinePlaceholder":30},[102,55828,55829,55831,55833],{"class":104,"line":32738},[102,55830,54526],{"class":112},[102,55832,6400],{"class":161},[102,55834,119],{"class":112},[102,55836,55837,55839,55841],{"class":104,"line":32744},[102,55838,52408],{"class":112},[102,55840,51804],{"class":51291},[102,55842,51298],{"class":112},[102,55844,55845,55847,55849],{"class":104,"line":32764},[102,55846,51776],{"class":112},[102,55848,51791],{"class":51291},[102,55850,51298],{"class":112},[102,55852,55853],{"class":104,"line":32770},[102,55854,2389],{"emptyLinePlaceholder":30},[102,55856,55857,55859,55861],{"class":104,"line":32786},[102,55858,51776],{"class":112},[102,55860,50626],{"class":51291},[102,55862,51298],{"class":112},[19,55864,55865],{},[1451,55866],{"alt":23,"src":55867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,55869,55870],{},"?.就是短路保护,确保输出正常进行",[19,55872,55873],{},"不要忘记取余%,有时候可以用",[19,55875,55876],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[56,55878,55879],{"start":24},[59,55880,55881],{},"法2",[93,55883,55885],{"className":50624,"code":55884,"language":50626,"meta":23,"style":23},"\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",[99,55886,55887,55897,55911,55915,55923,55937,55957,55969,55977,55983,55993,56003,56007,56011,56017,56027,56031,56035,56041,56051,56063,56075,56089,56093,56097,56103,56113,56123,56133,56145,56157,56167,56171,56175,56183,56193,56205,56217,56229,56233,56237,56243,56253,56265,56277,56287,56297,56307,56319,56331,56335,56339,56347,56359,56371,56397,56409,56413,56417,56423,56433,56437,56445,56453,56457,56465,56479,56493,56513,56521,56535,56547,56555,56573,56585,56597,56609,56621,56633,56645,56657,56665,56673,56681,56689,56700,56716,56732,56748,56764,56780,56796,56812,56828,56832,56837,56855,56873,56883,56888,56893,56904,56910,56925,56934,56938,56943,56952,56957,56966,56971,56976,56981,57004,57034,57038,57046,57050,57058,57066,57070],{"__ignoreMap":23},[102,55888,55889,55891,55893,55895],{"class":104,"line":105},[102,55890,51288],{"class":112},[102,55892,51292],{"class":51291},[102,55894,51295],{"class":1952},[102,55896,51298],{"class":112},[102,55898,55899,55901,55903,55905,55907,55909],{"class":104,"line":24},[102,55900,1023],{"class":112},[102,55902,50626],{"class":51291},[102,55904,51307],{"class":1952},[102,55906,158],{"class":112},[102,55908,51312],{"class":217},[102,55910,51298],{"class":112},[102,55912,55913],{"class":104,"line":1168},[102,55914,2389],{"emptyLinePlaceholder":30},[102,55916,55917,55919,55921],{"class":104,"line":1183},[102,55918,1023],{"class":112},[102,55920,51325],{"class":51291},[102,55922,51298],{"class":112},[102,55924,55925,55927,55929,55931,55933,55935],{"class":104,"line":1189},[102,55926,52135],{"class":112},[102,55928,51335],{"class":51291},[102,55930,51338],{"class":1952},[102,55932,158],{"class":112},[102,55934,51343],{"class":217},[102,55936,51298],{"class":112},[102,55938,55939,55941,55943,55945,55947,55949,55951,55953,55955],{"class":104,"line":1203},[102,55940,52135],{"class":112},[102,55942,51335],{"class":51291},[102,55944,14910],{"class":1952},[102,55946,158],{"class":112},[102,55948,51382],{"class":217},[102,55950,51362],{"class":1952},[102,55952,158],{"class":112},[102,55954,51389],{"class":217},[102,55956,51298],{"class":112},[102,55958,55959,55961,55963,55965,55967],{"class":104,"line":1209},[102,55960,52135],{"class":112},[102,55962,51398],{"class":51291},[102,55964,51401],{"class":112},[102,55966,51398],{"class":51291},[102,55968,51298],{"class":112},[102,55970,55971,55973,55975],{"class":104,"line":1300},[102,55972,52135],{"class":112},[102,55974,5116],{"class":51291},[102,55976,51298],{"class":112},[102,55978,55979,55981],{"class":104,"line":1306},[102,55980,6393],{"class":51291},[102,55982,15562],{"class":112},[102,55984,55985,55987,55989,55991],{"class":104,"line":1318},[102,55986,54686],{"class":161},[102,55988,51428],{"class":112},[102,55990,304],{"class":161},[102,55992,1279],{"class":112},[102,55994,55995,55997,55999,56001],{"class":104,"line":1601},[102,55996,54697],{"class":161},[102,55998,51428],{"class":112},[102,56000,304],{"class":161},[102,56002,1279],{"class":112},[102,56004,56005],{"class":104,"line":1606},[102,56006,2176],{"class":112},[102,56008,56009],{"class":104,"line":1612},[102,56010,2389],{"emptyLinePlaceholder":30},[102,56012,56013,56015],{"class":104,"line":1617},[102,56014,54716],{"class":51291},[102,56016,15562],{"class":112},[102,56018,56019,56021,56023,56025],{"class":104,"line":1631},[102,56020,54723],{"class":161},[102,56022,51428],{"class":112},[102,56024,54728],{"class":161},[102,56026,1279],{"class":112},[102,56028,56029],{"class":104,"line":1636},[102,56030,2176],{"class":112},[102,56032,56033],{"class":104,"line":1642},[102,56034,2389],{"emptyLinePlaceholder":30},[102,56036,56037,56039],{"class":104,"line":1663},[102,56038,54743],{"class":1952},[102,56040,15562],{"class":112},[102,56042,56043,56045,56047,56049],{"class":104,"line":1668},[102,56044,54750],{"class":161},[102,56046,51428],{"class":112},[102,56048,54755],{"class":161},[102,56050,1279],{"class":112},[102,56052,56053,56055,56057,56059,56061],{"class":104,"line":1682},[102,56054,54762],{"class":161},[102,56056,51428],{"class":112},[102,56058,54767],{"class":161},[102,56060,51483],{"class":108},[102,56062,1279],{"class":112},[102,56064,56065,56067,56069,56071,56073],{"class":104,"line":1687},[102,56066,54776],{"class":161},[102,56068,51428],{"class":112},[102,56070,1528],{"class":161},[102,56072,51483],{"class":108},[102,56074,1279],{"class":112},[102,56076,56077,56079,56081,56083,56085,56087],{"class":104,"line":1716},[102,56078,54697],{"class":161},[102,56080,51428],{"class":112},[102,56082,424],{"class":161},[102,56084,51483],{"class":108},[102,56086,51547],{"class":161},[102,56088,1279],{"class":112},[102,56090,56091],{"class":104,"line":1721},[102,56092,2176],{"class":112},[102,56094,56095],{"class":104,"line":1738},[102,56096,2389],{"emptyLinePlaceholder":30},[102,56098,56099,56101],{"class":104,"line":1743},[102,56100,54811],{"class":1952},[102,56102,15562],{"class":112},[102,56104,56105,56107,56109,56111],{"class":104,"line":1748},[102,56106,54750],{"class":161},[102,56108,51428],{"class":112},[102,56110,54822],{"class":161},[102,56112,1279],{"class":112},[102,56114,56115,56117,56119,56121],{"class":104,"line":1753},[102,56116,54829],{"class":161},[102,56118,51428],{"class":112},[102,56120,304],{"class":161},[102,56122,1279],{"class":112},[102,56124,56125,56127,56129,56131],{"class":104,"line":1767},[102,56126,54840],{"class":161},[102,56128,51428],{"class":112},[102,56130,304],{"class":161},[102,56132,1279],{"class":112},[102,56134,56135,56137,56139,56141,56143],{"class":104,"line":1772},[102,56136,54762],{"class":161},[102,56138,51428],{"class":112},[102,56140,424],{"class":161},[102,56142,441],{"class":108},[102,56144,1279],{"class":112},[102,56146,56147,56149,56151,56153,56155],{"class":104,"line":2566},[102,56148,54776],{"class":161},[102,56150,51428],{"class":112},[102,56152,688],{"class":161},[102,56154,441],{"class":108},[102,56156,1279],{"class":112},[102,56158,56159,56161,56163,56165],{"class":104,"line":2580},[102,56160,54875],{"class":161},[102,56162,51428],{"class":112},[102,56164,54880],{"class":161},[102,56166,1279],{"class":112},[102,56168,56169],{"class":104,"line":2588},[102,56170,2176],{"class":112},[102,56172,56173],{"class":104,"line":2593},[102,56174,2389],{"emptyLinePlaceholder":30},[102,56176,56177,56179,56181],{"class":104,"line":2599},[102,56178,54811],{"class":1952},[102,56180,6815],{"class":51291},[102,56182,15562],{"class":112},[102,56184,56185,56187,56189,56191],{"class":104,"line":2605},[102,56186,54750],{"class":161},[102,56188,51428],{"class":112},[102,56190,54822],{"class":161},[102,56192,1279],{"class":112},[102,56194,56195,56197,56199,56201,56203],{"class":104,"line":2610},[102,56196,54913],{"class":161},[102,56198,51428],{"class":112},[102,56200,1014],{"class":161},[102,56202,51483],{"class":108},[102,56204,1279],{"class":112},[102,56206,56207,56209,56211,56213,56215],{"class":104,"line":7938},[102,56208,54829],{"class":161},[102,56210,51428],{"class":112},[102,56212,813],{"class":161},[102,56214,51483],{"class":108},[102,56216,1279],{"class":112},[102,56218,56219,56221,56223,56225,56227],{"class":104,"line":7962},[102,56220,54938],{"class":161},[102,56222,51428],{"class":112},[102,56224,432],{"class":161},[102,56226,51483],{"class":108},[102,56228,1279],{"class":112},[102,56230,56231],{"class":104,"line":7967},[102,56232,2176],{"class":112},[102,56234,56235],{"class":104,"line":7973},[102,56236,2389],{"emptyLinePlaceholder":30},[102,56238,56239,56241],{"class":104,"line":8000},[102,56240,54959],{"class":51291},[102,56242,15562],{"class":112},[102,56244,56245,56247,56249,56251],{"class":104,"line":8005},[102,56246,54750],{"class":161},[102,56248,51428],{"class":112},[102,56250,54822],{"class":161},[102,56252,1279],{"class":112},[102,56254,56255,56257,56259,56261,56263],{"class":104,"line":8011},[102,56256,54938],{"class":161},[102,56258,51428],{"class":112},[102,56260,894],{"class":161},[102,56262,51483],{"class":108},[102,56264,1279],{"class":112},[102,56266,56267,56269,56271,56273,56275],{"class":104,"line":8023},[102,56268,54829],{"class":161},[102,56270,51428],{"class":112},[102,56272,813],{"class":161},[102,56274,51483],{"class":108},[102,56276,1279],{"class":112},[102,56278,56279,56281,56283,56285],{"class":104,"line":8035},[102,56280,55000],{"class":161},[102,56282,51428],{"class":112},[102,56284,51468],{"class":161},[102,56286,1279],{"class":112},[102,56288,56289,56291,56293,56295],{"class":104,"line":8047},[102,56290,55011],{"class":161},[102,56292,51428],{"class":112},[102,56294,51659],{"class":161},[102,56296,1279],{"class":112},[102,56298,56299,56301,56303,56305],{"class":104,"line":9706},[102,56300,54750],{"class":161},[102,56302,51428],{"class":112},[102,56304,54822],{"class":161},[102,56306,1279],{"class":112},[102,56308,56309,56311,56313,56315,56317],{"class":104,"line":9731},[102,56310,54762],{"class":161},[102,56312,51428],{"class":112},[102,56314,3981],{"class":161},[102,56316,51483],{"class":108},[102,56318,1279],{"class":112},[102,56320,56321,56323,56325,56327,56329],{"class":104,"line":9754},[102,56322,54776],{"class":161},[102,56324,51428],{"class":112},[102,56326,813],{"class":161},[102,56328,51483],{"class":108},[102,56330,1279],{"class":112},[102,56332,56333],{"class":104,"line":9778},[102,56334,2176],{"class":112},[102,56336,56337],{"class":104,"line":9783},[102,56338,2389],{"emptyLinePlaceholder":30},[102,56340,56341,56343,56345],{"class":104,"line":9788},[102,56342,54959],{"class":51291},[102,56344,55066],{"class":51291},[102,56346,15562],{"class":112},[102,56348,56349,56351,56353,56355,56357],{"class":104,"line":9793},[102,56350,54762],{"class":161},[102,56352,51428],{"class":112},[102,56354,813],{"class":161},[102,56356,51483],{"class":108},[102,56358,1279],{"class":112},[102,56360,56361,56363,56365,56367,56369],{"class":104,"line":9802},[102,56362,54776],{"class":161},[102,56364,51428],{"class":112},[102,56366,813],{"class":161},[102,56368,51483],{"class":108},[102,56370,1279],{"class":112},[102,56372,56373,56375,56377,56379,56381,56383,56385,56387,56389,56391,56393,56395],{"class":104,"line":9807},[102,56374,54875],{"class":161},[102,56376,51428],{"class":112},[102,56378,55101],{"class":161},[102,56380,113],{"class":112},[102,56382,304],{"class":161},[102,56384,12425],{"class":112},[102,56386,304],{"class":161},[102,56388,12425],{"class":112},[102,56390,304],{"class":161},[102,56392,12425],{"class":112},[102,56394,55118],{"class":161},[102,56396,2708],{"class":112},[102,56398,56399,56401,56403,56405,56407],{"class":104,"line":9813},[102,56400,55125],{"class":161},[102,56402,51428],{"class":112},[102,56404,559],{"class":161},[102,56406,51483],{"class":108},[102,56408,1279],{"class":112},[102,56410,56411],{"class":104,"line":9834},[102,56412,2176],{"class":112},[102,56414,56415],{"class":104,"line":9840},[102,56416,2389],{"emptyLinePlaceholder":30},[102,56418,56419,56421],{"class":104,"line":9854},[102,56420,55146],{"class":1952},[102,56422,15562],{"class":112},[102,56424,56425,56427,56429,56431],{"class":104,"line":9860},[102,56426,54875],{"class":161},[102,56428,51428],{"class":112},[102,56430,55157],{"class":161},[102,56432,1279],{"class":112},[102,56434,56435],{"class":104,"line":9887},[102,56436,2176],{"class":112},[102,56438,56439,56441,56443],{"class":104,"line":9896},[102,56440,52408],{"class":112},[102,56442,5116],{"class":51291},[102,56444,51298],{"class":112},[102,56446,56447,56449,56451],{"class":104,"line":9902},[102,56448,51776],{"class":112},[102,56450,51325],{"class":51291},[102,56452,51298],{"class":112},[102,56454,56455],{"class":104,"line":9910},[102,56456,2389],{"emptyLinePlaceholder":30},[102,56458,56459,56461,56463],{"class":104,"line":9915},[102,56460,1023],{"class":112},[102,56462,51791],{"class":51291},[102,56464,51298],{"class":112},[102,56466,56467,56469,56471,56473,56475,56477],{"class":104,"line":16594},[102,56468,52135],{"class":112},[102,56470,51602],{"class":51291},[102,56472,53477],{"class":1952},[102,56474,158],{"class":112},[102,56476,53482],{"class":217},[102,56478,51298],{"class":112},[102,56480,56481,56483,56485,56487,56489,56491],{"class":104,"line":16600},[102,56482,51332],{"class":112},[102,56484,51602],{"class":51291},[102,56486,53477],{"class":1952},[102,56488,158],{"class":112},[102,56490,55218],{"class":217},[102,56492,51298],{"class":112},[102,56494,56495,56497,56499,56501,56503,56505,56507,56509,56511],{"class":104,"line":16623},[102,56496,55225],{"class":112},[102,56498,1451],{"class":51291},[102,56500,55230],{"class":1952},[102,56502,158],{"class":112},[102,56504,55235],{"class":217},[102,56506,55238],{"class":1952},[102,56508,158],{"class":112},[102,56510,7642],{"class":217},[102,56512,51298],{"class":112},[102,56514,56515,56517,56519],{"class":104,"line":16629},[102,56516,51767],{"class":112},[102,56518,51602],{"class":51291},[102,56520,51298],{"class":112},[102,56522,56523,56525,56527,56529,56531,56533],{"class":104,"line":16652},[102,56524,51332],{"class":112},[102,56526,51602],{"class":51291},[102,56528,53477],{"class":1952},[102,56530,158],{"class":112},[102,56532,55265],{"class":217},[102,56534,51298],{"class":112},[102,56536,56537,56539,56541,56543,56545],{"class":104,"line":16666},[102,56538,55225],{"class":112},[102,56540,19],{"class":51291},[102,56542,55276],{"class":112},[102,56544,19],{"class":51291},[102,56546,51298],{"class":112},[102,56548,56549,56551,56553],{"class":104,"line":16686},[102,56550,55225],{"class":112},[102,56552,1120],{"class":51291},[102,56554,51298],{"class":112},[102,56556,56557,56559,56561,56563,56565,56567,56569,56571],{"class":104,"line":16692},[102,56558,55293],{"class":112},[102,56560,59],{"class":51291},[102,56562,53477],{"class":1952},[102,56564,158],{"class":112},[102,56566,55302],{"class":217},[102,56568,55305],{"class":112},[102,56570,59],{"class":51291},[102,56572,51298],{"class":112},[102,56574,56575,56577,56579,56581,56583],{"class":104,"line":16703},[102,56576,55293],{"class":112},[102,56578,59],{"class":51291},[102,56580,55305],{"class":112},[102,56582,59],{"class":51291},[102,56584,51298],{"class":112},[102,56586,56587,56589,56591,56593,56595],{"class":104,"line":16726},[102,56588,55293],{"class":112},[102,56590,59],{"class":51291},[102,56592,55305],{"class":112},[102,56594,59],{"class":51291},[102,56596,51298],{"class":112},[102,56598,56599,56601,56603,56605,56607],{"class":104,"line":16748},[102,56600,55293],{"class":112},[102,56602,59],{"class":51291},[102,56604,55305],{"class":112},[102,56606,59],{"class":51291},[102,56608,51298],{"class":112},[102,56610,56611,56613,56615,56617,56619],{"class":104,"line":16753},[102,56612,55293],{"class":112},[102,56614,59],{"class":51291},[102,56616,55305],{"class":112},[102,56618,59],{"class":51291},[102,56620,51298],{"class":112},[102,56622,56623,56625,56627,56629,56631],{"class":104,"line":16759},[102,56624,55293],{"class":112},[102,56626,59],{"class":51291},[102,56628,55305],{"class":112},[102,56630,59],{"class":51291},[102,56632,51298],{"class":112},[102,56634,56635,56637,56639,56641,56643],{"class":104,"line":16773},[102,56636,55293],{"class":112},[102,56638,59],{"class":51291},[102,56640,55305],{"class":112},[102,56642,59],{"class":51291},[102,56644,51298],{"class":112},[102,56646,56647,56649,56651,56653,56655],{"class":104,"line":16786},[102,56648,55293],{"class":112},[102,56650,59],{"class":51291},[102,56652,55305],{"class":112},[102,56654,59],{"class":51291},[102,56656,51298],{"class":112},[102,56658,56659,56661,56663],{"class":104,"line":16791},[102,56660,55398],{"class":112},[102,56662,1120],{"class":51291},[102,56664,51298],{"class":112},[102,56666,56667,56669,56671],{"class":104,"line":16805},[102,56668,51767],{"class":112},[102,56670,51602],{"class":51291},[102,56672,51298],{"class":112},[102,56674,56675,56677,56679],{"class":104,"line":16810},[102,56676,52408],{"class":112},[102,56678,51602],{"class":51291},[102,56680,51298],{"class":112},[102,56682,56683,56685,56687],{"class":104,"line":16816},[102,56684,52135],{"class":112},[102,56686,51804],{"class":51291},[102,56688,51298],{"class":112},[102,56690,56691,56693,56696,56698],{"class":104,"line":16821},[102,56692,11211],{"class":108},[102,56694,56695],{"class":161}," sliderData",[102,56697,13554],{"class":108},[102,56699,55438],{"class":112},[102,56701,56702,56704,56706,56708,56710,56712,56714],{"class":104,"line":16835},[102,56703,55443],{"class":112},[102,56705,55446],{"class":217},[102,56707,55449],{"class":112},[102,56709,55452],{"class":217},[102,56711,55455],{"class":112},[102,56713,55458],{"class":217},[102,56715,55461],{"class":112},[102,56717,56718,56720,56722,56724,56726,56728,56730],{"class":104,"line":16840},[102,56719,55443],{"class":112},[102,56721,55468],{"class":217},[102,56723,55449],{"class":112},[102,56725,55473],{"class":217},[102,56727,55455],{"class":112},[102,56729,55478],{"class":217},[102,56731,55461],{"class":112},[102,56733,56734,56736,56738,56740,56742,56744,56746],{"class":104,"line":16845},[102,56735,55443],{"class":112},[102,56737,55487],{"class":217},[102,56739,55449],{"class":112},[102,56741,55492],{"class":217},[102,56743,55455],{"class":112},[102,56745,55497],{"class":217},[102,56747,55461],{"class":112},[102,56749,56750,56752,56754,56756,56758,56760,56762],{"class":104,"line":16859},[102,56751,55443],{"class":112},[102,56753,55506],{"class":217},[102,56755,55449],{"class":112},[102,56757,55511],{"class":217},[102,56759,55455],{"class":112},[102,56761,55516],{"class":217},[102,56763,55461],{"class":112},[102,56765,56766,56768,56770,56772,56774,56776,56778],{"class":104,"line":16871},[102,56767,55443],{"class":112},[102,56769,55525],{"class":217},[102,56771,55449],{"class":112},[102,56773,55530],{"class":217},[102,56775,55455],{"class":112},[102,56777,55535],{"class":217},[102,56779,55461],{"class":112},[102,56781,56782,56784,56786,56788,56790,56792,56794],{"class":104,"line":16876},[102,56783,55443],{"class":112},[102,56785,55544],{"class":217},[102,56787,55449],{"class":112},[102,56789,55549],{"class":217},[102,56791,55455],{"class":112},[102,56793,55554],{"class":217},[102,56795,55461],{"class":112},[102,56797,56798,56800,56802,56804,56806,56808,56810],{"class":104,"line":16889},[102,56799,55443],{"class":112},[102,56801,55563],{"class":217},[102,56803,55449],{"class":112},[102,56805,55568],{"class":217},[102,56807,55455],{"class":112},[102,56809,55573],{"class":217},[102,56811,55461],{"class":112},[102,56813,56814,56816,56818,56820,56822,56824,56826],{"class":104,"line":16894},[102,56815,55443],{"class":112},[102,56817,55582],{"class":217},[102,56819,55449],{"class":112},[102,56821,55587],{"class":217},[102,56823,55455],{"class":112},[102,56825,55592],{"class":217},[102,56827,55595],{"class":112},[102,56829,56830],{"class":104,"line":16899},[102,56831,53100],{"class":112},[102,56833,56834],{"class":104,"line":16904},[102,56835,56836],{"class":171},"    \u002F\u002F 1.获取元素\n",[102,56838,56839,56841,56843,56845,56847,56849,56851,56853],{"class":104,"line":16917},[102,56840,11211],{"class":108},[102,56842,55606],{"class":161},[102,56844,13554],{"class":108},[102,56846,54387],{"class":112},[102,56848,54390],{"class":1952},[102,56850,113],{"class":112},[102,56852,55617],{"class":217},[102,56854,119],{"class":112},[102,56856,56857,56859,56861,56863,56865,56867,56869,56871],{"class":104,"line":16922},[102,56858,11211],{"class":108},[102,56860,6815],{"class":161},[102,56862,13554],{"class":108},[102,56864,54387],{"class":112},[102,56866,54390],{"class":1952},[102,56868,113],{"class":112},[102,56870,55636],{"class":217},[102,56872,119],{"class":112},[102,56874,56875,56877,56879,56881],{"class":104,"line":32624},[102,56876,52210],{"class":108},[102,56878,9428],{"class":112},[102,56880,158],{"class":108},[102,56882,47324],{"class":161},[102,56884,56885],{"class":104,"line":32630},[102,56886,56887],{"class":171},"    \u002F\u002F 2.开启定时器\n",[102,56889,56890],{"class":104,"line":32636},[102,56891,56892],{"class":171},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[102,56894,56895,56898,56900,56902],{"class":104,"line":32642},[102,56896,56897],{"class":1952},"    setInterval",[102,56899,113],{"class":112},[102,56901,54440],{"class":108},[102,56903,54443],{"class":112},[102,56905,56906,56908],{"class":104,"line":32648},[102,56907,54448],{"class":112},[102,56909,2691],{"class":108},[102,56911,56912,56914,56916,56918,56921,56923],{"class":104,"line":32659},[102,56913,54471],{"class":108},[102,56915,54474],{"class":112},[102,56917,1699],{"class":108},[102,56919,56920],{"class":112}," sliderData.",[102,56922,51959],{"class":161},[102,56924,12432],{"class":112},[102,56926,56927,56930,56932],{"class":104,"line":32665},[102,56928,56929],{"class":112},"        i ",[102,56931,158],{"class":108},[102,56933,47324],{"class":161},[102,56935,56936],{"class":104,"line":32685},[102,56937,52389],{"class":112},[102,56939,56940],{"class":104,"line":32691},[102,56941,56942],{"class":171},"      \u002F\u002F 更换图片路径\n",[102,56944,56945,56947,56949],{"class":104,"line":32702},[102,56946,55712],{"class":112},[102,56948,158],{"class":108},[102,56950,56951],{"class":112}," sliderData[i].url\n",[102,56953,56954],{"class":104,"line":32708},[102,56955,56956],{"class":171},"      \u002F\u002F 把文字写到p里面\n",[102,56958,56959,56961,56963],{"class":104,"line":32714},[102,56960,55722],{"class":112},[102,56962,158],{"class":108},[102,56964,56965],{"class":112}," sliderData[i].title\n",[102,56967,56968],{"class":104,"line":32720},[102,56969,56970],{"class":171},"      \u002F\u002F 小圆点\n",[102,56972,56973],{"class":104,"line":32726},[102,56974,56975],{"class":171},"      \u002F\u002F 先删除以前的active\n",[102,56977,56978],{"class":104,"line":32732},[102,56979,56980],{"class":171},"      \u002F\u002F 只让当前li添加active\n",[102,56982,56983,56985,56987,56989,56992,56995,56998,57000,57002],{"class":104,"line":32738},[102,56984,55762],{"class":112},[102,56986,54390],{"class":1952},[102,56988,113],{"class":112},[102,56990,56991],{"class":217},"'.slider-footer .activate'",[102,56993,56994],{"class":112},").classList.",[102,56996,56997],{"class":1952},"remove",[102,56999,113],{"class":112},[102,57001,55780],{"class":217},[102,57003,119],{"class":112},[102,57005,57006,57008,57010,57012,57015,57017,57019,57021,57024,57026,57028,57030,57032],{"class":104,"line":32744},[102,57007,55762],{"class":112},[102,57009,54390],{"class":1952},[102,57011,113],{"class":112},[102,57013,57014],{"class":217},"`.slider-footer ul li:nth-child(${",[102,57016,554],{"class":112},[102,57018,45557],{"class":108},[102,57020,25109],{"class":161},[102,57022,57023],{"class":217},"})`",[102,57025,56994],{"class":112},[102,57027,5324],{"class":1952},[102,57029,113],{"class":112},[102,57031,55780],{"class":217},[102,57033,119],{"class":112},[102,57035,57036],{"class":104,"line":32764},[102,57037,2389],{"emptyLinePlaceholder":30},[102,57039,57040,57042,57044],{"class":104,"line":32770},[102,57041,54526],{"class":112},[102,57043,6400],{"class":161},[102,57045,119],{"class":112},[102,57047,57048],{"class":104,"line":32786},[102,57049,2389],{"emptyLinePlaceholder":30},[102,57051,57052,57054,57056],{"class":104,"line":32792},[102,57053,52408],{"class":112},[102,57055,51804],{"class":51291},[102,57057,51298],{"class":112},[102,57059,57060,57062,57064],{"class":104,"line":32806},[102,57061,51776],{"class":112},[102,57063,51791],{"class":51291},[102,57065,51298],{"class":112},[102,57067,57068],{"class":104,"line":32812},[102,57069,2389],{"emptyLinePlaceholder":30},[102,57071,57072,57074,57076],{"class":104,"line":32827},[102,57073,51776],{"class":112},[102,57075,50626],{"class":51291},[102,57077,51298],{"class":112},[73,57079,57081],{"id":57080},"_317-重要知识点","3.1.7 重要知识点",[19,57083,57084,57085],{},"浏览器在渲染文本时， ",[262,57086,57087],{},"没有空格或换行符就没有“断行点”",[19,57089,57090],{},[1451,57091],{"alt":23,"src":57092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57094,57095],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57097,57098],{},[1451,57099],{"alt":23,"src":57100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57102,57103],{},[1451,57104],{"alt":23,"src":57105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57107,57109],{"id":57108},"_32-dom事件基础","3.2 DOM事件基础",[73,57111,57113],{"id":57112},"_321-事件监听","3.2.1 事件监听",[19,57115,57116],{},[1451,57117],{"alt":23,"src":57118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57120,57121],{},"事件监听有响应的发生",[19,57123,57124],{},[1451,57125],{"alt":23,"src":57126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57128,57129],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57131,57132],{},"对于有名函数,要执行的函数名后边不要加()",[73,57134,57136],{"id":57135},"_322-随机点名案例","3.2.2 随机点名案例",[93,57138,57140],{"className":50624,"code":57139,"language":50626,"meta":23,"style":23},"\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",[99,57141,57142,57152,57166,57170,57178,57192,57212,57224,57232,57238,57248,57258,57262,57266,57273,57284,57288,57292,57298,57310,57324,57334,57346,57359,57363,57367,57374,57378,57391,57403,57415,57419,57423,57427,57434,57444,57448,57452,57461,57473,57485,57500,57504,57512,57520,57524,57532,57545,57559,57572,57592,57600,57615,57635,57655,57663,57667,57675,57680,57716,57736,57741,57760,57765,57776,57781,57792,57797,57816,57831,57836,57862,57872,57881,57886,57902,57907,57912,57917,57932,57936,57940,57945,57964,57981,57989,57994,58009,58013,58017,58025,58033,58037],{"__ignoreMap":23},[102,57143,57144,57146,57148,57150],{"class":104,"line":105},[102,57145,51288],{"class":112},[102,57147,51292],{"class":51291},[102,57149,51295],{"class":1952},[102,57151,51298],{"class":112},[102,57153,57154,57156,57158,57160,57162,57164],{"class":104,"line":24},[102,57155,1023],{"class":112},[102,57157,50626],{"class":51291},[102,57159,51307],{"class":1952},[102,57161,158],{"class":112},[102,57163,51312],{"class":217},[102,57165,51298],{"class":112},[102,57167,57168],{"class":104,"line":1168},[102,57169,2389],{"emptyLinePlaceholder":30},[102,57171,57172,57174,57176],{"class":104,"line":1183},[102,57173,1023],{"class":112},[102,57175,51325],{"class":51291},[102,57177,51298],{"class":112},[102,57179,57180,57182,57184,57186,57188,57190],{"class":104,"line":1189},[102,57181,52135],{"class":112},[102,57183,51335],{"class":51291},[102,57185,51338],{"class":1952},[102,57187,158],{"class":112},[102,57189,51343],{"class":217},[102,57191,51298],{"class":112},[102,57193,57194,57196,57198,57200,57202,57204,57206,57208,57210],{"class":104,"line":1203},[102,57195,52135],{"class":112},[102,57197,51335],{"class":51291},[102,57199,14910],{"class":1952},[102,57201,158],{"class":112},[102,57203,51382],{"class":217},[102,57205,51362],{"class":1952},[102,57207,158],{"class":112},[102,57209,51389],{"class":217},[102,57211,51298],{"class":112},[102,57213,57214,57216,57218,57220,57222],{"class":104,"line":1209},[102,57215,52135],{"class":112},[102,57217,51398],{"class":51291},[102,57219,51401],{"class":112},[102,57221,51398],{"class":51291},[102,57223,51298],{"class":112},[102,57225,57226,57228,57230],{"class":104,"line":1300},[102,57227,52135],{"class":112},[102,57229,5116],{"class":51291},[102,57231,51298],{"class":112},[102,57233,57234,57236],{"class":104,"line":1306},[102,57235,6393],{"class":51291},[102,57237,15562],{"class":112},[102,57239,57240,57242,57244,57246],{"class":104,"line":1318},[102,57241,54697],{"class":161},[102,57243,51428],{"class":112},[102,57245,304],{"class":161},[102,57247,1279],{"class":112},[102,57249,57250,57252,57254,57256],{"class":104,"line":1601},[102,57251,54686],{"class":161},[102,57253,51428],{"class":112},[102,57255,304],{"class":161},[102,57257,1279],{"class":112},[102,57259,57260],{"class":104,"line":1606},[102,57261,2176],{"class":112},[102,57263,57264],{"class":104,"line":1612},[102,57265,2389],{"emptyLinePlaceholder":30},[102,57267,57268,57271],{"class":104,"line":1617},[102,57269,57270],{"class":51291},"    h2",[102,57272,15562],{"class":112},[102,57274,57275,57278,57280,57282],{"class":104,"line":1631},[102,57276,57277],{"class":161},"      text-align",[102,57279,51428],{"class":112},[102,57281,51583],{"class":161},[102,57283,1279],{"class":112},[102,57285,57286],{"class":104,"line":1636},[102,57287,2176],{"class":112},[102,57289,57290],{"class":104,"line":1642},[102,57291,2389],{"emptyLinePlaceholder":30},[102,57293,57294,57296],{"class":104,"line":1663},[102,57295,54743],{"class":1952},[102,57297,15562],{"class":112},[102,57299,57300,57302,57304,57306,57308],{"class":104,"line":1668},[102,57301,54762],{"class":161},[102,57303,51428],{"class":112},[102,57305,1528],{"class":161},[102,57307,51483],{"class":108},[102,57309,1279],{"class":112},[102,57311,57312,57314,57316,57318,57320,57322],{"class":104,"line":1682},[102,57313,54697],{"class":161},[102,57315,51428],{"class":112},[102,57317,769],{"class":161},[102,57319,51483],{"class":108},[102,57321,51547],{"class":161},[102,57323,1279],{"class":112},[102,57325,57326,57328,57330,57332],{"class":104,"line":1687},[102,57327,55000],{"class":161},[102,57329,51428],{"class":112},[102,57331,51468],{"class":161},[102,57333,1279],{"class":112},[102,57335,57336,57338,57340,57342,57344],{"class":104,"line":1716},[102,57337,54913],{"class":161},[102,57339,51428],{"class":112},[102,57341,938],{"class":161},[102,57343,51483],{"class":108},[102,57345,1279],{"class":112},[102,57347,57348,57351,57353,57355,57357],{"class":104,"line":1721},[102,57349,57350],{"class":161},"      line-height",[102,57352,51428],{"class":112},[102,57354,514],{"class":161},[102,57356,51483],{"class":108},[102,57358,1279],{"class":112},[102,57360,57361],{"class":104,"line":1738},[102,57362,2176],{"class":112},[102,57364,57365],{"class":104,"line":1743},[102,57366,2389],{"emptyLinePlaceholder":30},[102,57368,57369,57372],{"class":104,"line":1748},[102,57370,57371],{"class":1952},"    .qs",[102,57373,15562],{"class":112},[102,57375,57376],{"class":104,"line":1753},[102,57377,2389],{"emptyLinePlaceholder":30},[102,57379,57380,57382,57384,57387,57389],{"class":104,"line":1767},[102,57381,54762],{"class":161},[102,57383,51428],{"class":112},[102,57385,57386],{"class":161},"450",[102,57388,51483],{"class":108},[102,57390,1279],{"class":112},[102,57392,57393,57395,57397,57399,57401],{"class":104,"line":1772},[102,57394,54776],{"class":161},[102,57396,51428],{"class":112},[102,57398,514],{"class":161},[102,57400,51483],{"class":108},[102,57402,1279],{"class":112},[102,57404,57405,57408,57410,57413],{"class":104,"line":2566},[102,57406,57407],{"class":161},"      color",[102,57409,51428],{"class":112},[102,57411,57412],{"class":161},"red",[102,57414,1279],{"class":112},[102,57416,57417],{"class":104,"line":2580},[102,57418,2389],{"emptyLinePlaceholder":30},[102,57420,57421],{"class":104,"line":2588},[102,57422,2176],{"class":112},[102,57424,57425],{"class":104,"line":2593},[102,57426,2389],{"emptyLinePlaceholder":30},[102,57428,57429,57432],{"class":104,"line":2599},[102,57430,57431],{"class":1952},"    .btns",[102,57433,15562],{"class":112},[102,57435,57436,57438,57440,57442],{"class":104,"line":2605},[102,57437,57277],{"class":161},[102,57439,51428],{"class":112},[102,57441,51583],{"class":161},[102,57443,1279],{"class":112},[102,57445,57446],{"class":104,"line":2610},[102,57447,2176],{"class":112},[102,57449,57450],{"class":104,"line":7938},[102,57451,2389],{"emptyLinePlaceholder":30},[102,57453,57454,57456,57459],{"class":104,"line":7962},[102,57455,57431],{"class":1952},[102,57457,57458],{"class":51291}," button",[102,57460,15562],{"class":112},[102,57462,57463,57465,57467,57469,57471],{"class":104,"line":7967},[102,57464,54762],{"class":161},[102,57466,51428],{"class":112},[102,57468,930],{"class":161},[102,57470,51483],{"class":108},[102,57472,1279],{"class":112},[102,57474,57475,57477,57479,57481,57483],{"class":104,"line":7973},[102,57476,54776],{"class":161},[102,57478,51428],{"class":112},[102,57480,386],{"class":161},[102,57482,51483],{"class":108},[102,57484,1279],{"class":112},[102,57486,57487,57489,57491,57493,57496,57498],{"class":104,"line":8000},[102,57488,54697],{"class":161},[102,57490,51428],{"class":112},[102,57492,304],{"class":161},[102,57494,57495],{"class":161}," 50",[102,57497,51483],{"class":108},[102,57499,1279],{"class":112},[102,57501,57502],{"class":104,"line":8005},[102,57503,2176],{"class":112},[102,57505,57506,57508,57510],{"class":104,"line":8011},[102,57507,52408],{"class":112},[102,57509,5116],{"class":51291},[102,57511,51298],{"class":112},[102,57513,57514,57516,57518],{"class":104,"line":8023},[102,57515,51776],{"class":112},[102,57517,51325],{"class":51291},[102,57519,51298],{"class":112},[102,57521,57522],{"class":104,"line":8035},[102,57523,2389],{"emptyLinePlaceholder":30},[102,57525,57526,57528,57530],{"class":104,"line":8047},[102,57527,1023],{"class":112},[102,57529,51791],{"class":51291},[102,57531,51298],{"class":112},[102,57533,57534,57536,57538,57541,57543],{"class":104,"line":9706},[102,57535,52135],{"class":112},[102,57537,14],{"class":51291},[102,57539,57540],{"class":112},">随机点名\u003C\u002F",[102,57542,14],{"class":51291},[102,57544,51298],{"class":112},[102,57546,57547,57549,57551,57553,57555,57557],{"class":104,"line":9731},[102,57548,52135],{"class":112},[102,57550,51602],{"class":51291},[102,57552,53477],{"class":1952},[102,57554,158],{"class":112},[102,57556,53482],{"class":217},[102,57558,51298],{"class":112},[102,57560,57561,57563,57565,57568,57570],{"class":104,"line":9754},[102,57562,51332],{"class":112},[102,57564,102],{"class":51291},[102,57566,57567],{"class":112},">名字是：\u003C\u002F",[102,57569,102],{"class":51291},[102,57571,51298],{"class":112},[102,57573,57574,57576,57578,57580,57582,57585,57588,57590],{"class":104,"line":9778},[102,57575,51332],{"class":112},[102,57577,51602],{"class":51291},[102,57579,53477],{"class":1952},[102,57581,158],{"class":112},[102,57583,57584],{"class":217},"\"qs\"",[102,57586,57587],{"class":112},">这里显示姓名\u003C\u002F",[102,57589,51602],{"class":51291},[102,57591,51298],{"class":112},[102,57593,57594,57596,57598],{"class":104,"line":9783},[102,57595,52408],{"class":112},[102,57597,51602],{"class":51291},[102,57599,51298],{"class":112},[102,57601,57602,57604,57606,57608,57610,57613],{"class":104,"line":9788},[102,57603,52135],{"class":112},[102,57605,51602],{"class":51291},[102,57607,53477],{"class":1952},[102,57609,158],{"class":112},[102,57611,57612],{"class":217},"\"btns\"",[102,57614,51298],{"class":112},[102,57616,57617,57619,57621,57623,57625,57628,57631,57633],{"class":104,"line":9793},[102,57618,51332],{"class":112},[102,57620,53878],{"class":51291},[102,57622,53477],{"class":1952},[102,57624,158],{"class":112},[102,57626,57627],{"class":217},"\"start\"",[102,57629,57630],{"class":112},">开始\u003C\u002F",[102,57632,53878],{"class":51291},[102,57634,51298],{"class":112},[102,57636,57637,57639,57641,57643,57645,57648,57651,57653],{"class":104,"line":9802},[102,57638,51332],{"class":112},[102,57640,53878],{"class":51291},[102,57642,53477],{"class":1952},[102,57644,158],{"class":112},[102,57646,57647],{"class":217},"\"end\"",[102,57649,57650],{"class":112},">结束\u003C\u002F",[102,57652,53878],{"class":51291},[102,57654,51298],{"class":112},[102,57656,57657,57659,57661],{"class":104,"line":9807},[102,57658,52408],{"class":112},[102,57660,51602],{"class":51291},[102,57662,51298],{"class":112},[102,57664,57665],{"class":104,"line":9813},[102,57666,2389],{"emptyLinePlaceholder":30},[102,57668,57669,57671,57673],{"class":104,"line":9834},[102,57670,52135],{"class":112},[102,57672,51804],{"class":51291},[102,57674,51298],{"class":112},[102,57676,57677],{"class":104,"line":9840},[102,57678,57679],{"class":171},"    \u002F\u002F 数据数组\n",[102,57681,57682,57684,57687,57689,57691,57694,57696,57699,57701,57704,57706,57709,57711,57714],{"class":104,"line":9854},[102,57683,11211],{"class":108},[102,57685,57686],{"class":161}," arr",[102,57688,13554],{"class":108},[102,57690,52217],{"class":112},[102,57692,57693],{"class":217},"'马超'",[102,57695,12425],{"class":112},[102,57697,57698],{"class":217},"'黄忠'",[102,57700,12425],{"class":112},[102,57702,57703],{"class":217},"'赵云'",[102,57705,12425],{"class":112},[102,57707,57708],{"class":217},"'关羽'",[102,57710,12425],{"class":112},[102,57712,57713],{"class":217},"'张飞'",[102,57715,33237],{"class":112},[102,57717,57718,57720,57723,57725,57727,57729,57731,57734],{"class":104,"line":9860},[102,57719,11211],{"class":108},[102,57721,57722],{"class":161}," qs",[102,57724,13554],{"class":108},[102,57726,54387],{"class":112},[102,57728,54390],{"class":1952},[102,57730,113],{"class":112},[102,57732,57733],{"class":217},"'.qs'",[102,57735,119],{"class":112},[102,57737,57738],{"class":104,"line":9887},[102,57739,57740],{"class":171},"    \u002F\u002F 1.业务1.开始按钮模块\n",[102,57742,57743,57745,57747,57749,57751,57753,57755,57758],{"class":104,"line":9896},[102,57744,11211],{"class":108},[102,57746,4173],{"class":161},[102,57748,13554],{"class":108},[102,57750,54387],{"class":112},[102,57752,54390],{"class":1952},[102,57754,113],{"class":112},[102,57756,57757],{"class":217},"'.start'",[102,57759,119],{"class":112},[102,57761,57762],{"class":104,"line":9902},[102,57763,57764],{"class":171},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[102,57766,57767,57769,57772,57774],{"class":104,"line":9910},[102,57768,52210],{"class":108},[102,57770,57771],{"class":112}," timerId ",[102,57773,158],{"class":108},[102,57775,47324],{"class":161},[102,57777,57778],{"class":104,"line":9915},[102,57779,57780],{"class":171},"    \u002F\u002F 随机号要全局变量\n",[102,57782,57783,57785,57788,57790],{"class":104,"line":16594},[102,57784,52210],{"class":108},[102,57786,57787],{"class":112}," random ",[102,57789,158],{"class":108},[102,57791,47324],{"class":161},[102,57793,57794],{"class":104,"line":16600},[102,57795,57796],{"class":171},"    \u002F\u002F 1.1 添加点击事件\n",[102,57798,57799,57802,57805,57807,57810,57812,57814],{"class":104,"line":16623},[102,57800,57801],{"class":112},"    start.",[102,57803,57804],{"class":1952},"addEventListener",[102,57806,113],{"class":112},[102,57808,57809],{"class":217},"'click'",[102,57811,12425],{"class":112},[102,57813,54440],{"class":108},[102,57815,54443],{"class":112},[102,57817,57818,57821,57823,57825,57827,57829],{"class":104,"line":16629},[102,57819,57820],{"class":112},"      timerId ",[102,57822,158],{"class":108},[102,57824,54435],{"class":1952},[102,57826,113],{"class":112},[102,57828,54440],{"class":108},[102,57830,54443],{"class":112},[102,57832,57833],{"class":104,"line":16652},[102,57834,57835],{"class":171},"        \u002F\u002F 随机数\n",[102,57837,57838,57841,57843,57846,57849,57852,57854,57856,57858,57860],{"class":104,"line":16666},[102,57839,57840],{"class":112},"        random ",[102,57842,158],{"class":108},[102,57844,57845],{"class":1952}," parseInt",[102,57847,57848],{"class":112},"(Math.",[102,57850,57851],{"class":1952},"random",[102,57853,13040],{"class":112},[102,57855,568],{"class":108},[102,57857,51956],{"class":112},[102,57859,51959],{"class":161},[102,57861,119],{"class":112},[102,57863,57864,57867,57869],{"class":104,"line":16686},[102,57865,57866],{"class":112},"        qs.innerHTML ",[102,57868,158],{"class":108},[102,57870,57871],{"class":112}," arr[random]\n",[102,57873,57874,57877,57879],{"class":104,"line":16692},[102,57875,57876],{"class":112},"      }, ",[102,57878,386],{"class":161},[102,57880,119],{"class":112},[102,57882,57883],{"class":104,"line":16703},[102,57884,57885],{"class":171},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[102,57887,57888,57890,57893,57895,57898,57900],{"class":104,"line":16726},[102,57889,54471],{"class":108},[102,57891,57892],{"class":112}," (arr.",[102,57894,51959],{"class":161},[102,57896,57897],{"class":108}," ===",[102,57899,25109],{"class":161},[102,57901,12432],{"class":112},[102,57903,57904],{"class":104,"line":16748},[102,57905,57906],{"class":171},"        \u002F\u002F start.disabled = true\n",[102,57908,57909],{"class":104,"line":16753},[102,57910,57911],{"class":171},"        \u002F\u002F end.disabled = true\n",[102,57913,57914],{"class":104,"line":16759},[102,57915,57916],{"class":171},"        \u002F\u002F 可以合起来写\n",[102,57918,57919,57922,57924,57927,57929],{"class":104,"line":16773},[102,57920,57921],{"class":112},"        start.disabled ",[102,57923,158],{"class":108},[102,57925,57926],{"class":112}," end.disabled ",[102,57928,158],{"class":108},[102,57930,57931],{"class":161}," true\n",[102,57933,57934],{"class":104,"line":16786},[102,57935,52389],{"class":112},[102,57937,57938],{"class":104,"line":16791},[102,57939,33452],{"class":112},[102,57941,57942],{"class":104,"line":16805},[102,57943,57944],{"class":171},"    \u002F\u002F 1.2 关闭按钮模块\n",[102,57946,57947,57949,57951,57953,57955,57957,57959,57962],{"class":104,"line":16810},[102,57948,11211],{"class":108},[102,57950,4189],{"class":161},[102,57952,13554],{"class":108},[102,57954,54387],{"class":112},[102,57956,54390],{"class":1952},[102,57958,113],{"class":112},[102,57960,57961],{"class":217},"'.end'",[102,57963,119],{"class":112},[102,57965,57966,57969,57971,57973,57975,57977,57979],{"class":104,"line":16816},[102,57967,57968],{"class":112},"    end.",[102,57970,57804],{"class":1952},[102,57972,113],{"class":112},[102,57974,57809],{"class":217},[102,57976,12425],{"class":112},[102,57978,54440],{"class":108},[102,57980,54443],{"class":112},[102,57982,57983,57986],{"class":104,"line":16821},[102,57984,57985],{"class":1952},"      clearInterval",[102,57987,57988],{"class":112},"(timerId)\n",[102,57990,57991],{"class":104,"line":16835},[102,57992,57993],{"class":171},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[102,57995,57996,57999,58002,58005,58007],{"class":104,"line":16840},[102,57997,57998],{"class":112},"      arr.",[102,58000,58001],{"class":1952},"splice",[102,58003,58004],{"class":112},"(random, ",[102,58006,330],{"class":161},[102,58008,119],{"class":112},[102,58010,58011],{"class":104,"line":16845},[102,58012,33452],{"class":112},[102,58014,58015],{"class":104,"line":16859},[102,58016,2389],{"emptyLinePlaceholder":30},[102,58018,58019,58021,58023],{"class":104,"line":16871},[102,58020,52408],{"class":112},[102,58022,51804],{"class":51291},[102,58024,51298],{"class":112},[102,58026,58027,58029,58031],{"class":104,"line":16876},[102,58028,51776],{"class":112},[102,58030,51791],{"class":51291},[102,58032,51298],{"class":112},[102,58034,58035],{"class":104,"line":16889},[102,58036,2389],{"emptyLinePlaceholder":30},[102,58038,58039,58041,58043],{"class":104,"line":16894},[102,58040,51776],{"class":112},[102,58042,50626],{"class":51291},[102,58044,51298],{"class":112},[19,58046,58047],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[73,58049,58051],{"id":58050},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[93,58053,58055],{"className":50624,"code":58054,"language":50626,"meta":23,"style":23},"\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",[99,58056,58057,58067,58081,58085,58093,58107,58127,58139,58147,58151,58159,58171,58179,58198,58215,58231,58241,58245,58253,58261,58265],{"__ignoreMap":23},[102,58058,58059,58061,58063,58065],{"class":104,"line":105},[102,58060,51288],{"class":112},[102,58062,51292],{"class":51291},[102,58064,51295],{"class":1952},[102,58066,51298],{"class":112},[102,58068,58069,58071,58073,58075,58077,58079],{"class":104,"line":24},[102,58070,1023],{"class":112},[102,58072,50626],{"class":51291},[102,58074,51307],{"class":1952},[102,58076,158],{"class":112},[102,58078,51312],{"class":217},[102,58080,51298],{"class":112},[102,58082,58083],{"class":104,"line":1168},[102,58084,2389],{"emptyLinePlaceholder":30},[102,58086,58087,58089,58091],{"class":104,"line":1183},[102,58088,1023],{"class":112},[102,58090,51325],{"class":51291},[102,58092,51298],{"class":112},[102,58094,58095,58097,58099,58101,58103,58105],{"class":104,"line":1189},[102,58096,52135],{"class":112},[102,58098,51335],{"class":51291},[102,58100,51338],{"class":1952},[102,58102,158],{"class":112},[102,58104,51343],{"class":217},[102,58106,51298],{"class":112},[102,58108,58109,58111,58113,58115,58117,58119,58121,58123,58125],{"class":104,"line":1203},[102,58110,52135],{"class":112},[102,58112,51335],{"class":51291},[102,58114,14910],{"class":1952},[102,58116,158],{"class":112},[102,58118,51382],{"class":217},[102,58120,51362],{"class":1952},[102,58122,158],{"class":112},[102,58124,51389],{"class":217},[102,58126,51298],{"class":112},[102,58128,58129,58131,58133,58135,58137],{"class":104,"line":1209},[102,58130,52135],{"class":112},[102,58132,51398],{"class":51291},[102,58134,51401],{"class":112},[102,58136,51398],{"class":51291},[102,58138,51298],{"class":112},[102,58140,58141,58143,58145],{"class":104,"line":1300},[102,58142,51776],{"class":112},[102,58144,51325],{"class":51291},[102,58146,51298],{"class":112},[102,58148,58149],{"class":104,"line":1306},[102,58150,2389],{"emptyLinePlaceholder":30},[102,58152,58153,58155,58157],{"class":104,"line":1318},[102,58154,1023],{"class":112},[102,58156,51791],{"class":51291},[102,58158,51298],{"class":112},[102,58160,58161,58163,58165,58167,58169],{"class":104,"line":1601},[102,58162,52135],{"class":112},[102,58164,53878],{"class":51291},[102,58166,53884],{"class":112},[102,58168,53878],{"class":51291},[102,58170,51298],{"class":112},[102,58172,58173,58175,58177],{"class":104,"line":1606},[102,58174,52135],{"class":112},[102,58176,51804],{"class":51291},[102,58178,51298],{"class":112},[102,58180,58181,58183,58185,58187,58189,58191,58193,58196],{"class":104,"line":1612},[102,58182,11211],{"class":108},[102,58184,54382],{"class":161},[102,58186,13554],{"class":108},[102,58188,54387],{"class":112},[102,58190,54390],{"class":1952},[102,58192,113],{"class":112},[102,58194,58195],{"class":217},"'button'",[102,58197,119],{"class":112},[102,58199,58200,58203,58205,58207,58209,58211,58213],{"class":104,"line":1617},[102,58201,58202],{"class":112},"    btn.",[102,58204,57804],{"class":1952},[102,58206,113],{"class":112},[102,58208,57809],{"class":217},[102,58210,12425],{"class":112},[102,58212,54440],{"class":108},[102,58214,54443],{"class":112},[102,58216,58217,58220,58222,58224,58227,58229],{"class":104,"line":1631},[102,58218,58219],{"class":108},"      const",[102,58221,2229],{"class":161},[102,58223,13554],{"class":108},[102,58225,58226],{"class":112}," Math.",[102,58228,57851],{"class":1952},[102,58230,1965],{"class":112},[102,58232,58233,58236,58239],{"class":104,"line":1636},[102,58234,58235],{"class":112},"      console.",[102,58237,58238],{"class":1952},"log",[102,58240,126],{"class":112},[102,58242,58243],{"class":104,"line":1642},[102,58244,33452],{"class":112},[102,58246,58247,58249,58251],{"class":104,"line":1663},[102,58248,52408],{"class":112},[102,58250,51804],{"class":51291},[102,58252,51298],{"class":112},[102,58254,58255,58257,58259],{"class":104,"line":1668},[102,58256,51776],{"class":112},[102,58258,51791],{"class":51291},[102,58260,51298],{"class":112},[102,58262,58263],{"class":104,"line":1682},[102,58264,2389],{"emptyLinePlaceholder":30},[102,58266,58267,58269,58271],{"class":104,"line":1687},[102,58268,51776],{"class":112},[102,58270,50626],{"class":51291},[102,58272,51298],{"class":112},[19,58274,58275],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58277,58278],{},"常量不可以重新赋值",[19,58280,58281],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[93,58283,58285],{"className":50624,"code":58284,"language":50626,"meta":23,"style":23},"\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",[99,58286,58287,58297,58311,58315,58323,58337,58357,58369,58377,58381,58389,58401,58409,58420,58438,58454,58468,58476,58480,58488,58496,58500],{"__ignoreMap":23},[102,58288,58289,58291,58293,58295],{"class":104,"line":105},[102,58290,51288],{"class":112},[102,58292,51292],{"class":51291},[102,58294,51295],{"class":1952},[102,58296,51298],{"class":112},[102,58298,58299,58301,58303,58305,58307,58309],{"class":104,"line":24},[102,58300,1023],{"class":112},[102,58302,50626],{"class":51291},[102,58304,51307],{"class":1952},[102,58306,158],{"class":112},[102,58308,51312],{"class":217},[102,58310,51298],{"class":112},[102,58312,58313],{"class":104,"line":1168},[102,58314,2389],{"emptyLinePlaceholder":30},[102,58316,58317,58319,58321],{"class":104,"line":1183},[102,58318,1023],{"class":112},[102,58320,51325],{"class":51291},[102,58322,51298],{"class":112},[102,58324,58325,58327,58329,58331,58333,58335],{"class":104,"line":1189},[102,58326,52135],{"class":112},[102,58328,51335],{"class":51291},[102,58330,51338],{"class":1952},[102,58332,158],{"class":112},[102,58334,51343],{"class":217},[102,58336,51298],{"class":112},[102,58338,58339,58341,58343,58345,58347,58349,58351,58353,58355],{"class":104,"line":1203},[102,58340,52135],{"class":112},[102,58342,51335],{"class":51291},[102,58344,14910],{"class":1952},[102,58346,158],{"class":112},[102,58348,51382],{"class":217},[102,58350,51362],{"class":1952},[102,58352,158],{"class":112},[102,58354,51389],{"class":217},[102,58356,51298],{"class":112},[102,58358,58359,58361,58363,58365,58367],{"class":104,"line":1209},[102,58360,52135],{"class":112},[102,58362,51398],{"class":51291},[102,58364,51401],{"class":112},[102,58366,51398],{"class":51291},[102,58368,51298],{"class":112},[102,58370,58371,58373,58375],{"class":104,"line":1300},[102,58372,51776],{"class":112},[102,58374,51325],{"class":51291},[102,58376,51298],{"class":112},[102,58378,58379],{"class":104,"line":1306},[102,58380,2389],{"emptyLinePlaceholder":30},[102,58382,58383,58385,58387],{"class":104,"line":1318},[102,58384,1023],{"class":112},[102,58386,51791],{"class":51291},[102,58388,51298],{"class":112},[102,58390,58391,58393,58395,58397,58399],{"class":104,"line":1601},[102,58392,52135],{"class":112},[102,58394,53878],{"class":51291},[102,58396,53884],{"class":112},[102,58398,53878],{"class":51291},[102,58400,51298],{"class":112},[102,58402,58403,58405,58407],{"class":104,"line":1606},[102,58404,52135],{"class":112},[102,58406,51804],{"class":51291},[102,58408,51298],{"class":112},[102,58410,58411,58413,58415,58417],{"class":104,"line":1612},[102,58412,11211],{"class":108},[102,58414,2229],{"class":161},[102,58416,13554],{"class":108},[102,58418,58419],{"class":161}," 10\n",[102,58421,58422,58424,58426,58428,58430,58432,58434,58436],{"class":104,"line":1617},[102,58423,11211],{"class":108},[102,58425,54382],{"class":161},[102,58427,13554],{"class":108},[102,58429,54387],{"class":112},[102,58431,54390],{"class":1952},[102,58433,113],{"class":112},[102,58435,58195],{"class":217},[102,58437,119],{"class":112},[102,58439,58440,58442,58444,58446,58448,58450,58452],{"class":104,"line":1631},[102,58441,58202],{"class":112},[102,58443,57804],{"class":1952},[102,58445,113],{"class":112},[102,58447,57809],{"class":217},[102,58449,12425],{"class":112},[102,58451,54440],{"class":108},[102,58453,54443],{"class":112},[102,58455,58456,58458,58460,58462,58464,58466],{"class":104,"line":1636},[102,58457,58219],{"class":108},[102,58459,2229],{"class":161},[102,58461,13554],{"class":108},[102,58463,58226],{"class":112},[102,58465,57851],{"class":1952},[102,58467,1965],{"class":112},[102,58469,58470,58472,58474],{"class":104,"line":1642},[102,58471,58235],{"class":112},[102,58473,58238],{"class":1952},[102,58475,126],{"class":112},[102,58477,58478],{"class":104,"line":1663},[102,58479,33452],{"class":112},[102,58481,58482,58484,58486],{"class":104,"line":1668},[102,58483,52408],{"class":112},[102,58485,51804],{"class":51291},[102,58487,51298],{"class":112},[102,58489,58490,58492,58494],{"class":104,"line":1682},[102,58491,51776],{"class":112},[102,58493,51791],{"class":51291},[102,58495,51298],{"class":112},[102,58497,58498],{"class":104,"line":1687},[102,58499,2389],{"emptyLinePlaceholder":30},[102,58501,58502,58504,58506],{"class":104,"line":1716},[102,58503,51776],{"class":112},[102,58505,50626],{"class":51291},[102,58507,51298],{"class":112},[19,58509,58510],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[93,58512,58514],{"className":50624,"code":58513,"language":50626,"meta":23,"style":23},"\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",[99,58515,58516,58526,58540,58544,58552,58566,58586,58598,58606,58610,58618,58630,58638,58648,58666,58682,58695,58703,58707,58715,58723,58727],{"__ignoreMap":23},[102,58517,58518,58520,58522,58524],{"class":104,"line":105},[102,58519,51288],{"class":112},[102,58521,51292],{"class":51291},[102,58523,51295],{"class":1952},[102,58525,51298],{"class":112},[102,58527,58528,58530,58532,58534,58536,58538],{"class":104,"line":24},[102,58529,1023],{"class":112},[102,58531,50626],{"class":51291},[102,58533,51307],{"class":1952},[102,58535,158],{"class":112},[102,58537,51312],{"class":217},[102,58539,51298],{"class":112},[102,58541,58542],{"class":104,"line":1168},[102,58543,2389],{"emptyLinePlaceholder":30},[102,58545,58546,58548,58550],{"class":104,"line":1183},[102,58547,1023],{"class":112},[102,58549,51325],{"class":51291},[102,58551,51298],{"class":112},[102,58553,58554,58556,58558,58560,58562,58564],{"class":104,"line":1189},[102,58555,52135],{"class":112},[102,58557,51335],{"class":51291},[102,58559,51338],{"class":1952},[102,58561,158],{"class":112},[102,58563,51343],{"class":217},[102,58565,51298],{"class":112},[102,58567,58568,58570,58572,58574,58576,58578,58580,58582,58584],{"class":104,"line":1203},[102,58569,52135],{"class":112},[102,58571,51335],{"class":51291},[102,58573,14910],{"class":1952},[102,58575,158],{"class":112},[102,58577,51382],{"class":217},[102,58579,51362],{"class":1952},[102,58581,158],{"class":112},[102,58583,51389],{"class":217},[102,58585,51298],{"class":112},[102,58587,58588,58590,58592,58594,58596],{"class":104,"line":1209},[102,58589,52135],{"class":112},[102,58591,51398],{"class":51291},[102,58593,51401],{"class":112},[102,58595,51398],{"class":51291},[102,58597,51298],{"class":112},[102,58599,58600,58602,58604],{"class":104,"line":1300},[102,58601,51776],{"class":112},[102,58603,51325],{"class":51291},[102,58605,51298],{"class":112},[102,58607,58608],{"class":104,"line":1306},[102,58609,2389],{"emptyLinePlaceholder":30},[102,58611,58612,58614,58616],{"class":104,"line":1318},[102,58613,1023],{"class":112},[102,58615,51791],{"class":51291},[102,58617,51298],{"class":112},[102,58619,58620,58622,58624,58626,58628],{"class":104,"line":1601},[102,58621,52135],{"class":112},[102,58623,53878],{"class":51291},[102,58625,53884],{"class":112},[102,58627,53878],{"class":51291},[102,58629,51298],{"class":112},[102,58631,58632,58634,58636],{"class":104,"line":1606},[102,58633,52135],{"class":112},[102,58635,51804],{"class":51291},[102,58637,51298],{"class":112},[102,58639,58640,58642,58644,58646],{"class":104,"line":1612},[102,58641,11211],{"class":108},[102,58643,2229],{"class":161},[102,58645,13554],{"class":108},[102,58647,58419],{"class":161},[102,58649,58650,58652,58654,58656,58658,58660,58662,58664],{"class":104,"line":1617},[102,58651,11211],{"class":108},[102,58653,54382],{"class":161},[102,58655,13554],{"class":108},[102,58657,54387],{"class":112},[102,58659,54390],{"class":1952},[102,58661,113],{"class":112},[102,58663,58195],{"class":217},[102,58665,119],{"class":112},[102,58667,58668,58670,58672,58674,58676,58678,58680],{"class":104,"line":1631},[102,58669,58202],{"class":112},[102,58671,57804],{"class":1952},[102,58673,113],{"class":112},[102,58675,57809],{"class":217},[102,58677,12425],{"class":112},[102,58679,54440],{"class":108},[102,58681,54443],{"class":112},[102,58683,58684,58687,58689,58691,58693],{"class":104,"line":1636},[102,58685,58686],{"class":112},"      num ",[102,58688,158],{"class":108},[102,58690,58226],{"class":112},[102,58692,57851],{"class":1952},[102,58694,1965],{"class":112},[102,58696,58697,58699,58701],{"class":104,"line":1642},[102,58698,58235],{"class":112},[102,58700,58238],{"class":1952},[102,58702,126],{"class":112},[102,58704,58705],{"class":104,"line":1663},[102,58706,33452],{"class":112},[102,58708,58709,58711,58713],{"class":104,"line":1668},[102,58710,52408],{"class":112},[102,58712,51804],{"class":51291},[102,58714,51298],{"class":112},[102,58716,58717,58719,58721],{"class":104,"line":1682},[102,58718,51776],{"class":112},[102,58720,51791],{"class":51291},[102,58722,51298],{"class":112},[102,58724,58725],{"class":104,"line":1687},[102,58726,2389],{"emptyLinePlaceholder":30},[102,58728,58729,58731,58733],{"class":104,"line":1716},[102,58730,51776],{"class":112},[102,58732,50626],{"class":51291},[102,58734,51298],{"class":112},[19,58736,58737],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[73,58739,58741],{"id":58740},"_324-事件监听版本","3.2.4 事件监听版本",[19,58743,58744],{},[1451,58745],{"alt":23,"src":58746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,58748,58749],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,58751,58752],{},"这种方式会覆盖前边的事件监听:",[93,58754,58756],{"className":50624,"code":58755,"language":50626,"meta":23,"style":23},"\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",[99,58757,58758,58768,58782,58786,58794,58808,58828,58840,58848,58852,58860,58872,58880,58898,58912,58923,58927,58939,58949,58953,58961,58969,58973],{"__ignoreMap":23},[102,58759,58760,58762,58764,58766],{"class":104,"line":105},[102,58761,51288],{"class":112},[102,58763,51292],{"class":51291},[102,58765,51295],{"class":1952},[102,58767,51298],{"class":112},[102,58769,58770,58772,58774,58776,58778,58780],{"class":104,"line":24},[102,58771,1023],{"class":112},[102,58773,50626],{"class":51291},[102,58775,51307],{"class":1952},[102,58777,158],{"class":112},[102,58779,51312],{"class":217},[102,58781,51298],{"class":112},[102,58783,58784],{"class":104,"line":1168},[102,58785,2389],{"emptyLinePlaceholder":30},[102,58787,58788,58790,58792],{"class":104,"line":1183},[102,58789,1023],{"class":112},[102,58791,51325],{"class":51291},[102,58793,51298],{"class":112},[102,58795,58796,58798,58800,58802,58804,58806],{"class":104,"line":1189},[102,58797,52135],{"class":112},[102,58799,51335],{"class":51291},[102,58801,51338],{"class":1952},[102,58803,158],{"class":112},[102,58805,51343],{"class":217},[102,58807,51298],{"class":112},[102,58809,58810,58812,58814,58816,58818,58820,58822,58824,58826],{"class":104,"line":1203},[102,58811,52135],{"class":112},[102,58813,51335],{"class":51291},[102,58815,14910],{"class":1952},[102,58817,158],{"class":112},[102,58819,51382],{"class":217},[102,58821,51362],{"class":1952},[102,58823,158],{"class":112},[102,58825,51389],{"class":217},[102,58827,51298],{"class":112},[102,58829,58830,58832,58834,58836,58838],{"class":104,"line":1209},[102,58831,52135],{"class":112},[102,58833,51398],{"class":51291},[102,58835,51401],{"class":112},[102,58837,51398],{"class":51291},[102,58839,51298],{"class":112},[102,58841,58842,58844,58846],{"class":104,"line":1300},[102,58843,51776],{"class":112},[102,58845,51325],{"class":51291},[102,58847,51298],{"class":112},[102,58849,58850],{"class":104,"line":1306},[102,58851,2389],{"emptyLinePlaceholder":30},[102,58853,58854,58856,58858],{"class":104,"line":1318},[102,58855,1023],{"class":112},[102,58857,51791],{"class":51291},[102,58859,51298],{"class":112},[102,58861,58862,58864,58866,58868,58870],{"class":104,"line":1601},[102,58863,52135],{"class":112},[102,58865,53878],{"class":51291},[102,58867,53884],{"class":112},[102,58869,53878],{"class":51291},[102,58871,51298],{"class":112},[102,58873,58874,58876,58878],{"class":104,"line":1606},[102,58875,52135],{"class":112},[102,58877,51804],{"class":51291},[102,58879,51298],{"class":112},[102,58881,58882,58884,58886,58888,58890,58892,58894,58896],{"class":104,"line":1612},[102,58883,11211],{"class":108},[102,58885,54382],{"class":161},[102,58887,13554],{"class":108},[102,58889,54387],{"class":112},[102,58891,54390],{"class":1952},[102,58893,113],{"class":112},[102,58895,58195],{"class":217},[102,58897,119],{"class":112},[102,58899,58900,58902,58905,58907,58910],{"class":104,"line":1617},[102,58901,58202],{"class":112},[102,58903,58904],{"class":1952},"onclick",[102,58906,13554],{"class":108},[102,58908,58909],{"class":108}," function",[102,58911,54443],{"class":112},[102,58913,58914,58917,58919,58921],{"class":104,"line":1631},[102,58915,58916],{"class":1952},"      alert",[102,58918,113],{"class":112},[102,58920,585],{"class":161},[102,58922,119],{"class":112},[102,58924,58925],{"class":104,"line":1636},[102,58926,2176],{"class":112},[102,58928,58929,58931,58933,58935,58937],{"class":104,"line":1642},[102,58930,58202],{"class":112},[102,58932,58904],{"class":1952},[102,58934,13554],{"class":108},[102,58936,58909],{"class":108},[102,58938,54443],{"class":112},[102,58940,58941,58943,58945,58947],{"class":104,"line":1663},[102,58942,58916],{"class":1952},[102,58944,113],{"class":112},[102,58946,863],{"class":161},[102,58948,119],{"class":112},[102,58950,58951],{"class":104,"line":1668},[102,58952,2176],{"class":112},[102,58954,58955,58957,58959],{"class":104,"line":1682},[102,58956,52408],{"class":112},[102,58958,51804],{"class":51291},[102,58960,51298],{"class":112},[102,58962,58963,58965,58967],{"class":104,"line":1687},[102,58964,51776],{"class":112},[102,58966,51791],{"class":51291},[102,58968,51298],{"class":112},[102,58970,58971],{"class":104,"line":1716},[102,58972,2389],{"emptyLinePlaceholder":30},[102,58974,58975,58977,58979],{"class":104,"line":1721},[102,58976,51776],{"class":112},[102,58978,50626],{"class":51291},[102,58980,51298],{"class":112},[19,58982,58983],{},"只要点击就输出结果为22,前边11被覆盖了",[93,58985,58987],{"className":50624,"code":58986,"language":50626,"meta":23,"style":23},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[99,58988,58989,58994,58999,59003,59008,59013],{"__ignoreMap":23},[102,58990,58991],{"class":104,"line":105},[102,58992,58993],{"class":112},"  btn.addEventListener('click', function () {\n",[102,58995,58996],{"class":104,"line":24},[102,58997,58998],{"class":112},"      alert(11)\n",[102,59000,59001],{"class":104,"line":1168},[102,59002,33452],{"class":112},[102,59004,59005],{"class":104,"line":1183},[102,59006,59007],{"class":112},"    btn.addEventListener('click', function () {\n",[102,59009,59010],{"class":104,"line":1189},[102,59011,59012],{"class":112},"      alert(22)\n",[102,59014,59015],{"class":104,"line":1203},[102,59016,33452],{"class":112},[19,59018,59019],{},"点击第一次输出11,第二次点击为22",[73,59021,59023],{"id":59022},"_325-事件类型","3.2.5 事件类型",[19,59025,59026],{},[1451,59027],{"alt":23,"src":59028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21988,59030,59032],{"id":59031},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59034,59035],{},"补充知识:",[19,59037,59038],{},"轮播图自动播放模块,可以使用",[19,59040,59041],{},"let timerId = setInterval(function () {",[19,59043,59044],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59046,59047],{},"用js方法模拟进行点击事件,click必须加()",[19,59049,59050],{},"next.click()",[19,59052,59053],{},"}, 1000)",[19,59055,59056],{},[1451,59057],{"alt":23,"src":59058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[93,59060,59062],{"className":53058,"code":59061,"language":53060,"meta":23,"style":23},"\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",[99,59063,59064,59068,59078,59092,59096,59104,59119,59139,59159,59172,59180,59185,59190,59194,59198,59203,59208,59213,59218,59222,59226,59231,59236,59241,59245,59249,59254,59258,59263,59268,59272,59276,59281,59286,59291,59296,59301,59305,59309,59314,59319,59324,59329,59334,59338,59342,59347,59352,59357,59362,59367,59372,59377,59382,59387,59392,59396,59400,59405,59410,59414,59418,59423,59428,59432,59437,59442,59446,59450,59455,59459,59464,59469,59473,59478,59482,59486,59491,59496,59501,59506,59511,59516,59521,59525,59529,59533,59538,59543,59548,59553,59557,59565,59573,59577,59585,59600,59614,59635,59643,59657,59670,59685,59704,59716,59728,59740,59752,59764,59776,59788,59796,59811,59835,59859,59867,59875,59883,59891,59896,59901,59906,59911,59916,59921,59926,59931,59936,59941,59945,59950,59955,59960,59965,59970,59975,59980,59985,59990,59994,59999,60004,60009,60014,60019,60024,60029,60034,60039,60044,60049,60054,60058,60062,60067,60072,60077,60081,60086,60091,60096,60101,60106,60110,60115,60119,60123,60127,60131,60135,60139,60144,60149,60154,60159,60164,60169,60174,60179,60184,60188,60192,60197,60202,60207,60212,60217,60221,60226,60231,60236,60241,60246,60251,60255,60259,60264,60268,60273,60277,60282,60287,60292,60297,60302,60307,60311,60319,60327,60331],{"__ignoreMap":23},[102,59065,59066],{"class":104,"line":105},[102,59067,2389],{"emptyLinePlaceholder":30},[102,59069,59070,59072,59074,59076],{"class":104,"line":24},[102,59071,51288],{"class":112},[102,59073,51292],{"class":108},[102,59075,51295],{"class":161},[102,59077,51298],{"class":112},[102,59079,59080,59082,59084,59086,59088,59090],{"class":104,"line":1168},[102,59081,1023],{"class":112},[102,59083,50626],{"class":51291},[102,59085,51307],{"class":1952},[102,59087,158],{"class":112},[102,59089,51312],{"class":217},[102,59091,51298],{"class":112},[102,59093,59094],{"class":104,"line":1183},[102,59095,2389],{"emptyLinePlaceholder":30},[102,59097,59098,59100,59102],{"class":104,"line":1189},[102,59099,1023],{"class":112},[102,59101,51325],{"class":51291},[102,59103,51298],{"class":112},[102,59105,59106,59108,59110,59112,59114,59116],{"class":104,"line":1203},[102,59107,52135],{"class":112},[102,59109,51335],{"class":51291},[102,59111,51338],{"class":1952},[102,59113,158],{"class":112},[102,59115,51343],{"class":217},[102,59117,59118],{"class":112}," \u002F>\n",[102,59120,59121,59123,59125,59127,59129,59131,59133,59135,59137],{"class":104,"line":1209},[102,59122,52135],{"class":112},[102,59124,51335],{"class":51291},[102,59126,51354],{"class":1952},[102,59128,158],{"class":112},[102,59130,51359],{"class":217},[102,59132,51362],{"class":1952},[102,59134,158],{"class":112},[102,59136,51367],{"class":217},[102,59138,59118],{"class":112},[102,59140,59141,59143,59145,59147,59149,59151,59153,59155,59157],{"class":104,"line":1300},[102,59142,52135],{"class":112},[102,59144,51335],{"class":51291},[102,59146,14910],{"class":1952},[102,59148,158],{"class":112},[102,59150,51382],{"class":217},[102,59152,51362],{"class":1952},[102,59154,158],{"class":112},[102,59156,51389],{"class":217},[102,59158,59118],{"class":112},[102,59160,59161,59163,59165,59168,59170],{"class":104,"line":1306},[102,59162,52135],{"class":112},[102,59164,51398],{"class":51291},[102,59166,59167],{"class":112},">轮播图点击切换\u003C\u002F",[102,59169,51398],{"class":51291},[102,59171,51298],{"class":112},[102,59173,59174,59176,59178],{"class":104,"line":1318},[102,59175,52135],{"class":112},[102,59177,5116],{"class":51291},[102,59179,51298],{"class":112},[102,59181,59182],{"class":104,"line":1601},[102,59183,59184],{"class":112},"    * {\n",[102,59186,59187],{"class":104,"line":1606},[102,59188,59189],{"class":112},"      box-sizing: border-box;\n",[102,59191,59192],{"class":104,"line":1612},[102,59193,2176],{"class":112},[102,59195,59196],{"class":104,"line":1617},[102,59197,2389],{"emptyLinePlaceholder":30},[102,59199,59200],{"class":104,"line":1631},[102,59201,59202],{"class":112},"    .slider {\n",[102,59204,59205],{"class":104,"line":1636},[102,59206,59207],{"class":112},"      width: 560px;\n",[102,59209,59210],{"class":104,"line":1642},[102,59211,59212],{"class":112},"      height: 400px;\n",[102,59214,59215],{"class":104,"line":1663},[102,59216,59217],{"class":112},"      overflow: hidden;\n",[102,59219,59220],{"class":104,"line":1668},[102,59221,2176],{"class":112},[102,59223,59224],{"class":104,"line":1682},[102,59225,2389],{"emptyLinePlaceholder":30},[102,59227,59228],{"class":104,"line":1687},[102,59229,59230],{"class":112},"    .slider-wrapper {\n",[102,59232,59233],{"class":104,"line":1716},[102,59234,59235],{"class":112},"      width: 100%;\n",[102,59237,59238],{"class":104,"line":1721},[102,59239,59240],{"class":112},"      height: 320px;\n",[102,59242,59243],{"class":104,"line":1738},[102,59244,2176],{"class":112},[102,59246,59247],{"class":104,"line":1743},[102,59248,2389],{"emptyLinePlaceholder":30},[102,59250,59251],{"class":104,"line":1748},[102,59252,59253],{"class":112},"    .slider-wrapper img {\n",[102,59255,59256],{"class":104,"line":1753},[102,59257,59235],{"class":112},[102,59259,59260],{"class":104,"line":1767},[102,59261,59262],{"class":112},"      height: 100%;\n",[102,59264,59265],{"class":104,"line":1772},[102,59266,59267],{"class":112},"      display: block;\n",[102,59269,59270],{"class":104,"line":2566},[102,59271,2176],{"class":112},[102,59273,59274],{"class":104,"line":2580},[102,59275,2389],{"emptyLinePlaceholder":30},[102,59277,59278],{"class":104,"line":2588},[102,59279,59280],{"class":112},"    .slider-footer {\n",[102,59282,59283],{"class":104,"line":2593},[102,59284,59285],{"class":112},"      height: 80px;\n",[102,59287,59288],{"class":104,"line":2599},[102,59289,59290],{"class":112},"      background-color: rgb(100, 67, 68);\n",[102,59292,59293],{"class":104,"line":2605},[102,59294,59295],{"class":112},"      padding: 12px 12px 0 12px;\n",[102,59297,59298],{"class":104,"line":2610},[102,59299,59300],{"class":112},"      position: relative;\n",[102,59302,59303],{"class":104,"line":7938},[102,59304,2176],{"class":112},[102,59306,59307],{"class":104,"line":7962},[102,59308,2389],{"emptyLinePlaceholder":30},[102,59310,59311],{"class":104,"line":7967},[102,59312,59313],{"class":112},"    .slider-footer .toggle {\n",[102,59315,59316],{"class":104,"line":7973},[102,59317,59318],{"class":112},"      position: absolute;\n",[102,59320,59321],{"class":104,"line":8000},[102,59322,59323],{"class":112},"      right: 0;\n",[102,59325,59326],{"class":104,"line":8005},[102,59327,59328],{"class":112},"      top: 12px;\n",[102,59330,59331],{"class":104,"line":8011},[102,59332,59333],{"class":112},"      display: flex;\n",[102,59335,59336],{"class":104,"line":8023},[102,59337,2176],{"class":112},[102,59339,59340],{"class":104,"line":8035},[102,59341,2389],{"emptyLinePlaceholder":30},[102,59343,59344],{"class":104,"line":8047},[102,59345,59346],{"class":112},"    .slider-footer .toggle button {\n",[102,59348,59349],{"class":104,"line":9706},[102,59350,59351],{"class":112},"      margin-right: 12px;\n",[102,59353,59354],{"class":104,"line":9731},[102,59355,59356],{"class":112},"      width: 28px;\n",[102,59358,59359],{"class":104,"line":9754},[102,59360,59361],{"class":112},"      height: 28px;\n",[102,59363,59364],{"class":104,"line":9778},[102,59365,59366],{"class":112},"      appearance: none;\n",[102,59368,59369],{"class":104,"line":9783},[102,59370,59371],{"class":112},"      border: none;\n",[102,59373,59374],{"class":104,"line":9788},[102,59375,59376],{"class":112},"      background: rgba(255, 255, 255, 0.1);\n",[102,59378,59379],{"class":104,"line":9793},[102,59380,59381],{"class":112},"      color: #fff;\n",[102,59383,59384],{"class":104,"line":9802},[102,59385,59386],{"class":112},"      border-radius: 4px;\n",[102,59388,59389],{"class":104,"line":9807},[102,59390,59391],{"class":112},"      cursor: pointer;\n",[102,59393,59394],{"class":104,"line":9813},[102,59395,2176],{"class":112},[102,59397,59398],{"class":104,"line":9834},[102,59399,2389],{"emptyLinePlaceholder":30},[102,59401,59402],{"class":104,"line":9840},[102,59403,59404],{"class":112},"    .slider-footer .toggle button:hover {\n",[102,59406,59407],{"class":104,"line":9854},[102,59408,59409],{"class":112},"      background: rgba(255, 255, 255, 0.2);\n",[102,59411,59412],{"class":104,"line":9860},[102,59413,2176],{"class":112},[102,59415,59416],{"class":104,"line":9887},[102,59417,2389],{"emptyLinePlaceholder":30},[102,59419,59420],{"class":104,"line":9896},[102,59421,59422],{"class":112},"    .slider-footer p {\n",[102,59424,59425],{"class":104,"line":9902},[102,59426,59427],{"class":112},"      margin: 0;\n",[102,59429,59430],{"class":104,"line":9910},[102,59431,59381],{"class":112},[102,59433,59434],{"class":104,"line":9915},[102,59435,59436],{"class":112},"      font-size: 18px;\n",[102,59438,59439],{"class":104,"line":16594},[102,59440,59441],{"class":112},"      margin-bottom: 10px;\n",[102,59443,59444],{"class":104,"line":16600},[102,59445,2176],{"class":112},[102,59447,59448],{"class":104,"line":16623},[102,59449,2389],{"emptyLinePlaceholder":30},[102,59451,59452],{"class":104,"line":16629},[102,59453,59454],{"class":112},"    .slider-indicator {\n",[102,59456,59457],{"class":104,"line":16652},[102,59458,59427],{"class":112},[102,59460,59461],{"class":104,"line":16666},[102,59462,59463],{"class":112},"      padding: 0;\n",[102,59465,59466],{"class":104,"line":16686},[102,59467,59468],{"class":112},"      list-style: none;\n",[102,59470,59471],{"class":104,"line":16692},[102,59472,59333],{"class":112},[102,59474,59475],{"class":104,"line":16703},[102,59476,59477],{"class":112},"      align-items: center;\n",[102,59479,59480],{"class":104,"line":16726},[102,59481,2176],{"class":112},[102,59483,59484],{"class":104,"line":16748},[102,59485,2389],{"emptyLinePlaceholder":30},[102,59487,59488],{"class":104,"line":16753},[102,59489,59490],{"class":112},"    .slider-indicator li {\n",[102,59492,59493],{"class":104,"line":16759},[102,59494,59495],{"class":112},"      width: 8px;\n",[102,59497,59498],{"class":104,"line":16773},[102,59499,59500],{"class":112},"      height: 8px;\n",[102,59502,59503],{"class":104,"line":16786},[102,59504,59505],{"class":112},"      margin: 4px;\n",[102,59507,59508],{"class":104,"line":16791},[102,59509,59510],{"class":112},"      border-radius: 50%;\n",[102,59512,59513],{"class":104,"line":16805},[102,59514,59515],{"class":112},"      background: #fff;\n",[102,59517,59518],{"class":104,"line":16810},[102,59519,59520],{"class":112},"      opacity: 0.4;\n",[102,59522,59523],{"class":104,"line":16816},[102,59524,59391],{"class":112},[102,59526,59527],{"class":104,"line":16821},[102,59528,2176],{"class":112},[102,59530,59531],{"class":104,"line":16835},[102,59532,2389],{"emptyLinePlaceholder":30},[102,59534,59535],{"class":104,"line":16840},[102,59536,59537],{"class":112},"    .slider-indicator li.active {\n",[102,59539,59540],{"class":104,"line":16845},[102,59541,59542],{"class":112},"      width: 12px;\n",[102,59544,59545],{"class":104,"line":16859},[102,59546,59547],{"class":112},"      height: 12px;\n",[102,59549,59550],{"class":104,"line":16871},[102,59551,59552],{"class":112},"      opacity: 1;\n",[102,59554,59555],{"class":104,"line":16876},[102,59556,2176],{"class":112},[102,59558,59559,59561,59563],{"class":104,"line":16889},[102,59560,52408],{"class":112},[102,59562,5116],{"class":51291},[102,59564,51298],{"class":112},[102,59566,59567,59569,59571],{"class":104,"line":16894},[102,59568,51776],{"class":112},[102,59570,51325],{"class":51291},[102,59572,51298],{"class":112},[102,59574,59575],{"class":104,"line":16899},[102,59576,2389],{"emptyLinePlaceholder":30},[102,59578,59579,59581,59583],{"class":104,"line":16904},[102,59580,1023],{"class":112},[102,59582,51791],{"class":51291},[102,59584,51298],{"class":112},[102,59586,59587,59589,59591,59593,59595,59598],{"class":104,"line":16917},[102,59588,52135],{"class":112},[102,59590,51602],{"class":51291},[102,59592,53477],{"class":1952},[102,59594,158],{"class":112},[102,59596,59597],{"class":217},"\"slider\"",[102,59599,51298],{"class":112},[102,59601,59602,59604,59606,59608,59610,59612],{"class":104,"line":16922},[102,59603,51332],{"class":112},[102,59605,51602],{"class":51291},[102,59607,53477],{"class":1952},[102,59609,158],{"class":112},[102,59611,55218],{"class":217},[102,59613,51298],{"class":112},[102,59615,59616,59618,59620,59622,59624,59627,59629,59631,59633],{"class":104,"line":32624},[102,59617,55225],{"class":112},[102,59619,1451],{"class":51291},[102,59621,55230],{"class":1952},[102,59623,158],{"class":112},[102,59625,59626],{"class":217},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[102,59628,55238],{"class":1952},[102,59630,158],{"class":112},[102,59632,7642],{"class":217},[102,59634,59118],{"class":112},[102,59636,59637,59639,59641],{"class":104,"line":32630},[102,59638,51767],{"class":112},[102,59640,51602],{"class":51291},[102,59642,51298],{"class":112},[102,59644,59645,59647,59649,59651,59653,59655],{"class":104,"line":32636},[102,59646,51332],{"class":112},[102,59648,51602],{"class":51291},[102,59650,53477],{"class":1952},[102,59652,158],{"class":112},[102,59654,55265],{"class":217},[102,59656,51298],{"class":112},[102,59658,59659,59661,59663,59666,59668],{"class":104,"line":32642},[102,59660,55225],{"class":112},[102,59662,19],{"class":51291},[102,59664,59665],{"class":112},">对人类来说会不会太超前了？\u003C\u002F",[102,59667,19],{"class":51291},[102,59669,51298],{"class":112},[102,59671,59672,59674,59676,59678,59680,59683],{"class":104,"line":32648},[102,59673,55225],{"class":112},[102,59675,1120],{"class":51291},[102,59677,53477],{"class":1952},[102,59679,158],{"class":112},[102,59681,59682],{"class":217},"\"slider-indicator\"",[102,59684,51298],{"class":112},[102,59686,59687,59689,59691,59693,59695,59698,59700,59702],{"class":104,"line":32659},[102,59688,55293],{"class":112},[102,59690,59],{"class":51291},[102,59692,53477],{"class":1952},[102,59694,158],{"class":112},[102,59696,59697],{"class":217},"\"active\"",[102,59699,55305],{"class":112},[102,59701,59],{"class":51291},[102,59703,51298],{"class":112},[102,59705,59706,59708,59710,59712,59714],{"class":104,"line":32665},[102,59707,55293],{"class":112},[102,59709,59],{"class":51291},[102,59711,55305],{"class":112},[102,59713,59],{"class":51291},[102,59715,51298],{"class":112},[102,59717,59718,59720,59722,59724,59726],{"class":104,"line":32685},[102,59719,55293],{"class":112},[102,59721,59],{"class":51291},[102,59723,55305],{"class":112},[102,59725,59],{"class":51291},[102,59727,51298],{"class":112},[102,59729,59730,59732,59734,59736,59738],{"class":104,"line":32691},[102,59731,55293],{"class":112},[102,59733,59],{"class":51291},[102,59735,55305],{"class":112},[102,59737,59],{"class":51291},[102,59739,51298],{"class":112},[102,59741,59742,59744,59746,59748,59750],{"class":104,"line":32702},[102,59743,55293],{"class":112},[102,59745,59],{"class":51291},[102,59747,55305],{"class":112},[102,59749,59],{"class":51291},[102,59751,51298],{"class":112},[102,59753,59754,59756,59758,59760,59762],{"class":104,"line":32708},[102,59755,55293],{"class":112},[102,59757,59],{"class":51291},[102,59759,55305],{"class":112},[102,59761,59],{"class":51291},[102,59763,51298],{"class":112},[102,59765,59766,59768,59770,59772,59774],{"class":104,"line":32714},[102,59767,55293],{"class":112},[102,59769,59],{"class":51291},[102,59771,55305],{"class":112},[102,59773,59],{"class":51291},[102,59775,51298],{"class":112},[102,59777,59778,59780,59782,59784,59786],{"class":104,"line":32720},[102,59779,55293],{"class":112},[102,59781,59],{"class":51291},[102,59783,55305],{"class":112},[102,59785,59],{"class":51291},[102,59787,51298],{"class":112},[102,59789,59790,59792,59794],{"class":104,"line":32726},[102,59791,55398],{"class":112},[102,59793,1120],{"class":51291},[102,59795,51298],{"class":112},[102,59797,59798,59800,59802,59804,59806,59809],{"class":104,"line":32732},[102,59799,55225],{"class":112},[102,59801,51602],{"class":51291},[102,59803,53477],{"class":1952},[102,59805,158],{"class":112},[102,59807,59808],{"class":217},"\"toggle\"",[102,59810,51298],{"class":112},[102,59812,59813,59815,59817,59819,59821,59824,59826,59829,59831,59833],{"class":104,"line":32738},[102,59814,55293],{"class":112},[102,59816,53878],{"class":51291},[102,59818,53477],{"class":1952},[102,59820,158],{"class":112},[102,59822,59823],{"class":217},"\"prev\"",[102,59825,1073],{"class":112},[102,59827,59828],{"class":161},"&lt;",[102,59830,51776],{"class":112},[102,59832,53878],{"class":51291},[102,59834,51298],{"class":112},[102,59836,59837,59839,59841,59843,59845,59848,59850,59853,59855,59857],{"class":104,"line":32744},[102,59838,55293],{"class":112},[102,59840,53878],{"class":51291},[102,59842,53477],{"class":1952},[102,59844,158],{"class":112},[102,59846,59847],{"class":217},"\"next\"",[102,59849,1073],{"class":112},[102,59851,59852],{"class":161},"&gt;",[102,59854,51776],{"class":112},[102,59856,53878],{"class":51291},[102,59858,51298],{"class":112},[102,59860,59861,59863,59865],{"class":104,"line":32764},[102,59862,55398],{"class":112},[102,59864,51602],{"class":51291},[102,59866,51298],{"class":112},[102,59868,59869,59871,59873],{"class":104,"line":32770},[102,59870,51767],{"class":112},[102,59872,51602],{"class":51291},[102,59874,51298],{"class":112},[102,59876,59877,59879,59881],{"class":104,"line":32786},[102,59878,52408],{"class":112},[102,59880,51602],{"class":51291},[102,59882,51298],{"class":112},[102,59884,59885,59887,59889],{"class":104,"line":32792},[102,59886,52135],{"class":112},[102,59888,51804],{"class":51291},[102,59890,51298],{"class":112},[102,59892,59893],{"class":104,"line":32806},[102,59894,59895],{"class":112},"    \u002F\u002F 1. 初始数据\n",[102,59897,59898],{"class":104,"line":32812},[102,59899,59900],{"class":112},"    const data = [\n",[102,59902,59903],{"class":104,"line":32827},[102,59904,59905],{"class":112},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[102,59907,59908],{"class":104,"line":32833},[102,59909,59910],{"class":112},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[102,59912,59913],{"class":104,"line":32842},[102,59914,59915],{"class":112},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[102,59917,59918],{"class":104,"line":32848},[102,59919,59920],{"class":112},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[102,59922,59923],{"class":104,"line":32857},[102,59924,59925],{"class":112},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[102,59927,59928],{"class":104,"line":32863},[102,59929,59930],{"class":112},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[102,59932,59933],{"class":104,"line":32869},[102,59934,59935],{"class":112},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[102,59937,59938],{"class":104,"line":32878},[102,59939,59940],{"class":112},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[102,59942,59943],{"class":104,"line":32884},[102,59944,53100],{"class":112},[102,59946,59947],{"class":104,"line":32895},[102,59948,59949],{"class":112},"    \u002F\u002F 获取元素\n",[102,59951,59952],{"class":104,"line":32901},[102,59953,59954],{"class":112},"    const img = document.querySelector('.slider-wrapper img')\n",[102,59956,59957],{"class":104,"line":32920},[102,59958,59959],{"class":112},"    const p = document.querySelector('.slider-footer p')\n",[102,59961,59962],{"class":104,"line":32926},[102,59963,59964],{"class":112},"    const footer = document.querySelector('.slider-footer')\n",[102,59966,59967],{"class":104,"line":32937},[102,59968,59969],{"class":112},"    \u002F\u002F 1. 右按钮业务\n",[102,59971,59972],{"class":104,"line":32943},[102,59973,59974],{"class":112},"    \u002F\u002F 1.1 获取右侧按钮 \n",[102,59976,59977],{"class":104,"line":32963},[102,59978,59979],{"class":112},"    const next = document.querySelector('.next')\n",[102,59981,59982],{"class":104,"line":32979},[102,59983,59984],{"class":112},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[102,59986,59987],{"class":104,"line":32985},[102,59988,59989],{"class":112},"    \u002F\u002F 1.2 注册点击事件\n",[102,59991,59992],{"class":104,"line":32999},[102,59993,2389],{"emptyLinePlaceholder":30},[102,59995,59996],{"class":104,"line":33005},[102,59997,59998],{"class":112},"    next.addEventListener('click', function () {\n",[102,60000,60001],{"class":104,"line":33011},[102,60002,60003],{"class":112},"      \u002F\u002F console.log(11)\n",[102,60005,60006],{"class":104,"line":33022},[102,60007,60008],{"class":112},"      i++\n",[102,60010,60011],{"class":104,"line":33028},[102,60012,60013],{"class":112},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[102,60015,60016],{"class":104,"line":33034},[102,60017,60018],{"class":112},"      \u002F\u002F if (i >= 8) {\n",[102,60020,60021],{"class":104,"line":33044},[102,60022,60023],{"class":112},"      \u002F\u002F   i = 0\n",[102,60025,60026],{"class":104,"line":33050},[102,60027,60028],{"class":112},"      \u002F\u002F }\n",[102,60030,60031],{"class":104,"line":33061},[102,60032,60033],{"class":112},"      i = i >= data.length ? 0 : i\n",[102,60035,60036],{"class":104,"line":33067},[102,60037,60038],{"class":112},"      \u002F\u002F 1.3 得到对应的对象\n",[102,60040,60041],{"class":104,"line":33077},[102,60042,60043],{"class":112},"      \u002F\u002F console.log(data[i])\n",[102,60045,60046],{"class":104,"line":33082},[102,60047,60048],{"class":112},"      \u002F\u002F 调用函数\n",[102,60050,60051],{"class":104,"line":33088},[102,60052,60053],{"class":112},"      toggle()\n",[102,60055,60056],{"class":104,"line":33137},[102,60057,33452],{"class":112},[102,60059,60060],{"class":104,"line":33184},[102,60061,2389],{"emptyLinePlaceholder":30},[102,60063,60064],{"class":104,"line":33189},[102,60065,60066],{"class":112},"    \u002F\u002F 2. 左侧按钮业务\n",[102,60068,60069],{"class":104,"line":33195},[102,60070,60071],{"class":112},"    \u002F\u002F 2.1 获取左侧按钮 \n",[102,60073,60074],{"class":104,"line":33214},[102,60075,60076],{"class":112},"    const prev = document.querySelector('.prev')\n",[102,60078,60079],{"class":104,"line":33220},[102,60080,59989],{"class":112},[102,60082,60083],{"class":104,"line":33240},[102,60084,60085],{"class":112},"    prev.addEventListener('click', function () {\n",[102,60087,60088],{"class":104,"line":33246},[102,60089,60090],{"class":112},"      i--\n",[102,60092,60093],{"class":104,"line":33252},[102,60094,60095],{"class":112},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[102,60097,60098],{"class":104,"line":33262},[102,60099,60100],{"class":112},"      \u002F\u002F if (i \u003C 0) {\n",[102,60102,60103],{"class":104,"line":33267},[102,60104,60105],{"class":112},"      \u002F\u002F   i = 7\n",[102,60107,60108],{"class":104,"line":33273},[102,60109,60028],{"class":112},[102,60111,60112],{"class":104,"line":33289},[102,60113,60114],{"class":112},"      i = i \u003C 0 ? data.length - 1 : i\n",[102,60116,60117],{"class":104,"line":33334},[102,60118,60038],{"class":112},[102,60120,60121],{"class":104,"line":33340},[102,60122,60043],{"class":112},[102,60124,60125],{"class":104,"line":33346},[102,60126,60048],{"class":112},[102,60128,60129],{"class":104,"line":33352},[102,60130,60053],{"class":112},[102,60132,60133],{"class":104,"line":33363},[102,60134,33452],{"class":112},[102,60136,60137],{"class":104,"line":33369},[102,60138,2389],{"emptyLinePlaceholder":30},[102,60140,60141],{"class":104,"line":33375},[102,60142,60143],{"class":112},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[102,60145,60146],{"class":104,"line":33381},[102,60147,60148],{"class":112},"    function toggle() {\n",[102,60150,60151],{"class":104,"line":33399},[102,60152,60153],{"class":112},"      \u002F\u002F 1.4 渲染对应的数据\n",[102,60155,60156],{"class":104,"line":33413},[102,60157,60158],{"class":112},"      img.src = data[i].url\n",[102,60160,60161],{"class":104,"line":33422},[102,60162,60163],{"class":112},"      p.innerHTML = data[i].title\n",[102,60165,60166],{"class":104,"line":33431},[102,60167,60168],{"class":112},"      footer.style.backgroundColor = data[i].color\n",[102,60170,60171],{"class":104,"line":33440},[102,60172,60173],{"class":112},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[102,60175,60176],{"class":104,"line":33449},[102,60177,60178],{"class":112},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[102,60180,60181],{"class":104,"line":33455},[102,60182,60183],{"class":112},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[102,60185,60186],{"class":104,"line":33461},[102,60187,2176],{"class":112},[102,60189,60190],{"class":104,"line":33469},[102,60191,2389],{"emptyLinePlaceholder":30},[102,60193,60194],{"class":104,"line":33474},[102,60195,60196],{"class":112},"    \u002F\u002F 3. 自动播放模块\n",[102,60198,60199],{"class":104,"line":33480},[102,60200,60201],{"class":112},"    let timerId = setInterval(function () {\n",[102,60203,60204],{"class":104,"line":33491},[102,60205,60206],{"class":112},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[102,60208,60209],{"class":104,"line":33497},[102,60210,60211],{"class":112},"      next.click()\n",[102,60213,60214],{"class":104,"line":33517},[102,60215,60216],{"class":112},"    }, 1000)\n",[102,60218,60219],{"class":104,"line":33523},[102,60220,2389],{"emptyLinePlaceholder":30},[102,60222,60223],{"class":104,"line":33529},[102,60224,60225],{"class":112},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[102,60227,60228],{"class":104,"line":33535},[102,60229,60230],{"class":112},"    const slider = document.querySelector('.slider')\n",[102,60232,60233],{"class":104,"line":33552},[102,60234,60235],{"class":112},"    \u002F\u002F 注册事件\n",[102,60237,60238],{"class":104,"line":33558},[102,60239,60240],{"class":112},"    slider.addEventListener('mouseenter', function () {\n",[102,60242,60243],{"class":104,"line":33564},[102,60244,60245],{"class":112},"      \u002F\u002F 停止定时器\n",[102,60247,60248],{"class":104,"line":33570},[102,60249,60250],{"class":112},"      clearInterval(timerId)\n",[102,60252,60253],{"class":104,"line":33576},[102,60254,33452],{"class":112},[102,60256,60257],{"class":104,"line":33582},[102,60258,2389],{"emptyLinePlaceholder":30},[102,60260,60261],{"class":104,"line":33609},[102,60262,60263],{"class":112},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[102,60265,60266],{"class":104,"line":33633},[102,60267,60235],{"class":112},[102,60269,60270],{"class":104,"line":33639},[102,60271,60272],{"class":112},"    slider.addEventListener('mouseleave', function () {\n",[102,60274,60275],{"class":104,"line":33645},[102,60276,60245],{"class":112},[102,60278,60279],{"class":104,"line":33651},[102,60280,60281],{"class":112},"      if (timerId) clearInterval(timerId)\n",[102,60283,60284],{"class":104,"line":33662},[102,60285,60286],{"class":112},"      \u002F\u002F 开启定时器\n",[102,60288,60289],{"class":104,"line":33673},[102,60290,60291],{"class":112},"      timerId = setInterval(function () {\n",[102,60293,60294],{"class":104,"line":33679},[102,60295,60296],{"class":112},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[102,60298,60299],{"class":104,"line":33696},[102,60300,60301],{"class":112},"        next.click()\n",[102,60303,60304],{"class":104,"line":33719},[102,60305,60306],{"class":112},"      }, 1000)\n",[102,60308,60309],{"class":104,"line":33742},[102,60310,33452],{"class":112},[102,60312,60313,60315,60317],{"class":104,"line":33748},[102,60314,52408],{"class":112},[102,60316,51804],{"class":51291},[102,60318,51298],{"class":112},[102,60320,60321,60323,60325],{"class":104,"line":33753},[102,60322,51776],{"class":112},[102,60324,51791],{"class":51291},[102,60326,51298],{"class":112},[102,60328,60329],{"class":104,"line":33762},[102,60330,2389],{"emptyLinePlaceholder":30},[102,60332,60333,60335,60337],{"class":104,"line":33772},[102,60334,51776],{"class":112},[102,60336,50626],{"class":51291},[102,60338,51298],{"class":112},[21988,60340,60342],{"id":60341},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60344,60345],{},"小米搜索框案例：",[93,60347,60349],{"className":50624,"code":60348,"language":50626,"meta":23,"style":23},"\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",[99,60350,60351,60361,60375,60379,60387,60401,60421,60441,60453,60461,60467,60477,60487,60499,60503,60507,60514,60518,60529,60533,60537,60544,60555,60568,60582,60586,60590,60599,60611,60623,60637,60650,60663,60681,60692,60696,60700,60709,60726,60730,60734,60741,60751,60761,60772,60785,60797,60813,60824,60836,60840,60844,60852,60863,60880,60892,60904,60915,60919,60923,60934,60945,60949,60957,60961,60969,60973,60981,60996,61019,61034,61065,61092,61119,61146,61173,61200,61227,61236,61244,61252,61257,61277,61297,61302,61307,61325,61330,61340,61345,61359,61364,61369,61386,61395,61407,61411,61419,61427,61431],{"__ignoreMap":23},[102,60352,60353,60355,60357,60359],{"class":104,"line":105},[102,60354,51288],{"class":112},[102,60356,51292],{"class":51291},[102,60358,51295],{"class":1952},[102,60360,51298],{"class":112},[102,60362,60363,60365,60367,60369,60371,60373],{"class":104,"line":24},[102,60364,1023],{"class":112},[102,60366,50626],{"class":51291},[102,60368,51307],{"class":1952},[102,60370,158],{"class":112},[102,60372,51312],{"class":217},[102,60374,51298],{"class":112},[102,60376,60377],{"class":104,"line":1168},[102,60378,2389],{"emptyLinePlaceholder":30},[102,60380,60381,60383,60385],{"class":104,"line":1183},[102,60382,1023],{"class":112},[102,60384,51325],{"class":51291},[102,60386,51298],{"class":112},[102,60388,60389,60391,60393,60395,60397,60399],{"class":104,"line":1189},[102,60390,51332],{"class":112},[102,60392,51335],{"class":51291},[102,60394,51338],{"class":1952},[102,60396,158],{"class":112},[102,60398,51343],{"class":217},[102,60400,51298],{"class":112},[102,60402,60403,60405,60407,60409,60411,60413,60415,60417,60419],{"class":104,"line":1203},[102,60404,51332],{"class":112},[102,60406,51335],{"class":51291},[102,60408,51354],{"class":1952},[102,60410,158],{"class":112},[102,60412,51359],{"class":217},[102,60414,51362],{"class":1952},[102,60416,158],{"class":112},[102,60418,51367],{"class":217},[102,60420,51298],{"class":112},[102,60422,60423,60425,60427,60429,60431,60433,60435,60437,60439],{"class":104,"line":1209},[102,60424,51332],{"class":112},[102,60426,51335],{"class":51291},[102,60428,14910],{"class":1952},[102,60430,158],{"class":112},[102,60432,51382],{"class":217},[102,60434,51362],{"class":1952},[102,60436,158],{"class":112},[102,60438,51389],{"class":217},[102,60440,51298],{"class":112},[102,60442,60443,60445,60447,60449,60451],{"class":104,"line":1300},[102,60444,51332],{"class":112},[102,60446,51398],{"class":51291},[102,60448,51401],{"class":112},[102,60450,51398],{"class":51291},[102,60452,51298],{"class":112},[102,60454,60455,60457,60459],{"class":104,"line":1306},[102,60456,51332],{"class":112},[102,60458,5116],{"class":51291},[102,60460,51298],{"class":112},[102,60462,60463,60465],{"class":104,"line":1318},[102,60464,51418],{"class":51291},[102,60466,15562],{"class":112},[102,60468,60469,60471,60473,60475],{"class":104,"line":1601},[102,60470,51425],{"class":161},[102,60472,51428],{"class":112},[102,60474,304],{"class":161},[102,60476,1279],{"class":112},[102,60478,60479,60481,60483,60485],{"class":104,"line":1606},[102,60480,51437],{"class":161},[102,60482,51428],{"class":112},[102,60484,304],{"class":161},[102,60486,1279],{"class":112},[102,60488,60489,60492,60494,60497],{"class":104,"line":1612},[102,60490,60491],{"class":161},"            box-sizing",[102,60493,51428],{"class":112},[102,60495,60496],{"class":161},"border-box",[102,60498,1279],{"class":112},[102,60500,60501],{"class":104,"line":1617},[102,60502,2518],{"class":112},[102,60504,60505],{"class":104,"line":1631},[102,60506,2389],{"emptyLinePlaceholder":30},[102,60508,60509,60512],{"class":104,"line":1636},[102,60510,60511],{"class":51291},"        ul",[102,60513,15562],{"class":112},[102,60515,60516],{"class":104,"line":1642},[102,60517,2389],{"emptyLinePlaceholder":30},[102,60519,60520,60523,60525,60527],{"class":104,"line":1663},[102,60521,60522],{"class":161},"            list-style",[102,60524,51428],{"class":112},[102,60526,54728],{"class":161},[102,60528,1279],{"class":112},[102,60530,60531],{"class":104,"line":1668},[102,60532,2518],{"class":112},[102,60534,60535],{"class":104,"line":1682},[102,60536,2389],{"emptyLinePlaceholder":30},[102,60538,60539,60542],{"class":104,"line":1687},[102,60540,60541],{"class":1952},"        .mi",[102,60543,15562],{"class":112},[102,60545,60546,60549,60551,60553],{"class":104,"line":1716},[102,60547,60548],{"class":161},"            position",[102,60550,51428],{"class":112},[102,60552,54755],{"class":161},[102,60554,1279],{"class":112},[102,60556,60557,60559,60561,60564,60566],{"class":104,"line":1721},[102,60558,51475],{"class":161},[102,60560,51428],{"class":112},[102,60562,60563],{"class":161},"223",[102,60565,51483],{"class":108},[102,60567,1279],{"class":112},[102,60569,60570,60572,60574,60576,60578,60580],{"class":104,"line":1738},[102,60571,51425],{"class":161},[102,60573,51428],{"class":112},[102,60575,424],{"class":161},[102,60577,51483],{"class":108},[102,60579,51547],{"class":161},[102,60581,1279],{"class":112},[102,60583,60584],{"class":104,"line":1743},[102,60585,2518],{"class":112},[102,60587,60588],{"class":104,"line":1748},[102,60589,2389],{"emptyLinePlaceholder":30},[102,60591,60592,60594,60597],{"class":104,"line":1753},[102,60593,60541],{"class":1952},[102,60595,60596],{"class":51291}," input",[102,60598,15562],{"class":112},[102,60600,60601,60603,60605,60607,60609],{"class":104,"line":1767},[102,60602,51475],{"class":161},[102,60604,51428],{"class":112},[102,60606,60563],{"class":161},[102,60608,51483],{"class":108},[102,60610,1279],{"class":112},[102,60612,60613,60615,60617,60619,60621],{"class":104,"line":1772},[102,60614,51490],{"class":161},[102,60616,51428],{"class":112},[102,60618,720],{"class":161},[102,60620,51483],{"class":108},[102,60622,1279],{"class":112},[102,60624,60625,60627,60629,60631,60633,60635],{"class":104,"line":2566},[102,60626,51437],{"class":161},[102,60628,51428],{"class":112},[102,60630,304],{"class":161},[102,60632,2027],{"class":161},[102,60634,51483],{"class":108},[102,60636,1279],{"class":112},[102,60638,60639,60642,60644,60646,60648],{"class":104,"line":2580},[102,60640,60641],{"class":161},"            font-size",[102,60643,51428],{"class":112},[102,60645,662],{"class":161},[102,60647,51483],{"class":108},[102,60649,1279],{"class":112},[102,60651,60652,60655,60657,60659,60661],{"class":104,"line":2588},[102,60653,60654],{"class":161},"            line-height",[102,60656,51428],{"class":112},[102,60658,720],{"class":161},[102,60660,51483],{"class":108},[102,60662,1279],{"class":112},[102,60664,60665,60668,60670,60672,60674,60676,60679],{"class":104,"line":2593},[102,60666,60667],{"class":161},"            border",[102,60669,51428],{"class":112},[102,60671,330],{"class":161},[102,60673,51483],{"class":108},[102,60675,51512],{"class":161},[102,60677,60678],{"class":161}," #e0e0e0",[102,60680,1279],{"class":112},[102,60682,60683,60686,60688,60690],{"class":104,"line":2599},[102,60684,60685],{"class":161},"            outline",[102,60687,51428],{"class":112},[102,60689,54728],{"class":161},[102,60691,1279],{"class":112},[102,60693,60694],{"class":104,"line":2605},[102,60695,2518],{"class":112},[102,60697,60698],{"class":104,"line":2610},[102,60699,2389],{"emptyLinePlaceholder":30},[102,60701,60702,60704,60707],{"class":104,"line":7938},[102,60703,60541],{"class":1952},[102,60705,60706],{"class":1952}," .search",[102,60708,15562],{"class":112},[102,60710,60711,60713,60715,60717,60719,60721,60724],{"class":104,"line":7962},[102,60712,60667],{"class":161},[102,60714,51428],{"class":112},[102,60716,330],{"class":161},[102,60718,51483],{"class":108},[102,60720,51512],{"class":161},[102,60722,60723],{"class":161}," #ff6700",[102,60725,1279],{"class":112},[102,60727,60728],{"class":104,"line":7967},[102,60729,2518],{"class":112},[102,60731,60732],{"class":104,"line":7973},[102,60733,2389],{"emptyLinePlaceholder":30},[102,60735,60736,60739],{"class":104,"line":8000},[102,60737,60738],{"class":1952},"        .result-list",[102,60740,15562],{"class":112},[102,60742,60743,60745,60747,60749],{"class":104,"line":8005},[102,60744,51463],{"class":161},[102,60746,51428],{"class":112},[102,60748,54728],{"class":161},[102,60750,1279],{"class":112},[102,60752,60753,60755,60757,60759],{"class":104,"line":8011},[102,60754,60548],{"class":161},[102,60756,51428],{"class":112},[102,60758,54822],{"class":161},[102,60760,1279],{"class":112},[102,60762,60763,60766,60768,60770],{"class":104,"line":8023},[102,60764,60765],{"class":161},"            left",[102,60767,51428],{"class":112},[102,60769,304],{"class":161},[102,60771,1279],{"class":112},[102,60773,60774,60777,60779,60781,60783],{"class":104,"line":8035},[102,60775,60776],{"class":161},"            top",[102,60778,51428],{"class":112},[102,60780,720],{"class":161},[102,60782,51483],{"class":108},[102,60784,1279],{"class":112},[102,60786,60787,60789,60791,60793,60795],{"class":104,"line":8047},[102,60788,51475],{"class":161},[102,60790,51428],{"class":112},[102,60792,60563],{"class":161},[102,60794,51483],{"class":108},[102,60796,1279],{"class":112},[102,60798,60799,60801,60803,60805,60807,60809,60811],{"class":104,"line":9706},[102,60800,60667],{"class":161},[102,60802,51428],{"class":112},[102,60804,330],{"class":161},[102,60806,51483],{"class":108},[102,60808,51512],{"class":161},[102,60810,60723],{"class":161},[102,60812,1279],{"class":112},[102,60814,60815,60818,60820,60822],{"class":104,"line":9731},[102,60816,60817],{"class":161},"            border-top",[102,60819,51428],{"class":112},[102,60821,304],{"class":161},[102,60823,1279],{"class":112},[102,60825,60826,60829,60831,60834],{"class":104,"line":9754},[102,60827,60828],{"class":161},"            background",[102,60830,51428],{"class":112},[102,60832,60833],{"class":161},"#fff",[102,60835,1279],{"class":112},[102,60837,60838],{"class":104,"line":9778},[102,60839,2518],{"class":112},[102,60841,60842],{"class":104,"line":9783},[102,60843,2389],{"emptyLinePlaceholder":30},[102,60845,60846,60848,60850],{"class":104,"line":9788},[102,60847,60738],{"class":1952},[102,60849,1387],{"class":51291},[102,60851,15562],{"class":112},[102,60853,60854,60856,60858,60861],{"class":104,"line":9793},[102,60855,51463],{"class":161},[102,60857,51428],{"class":112},[102,60859,60860],{"class":161},"block",[102,60862,1279],{"class":112},[102,60864,60865,60867,60869,60871,60873,60876,60878],{"class":104,"line":9802},[102,60866,51437],{"class":161},[102,60868,51428],{"class":112},[102,60870,457],{"class":161},[102,60872,51483],{"class":108},[102,60874,60875],{"class":161}," 15",[102,60877,51483],{"class":108},[102,60879,1279],{"class":112},[102,60881,60882,60884,60886,60888,60890],{"class":104,"line":9807},[102,60883,60641],{"class":161},[102,60885,51428],{"class":112},[102,60887,611],{"class":161},[102,60889,51483],{"class":108},[102,60891,1279],{"class":112},[102,60893,60894,60897,60899,60902],{"class":104,"line":9813},[102,60895,60896],{"class":161},"            color",[102,60898,51428],{"class":112},[102,60900,60901],{"class":161},"#424242",[102,60903,1279],{"class":112},[102,60905,60906,60909,60911,60913],{"class":104,"line":9834},[102,60907,60908],{"class":161},"            text-decoration",[102,60910,51428],{"class":112},[102,60912,54728],{"class":161},[102,60914,1279],{"class":112},[102,60916,60917],{"class":104,"line":9840},[102,60918,2518],{"class":112},[102,60920,60921],{"class":104,"line":9854},[102,60922,2389],{"emptyLinePlaceholder":30},[102,60924,60925,60927,60929,60932],{"class":104,"line":9860},[102,60926,60738],{"class":1952},[102,60928,1387],{"class":51291},[102,60930,60931],{"class":1952},":hover",[102,60933,15562],{"class":112},[102,60935,60936,60938,60940,60943],{"class":104,"line":9887},[102,60937,51631],{"class":161},[102,60939,51428],{"class":112},[102,60941,60942],{"class":161},"#eee",[102,60944,1279],{"class":112},[102,60946,60947],{"class":104,"line":9896},[102,60948,2518],{"class":112},[102,60950,60951,60953,60955],{"class":104,"line":9902},[102,60952,51767],{"class":112},[102,60954,5116],{"class":51291},[102,60956,51298],{"class":112},[102,60958,60959],{"class":104,"line":9910},[102,60960,2389],{"emptyLinePlaceholder":30},[102,60962,60963,60965,60967],{"class":104,"line":9915},[102,60964,51776],{"class":112},[102,60966,51325],{"class":51291},[102,60968,51298],{"class":112},[102,60970,60971],{"class":104,"line":16594},[102,60972,2389],{"emptyLinePlaceholder":30},[102,60974,60975,60977,60979],{"class":104,"line":16600},[102,60976,1023],{"class":112},[102,60978,51791],{"class":51291},[102,60980,51298],{"class":112},[102,60982,60983,60985,60987,60989,60991,60994],{"class":104,"line":16623},[102,60984,51332],{"class":112},[102,60986,51602],{"class":51291},[102,60988,53477],{"class":1952},[102,60990,158],{"class":112},[102,60992,60993],{"class":217},"\"mi\"",[102,60995,51298],{"class":112},[102,60997,60998,61000,61002,61004,61006,61009,61012,61014,61017],{"class":104,"line":16629},[102,60999,55293],{"class":112},[102,61001,53812],{"class":51291},[102,61003,53815],{"class":1952},[102,61005,158],{"class":112},[102,61007,61008],{"class":217},"\"search\"",[102,61010,61011],{"class":1952}," placeholder",[102,61013,158],{"class":112},[102,61015,61016],{"class":217},"\"小米笔记本\"",[102,61018,51298],{"class":112},[102,61020,61021,61023,61025,61027,61029,61032],{"class":104,"line":16652},[102,61022,55293],{"class":112},[102,61024,1120],{"class":51291},[102,61026,53477],{"class":1952},[102,61028,158],{"class":112},[102,61030,61031],{"class":217},"\"result-list\"",[102,61033,51298],{"class":112},[102,61035,61036,61039,61041,61044,61046,61049,61051,61054,61057,61059,61061,61063],{"class":104,"line":16666},[102,61037,61038],{"class":112},"            \u003C",[102,61040,59],{"class":51291},[102,61042,61043],{"class":112},">\u003C",[102,61045,351],{"class":51291},[102,61047,61048],{"class":1952}," href",[102,61050,158],{"class":112},[102,61052,61053],{"class":217},"\"#\"",[102,61055,61056],{"class":112},">全部商品\u003C\u002F",[102,61058,351],{"class":51291},[102,61060,55305],{"class":112},[102,61062,59],{"class":51291},[102,61064,51298],{"class":112},[102,61066,61067,61069,61071,61073,61075,61077,61079,61081,61084,61086,61088,61090],{"class":104,"line":16686},[102,61068,61038],{"class":112},[102,61070,59],{"class":51291},[102,61072,61043],{"class":112},[102,61074,351],{"class":51291},[102,61076,61048],{"class":1952},[102,61078,158],{"class":112},[102,61080,61053],{"class":217},[102,61082,61083],{"class":112},">小米11\u003C\u002F",[102,61085,351],{"class":51291},[102,61087,55305],{"class":112},[102,61089,59],{"class":51291},[102,61091,51298],{"class":112},[102,61093,61094,61096,61098,61100,61102,61104,61106,61108,61111,61113,61115,61117],{"class":104,"line":16692},[102,61095,61038],{"class":112},[102,61097,59],{"class":51291},[102,61099,61043],{"class":112},[102,61101,351],{"class":51291},[102,61103,61048],{"class":1952},[102,61105,158],{"class":112},[102,61107,61053],{"class":217},[102,61109,61110],{"class":112},">小米10S\u003C\u002F",[102,61112,351],{"class":51291},[102,61114,55305],{"class":112},[102,61116,59],{"class":51291},[102,61118,51298],{"class":112},[102,61120,61121,61123,61125,61127,61129,61131,61133,61135,61138,61140,61142,61144],{"class":104,"line":16703},[102,61122,61038],{"class":112},[102,61124,59],{"class":51291},[102,61126,61043],{"class":112},[102,61128,351],{"class":51291},[102,61130,61048],{"class":1952},[102,61132,158],{"class":112},[102,61134,61053],{"class":217},[102,61136,61137],{"class":112},">小米笔记本\u003C\u002F",[102,61139,351],{"class":51291},[102,61141,55305],{"class":112},[102,61143,59],{"class":51291},[102,61145,51298],{"class":112},[102,61147,61148,61150,61152,61154,61156,61158,61160,61162,61165,61167,61169,61171],{"class":104,"line":16726},[102,61149,61038],{"class":112},[102,61151,59],{"class":51291},[102,61153,61043],{"class":112},[102,61155,351],{"class":51291},[102,61157,61048],{"class":1952},[102,61159,158],{"class":112},[102,61161,61053],{"class":217},[102,61163,61164],{"class":112},">小米手机\u003C\u002F",[102,61166,351],{"class":51291},[102,61168,55305],{"class":112},[102,61170,59],{"class":51291},[102,61172,51298],{"class":112},[102,61174,61175,61177,61179,61181,61183,61185,61187,61189,61192,61194,61196,61198],{"class":104,"line":16748},[102,61176,61038],{"class":112},[102,61178,59],{"class":51291},[102,61180,61043],{"class":112},[102,61182,351],{"class":51291},[102,61184,61048],{"class":1952},[102,61186,158],{"class":112},[102,61188,61053],{"class":217},[102,61190,61191],{"class":112},">黑鲨4\u003C\u002F",[102,61193,351],{"class":51291},[102,61195,55305],{"class":112},[102,61197,59],{"class":51291},[102,61199,51298],{"class":112},[102,61201,61202,61204,61206,61208,61210,61212,61214,61216,61219,61221,61223,61225],{"class":104,"line":16753},[102,61203,61038],{"class":112},[102,61205,59],{"class":51291},[102,61207,61043],{"class":112},[102,61209,351],{"class":51291},[102,61211,61048],{"class":1952},[102,61213,158],{"class":112},[102,61215,61053],{"class":217},[102,61217,61218],{"class":112},">空调\u003C\u002F",[102,61220,351],{"class":51291},[102,61222,55305],{"class":112},[102,61224,59],{"class":51291},[102,61226,51298],{"class":112},[102,61228,61229,61232,61234],{"class":104,"line":16759},[102,61230,61231],{"class":112},"        \u003C\u002F",[102,61233,1120],{"class":51291},[102,61235,51298],{"class":112},[102,61237,61238,61240,61242],{"class":104,"line":16773},[102,61239,51767],{"class":112},[102,61241,51602],{"class":51291},[102,61243,51298],{"class":112},[102,61245,61246,61248,61250],{"class":104,"line":16786},[102,61247,51332],{"class":112},[102,61249,51804],{"class":51291},[102,61251,51298],{"class":112},[102,61253,61254],{"class":104,"line":16791},[102,61255,61256],{"class":171},"        \u002F\u002F 1. 获取元素\n",[102,61258,61259,61262,61264,61266,61268,61270,61272,61275],{"class":104,"line":16805},[102,61260,61261],{"class":108},"        const",[102,61263,60596],{"class":161},[102,61265,13554],{"class":108},[102,61267,54387],{"class":112},[102,61269,54390],{"class":1952},[102,61271,113],{"class":112},[102,61273,61274],{"class":217},"'[type=search]'",[102,61276,119],{"class":112},[102,61278,61279,61281,61284,61286,61288,61290,61292,61295],{"class":104,"line":16810},[102,61280,61261],{"class":108},[102,61282,61283],{"class":161}," ul",[102,61285,13554],{"class":108},[102,61287,54387],{"class":112},[102,61289,54390],{"class":1952},[102,61291,113],{"class":112},[102,61293,61294],{"class":217},"'.result-list'",[102,61296,119],{"class":112},[102,61298,61299],{"class":104,"line":16816},[102,61300,61301],{"class":171},"        \u002F\u002F console.log(input)\n",[102,61303,61304],{"class":104,"line":16821},[102,61305,61306],{"class":171},"        \u002F\u002F 2. 监听事件 获得焦点\n",[102,61308,61309,61312,61314,61316,61319,61321,61323],{"class":104,"line":16835},[102,61310,61311],{"class":112},"        input.",[102,61313,57804],{"class":1952},[102,61315,113],{"class":112},[102,61317,61318],{"class":217},"'focus'",[102,61320,12425],{"class":112},[102,61322,54440],{"class":108},[102,61324,54443],{"class":112},[102,61326,61327],{"class":104,"line":16840},[102,61328,61329],{"class":171},"            \u002F\u002F ul显示\n",[102,61331,61332,61335,61337],{"class":104,"line":16845},[102,61333,61334],{"class":112},"            ul.style.display ",[102,61336,158],{"class":108},[102,61338,61339],{"class":217}," 'block'\n",[102,61341,61342],{"class":104,"line":16859},[102,61343,61344],{"class":171},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[102,61346,61347,61350,61352,61354,61357],{"class":104,"line":16871},[102,61348,61349],{"class":112},"            input.classList.",[102,61351,5324],{"class":1952},[102,61353,113],{"class":112},[102,61355,61356],{"class":217},"'search'",[102,61358,119],{"class":112},[102,61360,61361],{"class":104,"line":16876},[102,61362,61363],{"class":112},"        })\n",[102,61365,61366],{"class":104,"line":16889},[102,61367,61368],{"class":171},"        \u002F\u002F 3. 监听事件 失去焦点\n",[102,61370,61371,61373,61375,61377,61380,61382,61384],{"class":104,"line":16894},[102,61372,61311],{"class":112},[102,61374,57804],{"class":1952},[102,61376,113],{"class":112},[102,61378,61379],{"class":217},"'blur'",[102,61381,12425],{"class":112},[102,61383,54440],{"class":108},[102,61385,54443],{"class":112},[102,61387,61388,61390,61392],{"class":104,"line":16899},[102,61389,61334],{"class":112},[102,61391,158],{"class":108},[102,61393,61394],{"class":217}," 'none'\n",[102,61396,61397,61399,61401,61403,61405],{"class":104,"line":16904},[102,61398,61349],{"class":112},[102,61400,56997],{"class":1952},[102,61402,113],{"class":112},[102,61404,61356],{"class":217},[102,61406,119],{"class":112},[102,61408,61409],{"class":104,"line":16917},[102,61410,61363],{"class":112},[102,61412,61413,61415,61417],{"class":104,"line":16922},[102,61414,51767],{"class":112},[102,61416,51804],{"class":51291},[102,61418,51298],{"class":112},[102,61420,61421,61423,61425],{"class":104,"line":32624},[102,61422,51776],{"class":112},[102,61424,51791],{"class":51291},[102,61426,51298],{"class":112},[102,61428,61429],{"class":104,"line":32630},[102,61430,2389],{"emptyLinePlaceholder":30},[102,61432,61433,61435,61437],{"class":104,"line":32636},[102,61434,51776],{"class":112},[102,61436,50626],{"class":51291},[102,61438,51298],{"class":112},[21988,61440,61442],{"id":61441},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61444,61445],{},"评论字数统计案例",[19,61447,61448],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61450,61451],{},"牢记focus伪类选择器",[51335,61453],{"charSet":61454},"UTF-8",[51335,61456],{"name":61457,"content":61458},"viewport","width=device-width, initial-scale=1.0",[51398,61460,61461],{},"Document",[5116,61463,61464],{},"\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",[53812,61466],{"type":5177},[1120,61468,61469,61472],{},[59,61470,61471],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[59,61473,61474],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[93,61476,61478],{"className":50624,"code":61477,"language":50626,"meta":23,"style":23},"\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",[99,61479,61480,61490,61504,61508,61516,61530,61550,61570,61583,61591,61598,61611,61625,61635,61645,61649,61653,61660,61672,61684,61696,61708,61737,61750,61754,61758,61767,61778,61790,61801,61812,61824,61835,61847,61863,61875,61879,61883,61894,61905,61915,61927,61931,61935,61943,61954,61964,61975,61987,62000,62012,62024,62028,62032,62041,62053,62064,62077,62088,62102,62106,62110,62117,62129,62141,62151,62155,62159,62168,62180,62190,62194,62198,62209,62219,62238,62251,62255,62259,62269,62279,62283,62287,62298,62309,62321,62333,62337,62341,62352,62363,62377,62381,62385,62396,62406,62418,62422,62430,62438,62442,62450,62465,62484,62524,62537,62545,62559,62579,62587,62602,62625,62643,62658,62678,62698,62718,62726,62734,62742,62750,62770,62790,62795,62812,62821,62825,62830,62846,62854,62858,62863,62880,62885,62910,62914,62918,62923,62928,62936,62944,62948],{"__ignoreMap":23},[102,61481,61482,61484,61486,61488],{"class":104,"line":105},[102,61483,51288],{"class":112},[102,61485,51292],{"class":51291},[102,61487,51295],{"class":1952},[102,61489,51298],{"class":112},[102,61491,61492,61494,61496,61498,61500,61502],{"class":104,"line":24},[102,61493,1023],{"class":112},[102,61495,50626],{"class":51291},[102,61497,51307],{"class":1952},[102,61499,158],{"class":112},[102,61501,51312],{"class":217},[102,61503,51298],{"class":112},[102,61505,61506],{"class":104,"line":1168},[102,61507,2389],{"emptyLinePlaceholder":30},[102,61509,61510,61512,61514],{"class":104,"line":1183},[102,61511,1023],{"class":112},[102,61513,51325],{"class":51291},[102,61515,51298],{"class":112},[102,61517,61518,61520,61522,61524,61526,61528],{"class":104,"line":1189},[102,61519,52135],{"class":112},[102,61521,51335],{"class":51291},[102,61523,51338],{"class":1952},[102,61525,158],{"class":112},[102,61527,51343],{"class":217},[102,61529,51298],{"class":112},[102,61531,61532,61534,61536,61538,61540,61542,61544,61546,61548],{"class":104,"line":1203},[102,61533,52135],{"class":112},[102,61535,51335],{"class":51291},[102,61537,51354],{"class":1952},[102,61539,158],{"class":112},[102,61541,51359],{"class":217},[102,61543,51362],{"class":1952},[102,61545,158],{"class":112},[102,61547,51367],{"class":217},[102,61549,51298],{"class":112},[102,61551,61552,61554,61556,61558,61560,61562,61564,61566,61568],{"class":104,"line":1209},[102,61553,52135],{"class":112},[102,61555,51335],{"class":51291},[102,61557,14910],{"class":1952},[102,61559,158],{"class":112},[102,61561,51382],{"class":217},[102,61563,51362],{"class":1952},[102,61565,158],{"class":112},[102,61567,51389],{"class":217},[102,61569,51298],{"class":112},[102,61571,61572,61574,61576,61579,61581],{"class":104,"line":1300},[102,61573,52135],{"class":112},[102,61575,51398],{"class":51291},[102,61577,61578],{"class":112},">评论回车发布\u003C\u002F",[102,61580,51398],{"class":51291},[102,61582,51298],{"class":112},[102,61584,61585,61587,61589],{"class":104,"line":1306},[102,61586,52135],{"class":112},[102,61588,5116],{"class":51291},[102,61590,51298],{"class":112},[102,61592,61593,61596],{"class":104,"line":1318},[102,61594,61595],{"class":1952},"    .wrapper",[102,61597,15562],{"class":112},[102,61599,61600,61603,61605,61607,61609],{"class":104,"line":1601},[102,61601,61602],{"class":161},"      min-width",[102,61604,51428],{"class":112},[102,61606,3976],{"class":161},[102,61608,51483],{"class":108},[102,61610,1279],{"class":112},[102,61612,61613,61616,61618,61621,61623],{"class":104,"line":1606},[102,61614,61615],{"class":161},"      max-width",[102,61617,51428],{"class":112},[102,61619,61620],{"class":161},"800",[102,61622,51483],{"class":108},[102,61624,1279],{"class":112},[102,61626,61627,61629,61631,61633],{"class":104,"line":1612},[102,61628,55000],{"class":161},[102,61630,51428],{"class":112},[102,61632,51468],{"class":161},[102,61634,1279],{"class":112},[102,61636,61637,61639,61641,61643],{"class":104,"line":1617},[102,61638,55011],{"class":161},[102,61640,51428],{"class":112},[102,61642,51571],{"class":161},[102,61644,1279],{"class":112},[102,61646,61647],{"class":104,"line":1631},[102,61648,2176],{"class":112},[102,61650,61651],{"class":104,"line":1636},[102,61652,2389],{"emptyLinePlaceholder":30},[102,61654,61655,61658],{"class":104,"line":1642},[102,61656,61657],{"class":1952},"    .avatar",[102,61659,15562],{"class":112},[102,61661,61662,61664,61666,61668,61670],{"class":104,"line":1663},[102,61663,54762],{"class":161},[102,61665,51428],{"class":112},[102,61667,720],{"class":161},[102,61669,51483],{"class":108},[102,61671,1279],{"class":112},[102,61673,61674,61676,61678,61680,61682],{"class":104,"line":1668},[102,61675,54776],{"class":161},[102,61677,51428],{"class":112},[102,61679,720],{"class":161},[102,61681,51483],{"class":108},[102,61683,1279],{"class":112},[102,61685,61686,61688,61690,61692,61694],{"class":104,"line":1682},[102,61687,55125],{"class":161},[102,61689,51428],{"class":112},[102,61691,769],{"class":161},[102,61693,441],{"class":108},[102,61695,1279],{"class":112},[102,61697,61698,61701,61703,61706],{"class":104,"line":1687},[102,61699,61700],{"class":161},"      overflow",[102,61702,51428],{"class":112},[102,61704,61705],{"class":161},"hidden",[102,61707,1279],{"class":112},[102,61709,61710,61713,61715,61718,61720,61723,61725,61728,61730,61732,61735],{"class":104,"line":1716},[102,61711,61712],{"class":161},"      background",[102,61714,51428],{"class":112},[102,61716,61717],{"class":161},"url",[102,61719,113],{"class":112},[102,61721,61722],{"class":5206},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[102,61724,13704],{"class":112},[102,61726,61727],{"class":161},"no-repeat",[102,61729,17134],{"class":161},[102,61731,24969],{"class":112},[102,61733,61734],{"class":161},"cover",[102,61736,1279],{"class":112},[102,61738,61739,61742,61744,61746,61748],{"class":104,"line":1721},[102,61740,61741],{"class":161},"      margin-right",[102,61743,51428],{"class":112},[102,61745,813],{"class":161},[102,61747,51483],{"class":108},[102,61749,1279],{"class":112},[102,61751,61752],{"class":104,"line":1738},[102,61753,2176],{"class":112},[102,61755,61756],{"class":104,"line":1743},[102,61757,2389],{"emptyLinePlaceholder":30},[102,61759,61760,61762,61765],{"class":104,"line":1748},[102,61761,61595],{"class":1952},[102,61763,61764],{"class":51291}," textarea",[102,61766,15562],{"class":112},[102,61768,61769,61772,61774,61776],{"class":104,"line":1753},[102,61770,61771],{"class":161},"      outline",[102,61773,51428],{"class":112},[102,61775,54728],{"class":161},[102,61777,1279],{"class":112},[102,61779,61780,61783,61785,61788],{"class":104,"line":1767},[102,61781,61782],{"class":161},"      border-color",[102,61784,51428],{"class":112},[102,61786,61787],{"class":161},"transparent",[102,61789,1279],{"class":112},[102,61791,61792,61795,61797,61799],{"class":104,"line":1772},[102,61793,61794],{"class":161},"      resize",[102,61796,51428],{"class":112},[102,61798,54728],{"class":161},[102,61800,1279],{"class":112},[102,61802,61803,61805,61807,61810],{"class":104,"line":2566},[102,61804,61712],{"class":161},[102,61806,51428],{"class":112},[102,61808,61809],{"class":161},"#f5f5f5",[102,61811,1279],{"class":112},[102,61813,61814,61816,61818,61820,61822],{"class":104,"line":2580},[102,61815,55125],{"class":161},[102,61817,51428],{"class":112},[102,61819,406],{"class":161},[102,61821,51483],{"class":108},[102,61823,1279],{"class":112},[102,61825,61826,61829,61831,61833],{"class":104,"line":2588},[102,61827,61828],{"class":161},"      flex",[102,61830,51428],{"class":112},[102,61832,330],{"class":161},[102,61834,1279],{"class":112},[102,61836,61837,61839,61841,61843,61845],{"class":104,"line":2593},[102,61838,54686],{"class":161},[102,61840,51428],{"class":112},[102,61842,559],{"class":161},[102,61844,51483],{"class":108},[102,61846,1279],{"class":112},[102,61848,61849,61852,61854,61856,61859,61861],{"class":104,"line":2599},[102,61850,61851],{"class":161},"      transition",[102,61853,51428],{"class":112},[102,61855,28112],{"class":161},[102,61857,61858],{"class":161}," 0.5",[102,61860,808],{"class":108},[102,61862,1279],{"class":112},[102,61864,61865,61867,61869,61871,61873],{"class":104,"line":2605},[102,61866,54776],{"class":161},[102,61868,51428],{"class":112},[102,61870,1064],{"class":161},[102,61872,51483],{"class":108},[102,61874,1279],{"class":112},[102,61876,61877],{"class":104,"line":2610},[102,61878,2176],{"class":112},[102,61880,61881],{"class":104,"line":7938},[102,61882,2389],{"emptyLinePlaceholder":30},[102,61884,61885,61887,61889,61892],{"class":104,"line":7962},[102,61886,61595],{"class":1952},[102,61888,61764],{"class":51291},[102,61890,61891],{"class":1952},":focus",[102,61893,15562],{"class":112},[102,61895,61896,61898,61900,61903],{"class":104,"line":7967},[102,61897,61782],{"class":161},[102,61899,51428],{"class":112},[102,61901,61902],{"class":161},"#e4e4e4",[102,61904,1279],{"class":112},[102,61906,61907,61909,61911,61913],{"class":104,"line":7973},[102,61908,61712],{"class":161},[102,61910,51428],{"class":112},[102,61912,60833],{"class":161},[102,61914,1279],{"class":112},[102,61916,61917,61919,61921,61923,61925],{"class":104,"line":8000},[102,61918,54776],{"class":161},[102,61920,51428],{"class":112},[102,61922,769],{"class":161},[102,61924,51483],{"class":108},[102,61926,1279],{"class":112},[102,61928,61929],{"class":104,"line":8005},[102,61930,2176],{"class":112},[102,61932,61933],{"class":104,"line":8011},[102,61934,2389],{"emptyLinePlaceholder":30},[102,61936,61937,61939,61941],{"class":104,"line":8023},[102,61938,61595],{"class":1952},[102,61940,57458],{"class":51291},[102,61942,15562],{"class":112},[102,61944,61945,61947,61949,61952],{"class":104,"line":8035},[102,61946,61712],{"class":161},[102,61948,51428],{"class":112},[102,61950,61951],{"class":161},"#00aeec",[102,61953,1279],{"class":112},[102,61955,61956,61958,61960,61962],{"class":104,"line":8047},[102,61957,57407],{"class":161},[102,61959,51428],{"class":112},[102,61961,60833],{"class":161},[102,61963,1279],{"class":112},[102,61965,61966,61969,61971,61973],{"class":104,"line":9706},[102,61967,61968],{"class":161},"      border",[102,61970,51428],{"class":112},[102,61972,54728],{"class":161},[102,61974,1279],{"class":112},[102,61976,61977,61979,61981,61983,61985],{"class":104,"line":9731},[102,61978,55125],{"class":161},[102,61980,51428],{"class":112},[102,61982,406],{"class":161},[102,61984,51483],{"class":108},[102,61986,1279],{"class":112},[102,61988,61989,61992,61994,61996,61998],{"class":104,"line":9754},[102,61990,61991],{"class":161},"      margin-left",[102,61993,51428],{"class":112},[102,61995,559],{"class":161},[102,61997,51483],{"class":108},[102,61999,1279],{"class":112},[102,62001,62002,62004,62006,62008,62010],{"class":104,"line":9778},[102,62003,54762],{"class":161},[102,62005,51428],{"class":112},[102,62007,469],{"class":161},[102,62009,51483],{"class":108},[102,62011,1279],{"class":112},[102,62013,62014,62017,62019,62022],{"class":104,"line":9783},[102,62015,62016],{"class":161},"      cursor",[102,62018,51428],{"class":112},[102,62020,62021],{"class":161},"pointer",[102,62023,1279],{"class":112},[102,62025,62026],{"class":104,"line":9788},[102,62027,2176],{"class":112},[102,62029,62030],{"class":104,"line":9793},[102,62031,2389],{"emptyLinePlaceholder":30},[102,62033,62034,62036,62039],{"class":104,"line":9802},[102,62035,61595],{"class":1952},[102,62037,62038],{"class":1952}," .total",[102,62040,15562],{"class":112},[102,62042,62043,62045,62047,62049,62051],{"class":104,"line":9807},[102,62044,61741],{"class":161},[102,62046,51428],{"class":112},[102,62048,725],{"class":161},[102,62050,51483],{"class":108},[102,62052,1279],{"class":112},[102,62054,62055,62057,62059,62062],{"class":104,"line":9813},[102,62056,57407],{"class":161},[102,62058,51428],{"class":112},[102,62060,62061],{"class":161},"#999",[102,62063,1279],{"class":112},[102,62065,62066,62069,62071,62073,62075],{"class":104,"line":9834},[102,62067,62068],{"class":161},"      margin-top",[102,62070,51428],{"class":112},[102,62072,432],{"class":161},[102,62074,51483],{"class":108},[102,62076,1279],{"class":112},[102,62078,62079,62082,62084,62086],{"class":104,"line":9840},[102,62080,62081],{"class":161},"      opacity",[102,62083,51428],{"class":112},[102,62085,304],{"class":161},[102,62087,1279],{"class":112},[102,62089,62090,62092,62094,62096,62098,62100],{"class":104,"line":9854},[102,62091,61851],{"class":161},[102,62093,51428],{"class":112},[102,62095,28112],{"class":161},[102,62097,61858],{"class":161},[102,62099,808],{"class":108},[102,62101,1279],{"class":112},[102,62103,62104],{"class":104,"line":9860},[102,62105,2176],{"class":112},[102,62107,62108],{"class":104,"line":9887},[102,62109,2389],{"emptyLinePlaceholder":30},[102,62111,62112,62115],{"class":104,"line":9896},[102,62113,62114],{"class":1952},"    .list",[102,62116,15562],{"class":112},[102,62118,62119,62121,62123,62125,62127],{"class":104,"line":9902},[102,62120,61602],{"class":161},[102,62122,51428],{"class":112},[102,62124,3976],{"class":161},[102,62126,51483],{"class":108},[102,62128,1279],{"class":112},[102,62130,62131,62133,62135,62137,62139],{"class":104,"line":9910},[102,62132,61615],{"class":161},[102,62134,51428],{"class":112},[102,62136,61620],{"class":161},[102,62138,51483],{"class":108},[102,62140,1279],{"class":112},[102,62142,62143,62145,62147,62149],{"class":104,"line":9915},[102,62144,55000],{"class":161},[102,62146,51428],{"class":112},[102,62148,51468],{"class":161},[102,62150,1279],{"class":112},[102,62152,62153],{"class":104,"line":16594},[102,62154,2176],{"class":112},[102,62156,62157],{"class":104,"line":16600},[102,62158,2389],{"emptyLinePlaceholder":30},[102,62160,62161,62163,62166],{"class":104,"line":16623},[102,62162,62114],{"class":1952},[102,62164,62165],{"class":1952}," .item",[102,62167,15562],{"class":112},[102,62169,62170,62172,62174,62176,62178],{"class":104,"line":16629},[102,62171,54762],{"class":161},[102,62173,51428],{"class":112},[102,62175,424],{"class":161},[102,62177,441],{"class":108},[102,62179,1279],{"class":112},[102,62181,62182,62184,62186,62188],{"class":104,"line":16652},[102,62183,55000],{"class":161},[102,62185,51428],{"class":112},[102,62187,51468],{"class":161},[102,62189,1279],{"class":112},[102,62191,62192],{"class":104,"line":16666},[102,62193,2176],{"class":112},[102,62195,62196],{"class":104,"line":16686},[102,62197,2389],{"emptyLinePlaceholder":30},[102,62199,62200,62202,62204,62207],{"class":104,"line":16692},[102,62201,62114],{"class":1952},[102,62203,62165],{"class":1952},[102,62205,62206],{"class":1952}," .info",[102,62208,15562],{"class":112},[102,62210,62211,62213,62215,62217],{"class":104,"line":16703},[102,62212,61828],{"class":161},[102,62214,51428],{"class":112},[102,62216,330],{"class":161},[102,62218,1279],{"class":112},[102,62220,62221,62224,62226,62228,62230,62233,62236],{"class":104,"line":16726},[102,62222,62223],{"class":161},"      border-bottom",[102,62225,51428],{"class":112},[102,62227,330],{"class":161},[102,62229,51483],{"class":108},[102,62231,62232],{"class":161}," dashed",[102,62234,62235],{"class":161}," #e4e4e4",[102,62237,1279],{"class":112},[102,62239,62240,62243,62245,62247,62249],{"class":104,"line":16748},[102,62241,62242],{"class":161},"      padding-bottom",[102,62244,51428],{"class":112},[102,62246,559],{"class":161},[102,62248,51483],{"class":108},[102,62250,1279],{"class":112},[102,62252,62253],{"class":104,"line":16753},[102,62254,2176],{"class":112},[102,62256,62257],{"class":104,"line":16759},[102,62258,2389],{"emptyLinePlaceholder":30},[102,62260,62261,62263,62265,62267],{"class":104,"line":16773},[102,62262,62114],{"class":1952},[102,62264,62165],{"class":1952},[102,62266,6815],{"class":51291},[102,62268,15562],{"class":112},[102,62270,62271,62273,62275,62277],{"class":104,"line":16786},[102,62272,54697],{"class":161},[102,62274,51428],{"class":112},[102,62276,304],{"class":161},[102,62278,1279],{"class":112},[102,62280,62281],{"class":104,"line":16791},[102,62282,2176],{"class":112},[102,62284,62285],{"class":104,"line":16805},[102,62286,2389],{"emptyLinePlaceholder":30},[102,62288,62289,62291,62293,62296],{"class":104,"line":16810},[102,62290,62114],{"class":1952},[102,62292,62165],{"class":1952},[102,62294,62295],{"class":1952}," .name",[102,62297,15562],{"class":112},[102,62299,62300,62302,62304,62307],{"class":104,"line":16816},[102,62301,57407],{"class":161},[102,62303,51428],{"class":112},[102,62305,62306],{"class":161},"#FB7299",[102,62308,1279],{"class":112},[102,62310,62311,62313,62315,62317,62319],{"class":104,"line":16821},[102,62312,54913],{"class":161},[102,62314,51428],{"class":112},[102,62316,662],{"class":161},[102,62318,51483],{"class":108},[102,62320,1279],{"class":112},[102,62322,62323,62326,62328,62331],{"class":104,"line":16835},[102,62324,62325],{"class":161},"      font-weight",[102,62327,51428],{"class":112},[102,62329,62330],{"class":161},"bold",[102,62332,1279],{"class":112},[102,62334,62335],{"class":104,"line":16840},[102,62336,2176],{"class":112},[102,62338,62339],{"class":104,"line":16845},[102,62340,2389],{"emptyLinePlaceholder":30},[102,62342,62343,62345,62347,62350],{"class":104,"line":16859},[102,62344,62114],{"class":1952},[102,62346,62165],{"class":1952},[102,62348,62349],{"class":1952}," .text",[102,62351,15562],{"class":112},[102,62353,62354,62356,62358,62361],{"class":104,"line":16871},[102,62355,57407],{"class":161},[102,62357,51428],{"class":112},[102,62359,62360],{"class":161},"#333",[102,62362,1279],{"class":112},[102,62364,62365,62367,62369,62371,62373,62375],{"class":104,"line":16876},[102,62366,54686],{"class":161},[102,62368,51428],{"class":112},[102,62370,559],{"class":161},[102,62372,51483],{"class":108},[102,62374,4082],{"class":161},[102,62376,1279],{"class":112},[102,62378,62379],{"class":104,"line":16889},[102,62380,2176],{"class":112},[102,62382,62383],{"class":104,"line":16894},[102,62384,2389],{"emptyLinePlaceholder":30},[102,62386,62387,62389,62391,62394],{"class":104,"line":16899},[102,62388,62114],{"class":1952},[102,62390,62165],{"class":1952},[102,62392,62393],{"class":1952}," .time",[102,62395,15562],{"class":112},[102,62397,62398,62400,62402,62404],{"class":104,"line":16904},[102,62399,57407],{"class":161},[102,62401,51428],{"class":112},[102,62403,62061],{"class":161},[102,62405,1279],{"class":112},[102,62407,62408,62410,62412,62414,62416],{"class":104,"line":16917},[102,62409,54913],{"class":161},[102,62411,51428],{"class":112},[102,62413,611],{"class":161},[102,62415,51483],{"class":108},[102,62417,1279],{"class":112},[102,62419,62420],{"class":104,"line":16922},[102,62421,2176],{"class":112},[102,62423,62424,62426,62428],{"class":104,"line":32624},[102,62425,52408],{"class":112},[102,62427,5116],{"class":51291},[102,62429,51298],{"class":112},[102,62431,62432,62434,62436],{"class":104,"line":32630},[102,62433,51776],{"class":112},[102,62435,51325],{"class":51291},[102,62437,51298],{"class":112},[102,62439,62440],{"class":104,"line":32636},[102,62441,2389],{"emptyLinePlaceholder":30},[102,62443,62444,62446,62448],{"class":104,"line":32642},[102,62445,1023],{"class":112},[102,62447,51791],{"class":51291},[102,62449,51298],{"class":112},[102,62451,62452,62454,62456,62458,62460,62463],{"class":104,"line":32648},[102,62453,52135],{"class":112},[102,62455,51602],{"class":51291},[102,62457,53477],{"class":1952},[102,62459,158],{"class":112},[102,62461,62462],{"class":217},"\"wrapper\"",[102,62464,51298],{"class":112},[102,62466,62467,62469,62471,62473,62475,62478,62480,62482],{"class":104,"line":32659},[102,62468,51332],{"class":112},[102,62470,554],{"class":51291},[102,62472,53477],{"class":1952},[102,62474,158],{"class":112},[102,62476,62477],{"class":217},"\"avatar\"",[102,62479,55305],{"class":112},[102,62481,554],{"class":51291},[102,62483,51298],{"class":112},[102,62485,62486,62488,62490,62492,62494,62497,62499,62501,62504,62506,62508,62510,62513,62515,62518,62520,62522],{"class":104,"line":32665},[102,62487,51332],{"class":112},[102,62489,54279],{"class":51291},[102,62491,14949],{"class":1952},[102,62493,158],{"class":112},[102,62495,62496],{"class":217},"\"tx\"",[102,62498,61011],{"class":1952},[102,62500,158],{"class":112},[102,62502,62503],{"class":217},"\"发一条友善的评论\"",[102,62505,54302],{"class":1952},[102,62507,158],{"class":112},[102,62509,3690],{"class":217},[102,62511,62512],{"class":1952}," maxlength",[102,62514,158],{"class":112},[102,62516,62517],{"class":217},"\"200\"",[102,62519,55305],{"class":112},[102,62521,54279],{"class":51291},[102,62523,51298],{"class":112},[102,62525,62526,62528,62530,62533,62535],{"class":104,"line":32685},[102,62527,51332],{"class":112},[102,62529,53878],{"class":51291},[102,62531,62532],{"class":112},">发布\u003C\u002F",[102,62534,53878],{"class":51291},[102,62536,51298],{"class":112},[102,62538,62539,62541,62543],{"class":104,"line":32691},[102,62540,52408],{"class":112},[102,62542,51602],{"class":51291},[102,62544,51298],{"class":112},[102,62546,62547,62549,62551,62553,62555,62557],{"class":104,"line":32702},[102,62548,52135],{"class":112},[102,62550,51602],{"class":51291},[102,62552,53477],{"class":1952},[102,62554,158],{"class":112},[102,62556,62462],{"class":217},[102,62558,51298],{"class":112},[102,62560,62561,62563,62565,62567,62569,62572,62575,62577],{"class":104,"line":32708},[102,62562,51332],{"class":112},[102,62564,102],{"class":51291},[102,62566,53477],{"class":1952},[102,62568,158],{"class":112},[102,62570,62571],{"class":217},"\"total\"",[102,62573,62574],{"class":112},">0\u002F200字\u003C\u002F",[102,62576,102],{"class":51291},[102,62578,51298],{"class":112},[102,62580,62581,62583,62585],{"class":104,"line":32714},[102,62582,52408],{"class":112},[102,62584,51602],{"class":51291},[102,62586,51298],{"class":112},[102,62588,62589,62591,62593,62595,62597,62600],{"class":104,"line":32720},[102,62590,52135],{"class":112},[102,62592,51602],{"class":51291},[102,62594,53477],{"class":1952},[102,62596,158],{"class":112},[102,62598,62599],{"class":217},"\"list\"",[102,62601,51298],{"class":112},[102,62603,62604,62606,62608,62610,62612,62615,62618,62620,62623],{"class":104,"line":32726},[102,62605,51332],{"class":112},[102,62607,51602],{"class":51291},[102,62609,53477],{"class":1952},[102,62611,158],{"class":112},[102,62613,62614],{"class":217},"\"item\"",[102,62616,62617],{"class":1952}," style",[102,62619,158],{"class":112},[102,62621,62622],{"class":217},"\"display: none;\"",[102,62624,51298],{"class":112},[102,62626,62627,62629,62631,62633,62635,62637,62639,62641],{"class":104,"line":32732},[102,62628,55225],{"class":112},[102,62630,554],{"class":51291},[102,62632,53477],{"class":1952},[102,62634,158],{"class":112},[102,62636,62477],{"class":217},[102,62638,55305],{"class":112},[102,62640,554],{"class":51291},[102,62642,51298],{"class":112},[102,62644,62645,62647,62649,62651,62653,62656],{"class":104,"line":32738},[102,62646,55225],{"class":112},[102,62648,51602],{"class":51291},[102,62650,53477],{"class":1952},[102,62652,158],{"class":112},[102,62654,62655],{"class":217},"\"info\"",[102,62657,51298],{"class":112},[102,62659,62660,62662,62664,62666,62668,62671,62674,62676],{"class":104,"line":32744},[102,62661,55293],{"class":112},[102,62663,19],{"class":51291},[102,62665,53477],{"class":1952},[102,62667,158],{"class":112},[102,62669,62670],{"class":217},"\"name\"",[102,62672,62673],{"class":112},">清风徐来\u003C\u002F",[102,62675,19],{"class":51291},[102,62677,51298],{"class":112},[102,62679,62680,62682,62684,62686,62688,62691,62694,62696],{"class":104,"line":32764},[102,62681,55293],{"class":112},[102,62683,19],{"class":51291},[102,62685,53477],{"class":1952},[102,62687,158],{"class":112},[102,62689,62690],{"class":217},"\"text\"",[102,62692,62693],{"class":112},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[102,62695,19],{"class":51291},[102,62697,51298],{"class":112},[102,62699,62700,62702,62704,62706,62708,62711,62714,62716],{"class":104,"line":32770},[102,62701,55293],{"class":112},[102,62703,19],{"class":51291},[102,62705,53477],{"class":1952},[102,62707,158],{"class":112},[102,62709,62710],{"class":217},"\"time\"",[102,62712,62713],{"class":112},">2022-10-10 20:29:21\u003C\u002F",[102,62715,19],{"class":51291},[102,62717,51298],{"class":112},[102,62719,62720,62722,62724],{"class":104,"line":32786},[102,62721,55398],{"class":112},[102,62723,51602],{"class":51291},[102,62725,51298],{"class":112},[102,62727,62728,62730,62732],{"class":104,"line":32792},[102,62729,51767],{"class":112},[102,62731,51602],{"class":51291},[102,62733,51298],{"class":112},[102,62735,62736,62738,62740],{"class":104,"line":32806},[102,62737,52408],{"class":112},[102,62739,51602],{"class":51291},[102,62741,51298],{"class":112},[102,62743,62744,62746,62748],{"class":104,"line":32812},[102,62745,52135],{"class":112},[102,62747,51804],{"class":51291},[102,62749,51298],{"class":112},[102,62751,62752,62754,62757,62759,62761,62763,62765,62768],{"class":104,"line":32827},[102,62753,11211],{"class":108},[102,62755,62756],{"class":161}," tx",[102,62758,13554],{"class":108},[102,62760,54387],{"class":112},[102,62762,54390],{"class":1952},[102,62764,113],{"class":112},[102,62766,62767],{"class":217},"'#tx'",[102,62769,119],{"class":112},[102,62771,62772,62774,62777,62779,62781,62783,62785,62788],{"class":104,"line":32833},[102,62773,11211],{"class":108},[102,62775,62776],{"class":161}," total",[102,62778,13554],{"class":108},[102,62780,54387],{"class":112},[102,62782,54390],{"class":1952},[102,62784,113],{"class":112},[102,62786,62787],{"class":217},"'.total'",[102,62789,119],{"class":112},[102,62791,62792],{"class":104,"line":32842},[102,62793,62794],{"class":171},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[102,62796,62797,62800,62802,62804,62806,62808,62810],{"class":104,"line":32848},[102,62798,62799],{"class":112},"    tx.",[102,62801,57804],{"class":1952},[102,62803,113],{"class":112},[102,62805,61318],{"class":217},[102,62807,12425],{"class":112},[102,62809,54440],{"class":108},[102,62811,54443],{"class":112},[102,62813,62814,62817,62819],{"class":104,"line":32857},[102,62815,62816],{"class":112},"      total.style.opacity ",[102,62818,158],{"class":108},[102,62820,55690],{"class":161},[102,62822,62823],{"class":104,"line":32863},[102,62824,33452],{"class":112},[102,62826,62827],{"class":104,"line":32869},[102,62828,62829],{"class":171},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[102,62831,62832,62834,62836,62838,62840,62842,62844],{"class":104,"line":32878},[102,62833,62799],{"class":112},[102,62835,57804],{"class":1952},[102,62837,113],{"class":112},[102,62839,61379],{"class":217},[102,62841,12425],{"class":112},[102,62843,54440],{"class":108},[102,62845,54443],{"class":112},[102,62847,62848,62850,62852],{"class":104,"line":32884},[102,62849,62816],{"class":112},[102,62851,158],{"class":108},[102,62853,47324],{"class":161},[102,62855,62856],{"class":104,"line":32895},[102,62857,33452],{"class":112},[102,62859,62860],{"class":104,"line":32901},[102,62861,62862],{"class":171},"    \u002F\u002F 3. 检测用户输入\n",[102,62864,62865,62867,62869,62871,62874,62876,62878],{"class":104,"line":32920},[102,62866,62799],{"class":112},[102,62868,57804],{"class":1952},[102,62870,113],{"class":112},[102,62872,62873],{"class":217},"'input'",[102,62875,12425],{"class":112},[102,62877,54440],{"class":108},[102,62879,54443],{"class":112},[102,62881,62882],{"class":104,"line":32926},[102,62883,62884],{"class":171},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[102,62886,62887,62890,62892,62895,62898,62900,62903,62905,62907],{"class":104,"line":32937},[102,62888,62889],{"class":112},"      total.innerHTML ",[102,62891,158],{"class":108},[102,62893,62894],{"class":217}," `${",[102,62896,62897],{"class":112},"tx",[102,62899,671],{"class":217},[102,62901,62902],{"class":112},"value",[102,62904,671],{"class":217},[102,62906,51959],{"class":161},[102,62908,62909],{"class":217},"}\u002F200字`\n",[102,62911,62912],{"class":104,"line":32943},[102,62913,33452],{"class":112},[102,62915,62916],{"class":104,"line":32963},[102,62917,2389],{"emptyLinePlaceholder":30},[102,62919,62920],{"class":104,"line":32979},[102,62921,62922],{"class":171},"    \u002F\u002F const str = 'andy'\n",[102,62924,62925],{"class":104,"line":32985},[102,62926,62927],{"class":171},"    \u002F\u002F console.log(str.length)\n",[102,62929,62930,62932,62934],{"class":104,"line":32999},[102,62931,52408],{"class":112},[102,62933,51804],{"class":51291},[102,62935,51298],{"class":112},[102,62937,62938,62940,62942],{"class":104,"line":33005},[102,62939,51776],{"class":112},[102,62941,51791],{"class":51291},[102,62943,51298],{"class":112},[102,62945,62946],{"class":104,"line":33011},[102,62947,2389],{"emptyLinePlaceholder":30},[102,62949,62950,62952,62954],{"class":104,"line":33022},[102,62951,51776],{"class":112},[102,62953,50626],{"class":51291},[102,62955,51298],{"class":112},[21988,62957,62959],{"id":62958},"_3254-change事件","3.2.5.4 change事件",[19,62961,62962],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,62964,62965],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,62967,62968],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[93,62970,62972],{"className":50624,"code":62971,"language":50626,"meta":23,"style":23},"\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",[99,62973,62974,62984,62998,63002,63010,63024,63044,63056,63064,63068,63076,63090,63098,63116,63134,63146,63150,63158,63166,63170],{"__ignoreMap":23},[102,62975,62976,62978,62980,62982],{"class":104,"line":105},[102,62977,51288],{"class":112},[102,62979,51292],{"class":51291},[102,62981,51295],{"class":1952},[102,62983,51298],{"class":112},[102,62985,62986,62988,62990,62992,62994,62996],{"class":104,"line":24},[102,62987,1023],{"class":112},[102,62989,50626],{"class":51291},[102,62991,51307],{"class":1952},[102,62993,158],{"class":112},[102,62995,51312],{"class":217},[102,62997,51298],{"class":112},[102,62999,63000],{"class":104,"line":1168},[102,63001,2389],{"emptyLinePlaceholder":30},[102,63003,63004,63006,63008],{"class":104,"line":1183},[102,63005,1023],{"class":112},[102,63007,51325],{"class":51291},[102,63009,51298],{"class":112},[102,63011,63012,63014,63016,63018,63020,63022],{"class":104,"line":1189},[102,63013,52135],{"class":112},[102,63015,51335],{"class":51291},[102,63017,51338],{"class":1952},[102,63019,158],{"class":112},[102,63021,51343],{"class":217},[102,63023,51298],{"class":112},[102,63025,63026,63028,63030,63032,63034,63036,63038,63040,63042],{"class":104,"line":1203},[102,63027,52135],{"class":112},[102,63029,51335],{"class":51291},[102,63031,14910],{"class":1952},[102,63033,158],{"class":112},[102,63035,51382],{"class":217},[102,63037,51362],{"class":1952},[102,63039,158],{"class":112},[102,63041,51389],{"class":217},[102,63043,51298],{"class":112},[102,63045,63046,63048,63050,63052,63054],{"class":104,"line":1209},[102,63047,52135],{"class":112},[102,63049,51398],{"class":51291},[102,63051,51401],{"class":112},[102,63053,51398],{"class":51291},[102,63055,51298],{"class":112},[102,63057,63058,63060,63062],{"class":104,"line":1300},[102,63059,51776],{"class":112},[102,63061,51325],{"class":51291},[102,63063,51298],{"class":112},[102,63065,63066],{"class":104,"line":1306},[102,63067,2389],{"emptyLinePlaceholder":30},[102,63069,63070,63072,63074],{"class":104,"line":1318},[102,63071,1023],{"class":112},[102,63073,51791],{"class":51291},[102,63075,51298],{"class":112},[102,63077,63078,63080,63082,63084,63086,63088],{"class":104,"line":1601},[102,63079,52135],{"class":112},[102,63081,53812],{"class":51291},[102,63083,53815],{"class":1952},[102,63085,158],{"class":112},[102,63087,62690],{"class":217},[102,63089,51298],{"class":112},[102,63091,63092,63094,63096],{"class":104,"line":1606},[102,63093,52135],{"class":112},[102,63095,51804],{"class":51291},[102,63097,51298],{"class":112},[102,63099,63100,63102,63104,63106,63108,63110,63112,63114],{"class":104,"line":1612},[102,63101,11211],{"class":108},[102,63103,60596],{"class":161},[102,63105,13554],{"class":108},[102,63107,54387],{"class":112},[102,63109,54390],{"class":1952},[102,63111,113],{"class":112},[102,63113,62873],{"class":217},[102,63115,119],{"class":112},[102,63117,63118,63121,63123,63125,63128,63130,63132],{"class":104,"line":1617},[102,63119,63120],{"class":112},"    input.",[102,63122,57804],{"class":1952},[102,63124,113],{"class":112},[102,63126,63127],{"class":217},"'change'",[102,63129,12425],{"class":112},[102,63131,54440],{"class":108},[102,63133,54443],{"class":112},[102,63135,63136,63138,63140,63142,63144],{"class":104,"line":1631},[102,63137,58235],{"class":112},[102,63139,58238],{"class":1952},[102,63141,113],{"class":112},[102,63143,706],{"class":161},[102,63145,119],{"class":112},[102,63147,63148],{"class":104,"line":1636},[102,63149,33452],{"class":112},[102,63151,63152,63154,63156],{"class":104,"line":1642},[102,63153,52408],{"class":112},[102,63155,51804],{"class":51291},[102,63157,51298],{"class":112},[102,63159,63160,63162,63164],{"class":104,"line":1663},[102,63161,51776],{"class":112},[102,63163,51791],{"class":51291},[102,63165,51298],{"class":112},[102,63167,63168],{"class":104,"line":1668},[102,63169,2389],{"emptyLinePlaceholder":30},[102,63171,63172,63174,63176],{"class":104,"line":1682},[102,63173,51776],{"class":112},[102,63175,50626],{"class":51291},[102,63177,51298],{"class":112},[19,63179,63180],{},"总结：内容发生改变才回去触发",[73,63182,63184],{"id":63183},"_326-事件对象","3.2.6 事件对象",[21988,63186,63188],{"id":63187},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63190,63191],{},[1451,63192],{"alt":23,"src":63193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63195,63196],{},[1451,63197],{"alt":23,"src":63198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63200,63201],{},"点击一次，就输出了事件对象，它是个对象",[19,63203,63204],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63206,63207],{},[1451,63208],{"alt":23,"src":63209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21988,63211,63213],{"id":63212},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63215,63216],{},[1451,63217],{"alt":23,"src":63218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63220,63221],{},"实现按特殊字符才是实现打印输出效果：",[93,63223,63225],{"className":53058,"code":63224,"language":53060,"meta":23,"style":23},"\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",[99,63226,63227,63235,63240,63254,63262,63267,63272,63277,63282,63287,63292,63297,63302,63307,63311,63315,63323],{"__ignoreMap":23},[102,63228,63229,63231,63233],{"class":104,"line":105},[102,63230,1023],{"class":112},[102,63232,51791],{"class":51291},[102,63234,51298],{"class":112},[102,63236,63237],{"class":104,"line":24},[102,63238,63239],{"class":171},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[102,63241,63242,63244,63246,63248,63250,63252],{"class":104,"line":1168},[102,63243,52135],{"class":112},[102,63245,53812],{"class":51291},[102,63247,53815],{"class":1952},[102,63249,158],{"class":112},[102,63251,62690],{"class":217},[102,63253,51298],{"class":112},[102,63255,63256,63258,63260],{"class":104,"line":1183},[102,63257,52135],{"class":112},[102,63259,51804],{"class":51291},[102,63261,51298],{"class":112},[102,63263,63264],{"class":104,"line":1189},[102,63265,63266],{"class":112},"    \u002F\u002F const btn = document.querySelector('button')\n",[102,63268,63269],{"class":104,"line":1203},[102,63270,63271],{"class":112},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[102,63273,63274],{"class":104,"line":1209},[102,63275,63276],{"class":112},"    \u002F\u002F   console.log(e);\n",[102,63278,63279],{"class":104,"line":1300},[102,63280,63281],{"class":112},"    \u002F\u002F })\n",[102,63283,63284],{"class":104,"line":1306},[102,63285,63286],{"class":112},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[102,63288,63289],{"class":104,"line":1318},[102,63290,63291],{"class":112},"    const input = document.querySelector('input')\n",[102,63293,63294],{"class":104,"line":1601},[102,63295,63296],{"class":112},"    input.addEventListener('keyup', function (e) {\n",[102,63298,63299],{"class":104,"line":1606},[102,63300,63301],{"class":112},"      if (e.key === 'Enter') {\n",[102,63303,63304],{"class":104,"line":1612},[102,63305,63306],{"class":112},"        console.log('我按下了回车键')\n",[102,63308,63309],{"class":104,"line":1617},[102,63310,52389],{"class":112},[102,63312,63313],{"class":104,"line":1631},[102,63314,33452],{"class":112},[102,63316,63317,63319,63321],{"class":104,"line":1636},[102,63318,52408],{"class":112},[102,63320,51804],{"class":51291},[102,63322,51298],{"class":112},[102,63324,63325,63327,63329],{"class":104,"line":1642},[102,63326,51776],{"class":112},[102,63328,51791],{"class":51291},[102,63330,51298],{"class":112},[21988,63332,63334],{"id":63333},"_3263-trim方法","3.2.6.3 trim方法",[19,63336,63337],{},[1451,63338],{"alt":23,"src":63339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63341,63342],{},[1451,63343],{"alt":23,"src":63344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63346,63347],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63349,63350],{},"str.trim()",[73,63352,63354],{"id":63353},"_327-环境对象","3.2.7 环境对象",[19,63356,63357],{},[1451,63358],{"alt":23,"src":63359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63361,63362],{},[1451,63363],{"alt":23,"src":63364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63366,63367],{},[1451,63368],{"alt":23,"src":63369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63371,63372],{},"实际函数调用是window.fn()",[19,63374,63375],{},"普通函数里面this指向的是window",[1120,63377,63378,63381,63384],{},[59,63379,63380],{},"在普通函数下，this指向的是window",[59,63382,63383],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[59,63385,63386],{},"箭头函数没有this",[19,63388,63389],{},"粗略记法就是：谁调用，this就指向谁",[19,63391,63392],{},[1451,63393],{"alt":23,"src":63394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63396,63397],{},[1451,63398],{"alt":23,"src":63399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63401,63402],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63404,63405],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[93,63407,63409],{"className":53058,"code":63408,"language":53060,"meta":23,"style":23},"\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",[99,63410,63411,63419,63431,63439,63444,63449,63454,63459,63463,63471],{"__ignoreMap":23},[102,63412,63413,63415,63417],{"class":104,"line":105},[102,63414,1023],{"class":112},[102,63416,51791],{"class":51291},[102,63418,51298],{"class":112},[102,63420,63421,63423,63425,63427,63429],{"class":104,"line":24},[102,63422,52135],{"class":112},[102,63424,53878],{"class":51291},[102,63426,53884],{"class":112},[102,63428,53878],{"class":51291},[102,63430,51298],{"class":112},[102,63432,63433,63435,63437],{"class":104,"line":1168},[102,63434,52135],{"class":112},[102,63436,51804],{"class":51291},[102,63438,51298],{"class":112},[102,63440,63441],{"class":104,"line":1183},[102,63442,63443],{"class":112},"    const button = document.querySelector('button')\n",[102,63445,63446],{"class":104,"line":1189},[102,63447,63448],{"class":112},"    button.addEventListener('click', function () {\n",[102,63450,63451],{"class":104,"line":1203},[102,63452,63453],{"class":112},"      \u002F\u002F console.log(this);\n",[102,63455,63456],{"class":104,"line":1209},[102,63457,63458],{"class":112},"      this.style.color = 'pink'\n",[102,63460,63461],{"class":104,"line":1300},[102,63462,33452],{"class":112},[102,63464,63465,63467,63469],{"class":104,"line":1306},[102,63466,52408],{"class":112},[102,63468,51804],{"class":51291},[102,63470,51298],{"class":112},[102,63472,63473,63475,63477],{"class":104,"line":1318},[102,63474,51776],{"class":112},[102,63476,51791],{"class":51291},[102,63478,51298],{"class":112},[73,63480,63482],{"id":63481},"_328-回调函数","3.2.8 回调函数",[19,63484,63485],{},[1451,63486],{"alt":23,"src":63487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63489,63490],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63492,11322],{},[1120,63494,63495,63498,63501],{},[59,63496,63497],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[59,63499,63500],{},"回调函数本质还是函数，只不过把它当成参数使用",[59,63502,63503],{},"使用匿名函数做为回调函数比较常见",[73,63505,63507],{"id":63506},"_329-tab栏切换","3.2.9 tab栏切换",[19,63509,63510],{},[1451,63511],{"alt":23,"src":63512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[93,63514,63516],{"className":50624,"code":63515,"language":50626,"meta":23,"style":23},"\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",[99,63517,63518,63528,63542,63546,63554,63568,63588,63608,63621,63629,63635,63645,63655,63659,63663,63670,63683,63696,63708,63724,63728,63732,63739,63751,63763,63775,63785,63795,63799,63803,63812,63824,63835,63847,63851,63855,63863,63873,63883,63893,63897,63901,63911,63925,63937,63941,63945,63957,63968,63985,63995,63999,64003,64018,64029,64039,64043,64047,64054,64069,64073,64077,64085,64095,64099,64103,64112,64122,64126,64134,64142,64146,64154,64169,64184,64197,64205,64239,64266,64293,64320,64347,64355,64363,64378,64415,64450,64485,64520,64555,64563,64571,64579,64584,64589,64609,64614,64643,64648,64653,64671,64676,64681,64686,64708,64713,64729,64733,64738,64743,64764,64769,64798,64802,64807,64811,64819,64827,64831],{"__ignoreMap":23},[102,63519,63520,63522,63524,63526],{"class":104,"line":105},[102,63521,51288],{"class":112},[102,63523,51292],{"class":51291},[102,63525,51295],{"class":1952},[102,63527,51298],{"class":112},[102,63529,63530,63532,63534,63536,63538,63540],{"class":104,"line":24},[102,63531,1023],{"class":112},[102,63533,50626],{"class":51291},[102,63535,51307],{"class":1952},[102,63537,158],{"class":112},[102,63539,51312],{"class":217},[102,63541,51298],{"class":112},[102,63543,63544],{"class":104,"line":1168},[102,63545,2389],{"emptyLinePlaceholder":30},[102,63547,63548,63550,63552],{"class":104,"line":1183},[102,63549,1023],{"class":112},[102,63551,51325],{"class":51291},[102,63553,51298],{"class":112},[102,63555,63556,63558,63560,63562,63564,63566],{"class":104,"line":1189},[102,63557,52135],{"class":112},[102,63559,51335],{"class":51291},[102,63561,51338],{"class":1952},[102,63563,158],{"class":112},[102,63565,51343],{"class":217},[102,63567,59118],{"class":112},[102,63569,63570,63572,63574,63576,63578,63580,63582,63584,63586],{"class":104,"line":1203},[102,63571,52135],{"class":112},[102,63573,51335],{"class":51291},[102,63575,51354],{"class":1952},[102,63577,158],{"class":112},[102,63579,51359],{"class":217},[102,63581,51362],{"class":1952},[102,63583,158],{"class":112},[102,63585,51367],{"class":217},[102,63587,59118],{"class":112},[102,63589,63590,63592,63594,63596,63598,63600,63602,63604,63606],{"class":104,"line":1209},[102,63591,52135],{"class":112},[102,63593,51335],{"class":51291},[102,63595,14910],{"class":1952},[102,63597,158],{"class":112},[102,63599,51382],{"class":217},[102,63601,51362],{"class":1952},[102,63603,158],{"class":112},[102,63605,51389],{"class":217},[102,63607,59118],{"class":112},[102,63609,63610,63612,63614,63617,63619],{"class":104,"line":1300},[102,63611,52135],{"class":112},[102,63613,51398],{"class":51291},[102,63615,63616],{"class":112},">tab栏切换\u003C\u002F",[102,63618,51398],{"class":51291},[102,63620,51298],{"class":112},[102,63622,63623,63625,63627],{"class":104,"line":1306},[102,63624,52135],{"class":112},[102,63626,5116],{"class":51291},[102,63628,51298],{"class":112},[102,63630,63631,63633],{"class":104,"line":1318},[102,63632,6393],{"class":51291},[102,63634,15562],{"class":112},[102,63636,63637,63639,63641,63643],{"class":104,"line":1601},[102,63638,54697],{"class":161},[102,63640,51428],{"class":112},[102,63642,304],{"class":161},[102,63644,1279],{"class":112},[102,63646,63647,63649,63651,63653],{"class":104,"line":1606},[102,63648,54686],{"class":161},[102,63650,51428],{"class":112},[102,63652,304],{"class":161},[102,63654,1279],{"class":112},[102,63656,63657],{"class":104,"line":1612},[102,63658,2176],{"class":112},[102,63660,63661],{"class":104,"line":1617},[102,63662,2389],{"emptyLinePlaceholder":30},[102,63664,63665,63668],{"class":104,"line":1631},[102,63666,63667],{"class":1952},"    .tab",[102,63669,15562],{"class":112},[102,63671,63672,63674,63676,63679,63681],{"class":104,"line":1636},[102,63673,54762],{"class":161},[102,63675,51428],{"class":112},[102,63677,63678],{"class":161},"590",[102,63680,51483],{"class":108},[102,63682,1279],{"class":112},[102,63684,63685,63687,63689,63692,63694],{"class":104,"line":1642},[102,63686,54776],{"class":161},[102,63688,51428],{"class":112},[102,63690,63691],{"class":161},"340",[102,63693,51483],{"class":108},[102,63695,1279],{"class":112},[102,63697,63698,63700,63702,63704,63706],{"class":104,"line":1663},[102,63699,54697],{"class":161},[102,63701,51428],{"class":112},[102,63703,813],{"class":161},[102,63705,51483],{"class":108},[102,63707,1279],{"class":112},[102,63709,63710,63712,63714,63716,63718,63720,63722],{"class":104,"line":1668},[102,63711,61968],{"class":161},[102,63713,51428],{"class":112},[102,63715,330],{"class":161},[102,63717,51483],{"class":108},[102,63719,51512],{"class":161},[102,63721,62235],{"class":161},[102,63723,1279],{"class":112},[102,63725,63726],{"class":104,"line":1682},[102,63727,2176],{"class":112},[102,63729,63730],{"class":104,"line":1687},[102,63731,2389],{"emptyLinePlaceholder":30},[102,63733,63734,63737],{"class":104,"line":1716},[102,63735,63736],{"class":1952},"    .tab-nav",[102,63738,15562],{"class":112},[102,63740,63741,63743,63745,63747,63749],{"class":104,"line":1721},[102,63742,54762],{"class":161},[102,63744,51428],{"class":112},[102,63746,424],{"class":161},[102,63748,441],{"class":108},[102,63750,1279],{"class":112},[102,63752,63753,63755,63757,63759,63761],{"class":104,"line":1738},[102,63754,54776],{"class":161},[102,63756,51428],{"class":112},[102,63758,1020],{"class":161},[102,63760,51483],{"class":108},[102,63762,1279],{"class":112},[102,63764,63765,63767,63769,63771,63773],{"class":104,"line":1743},[102,63766,57350],{"class":161},[102,63768,51428],{"class":112},[102,63770,1020],{"class":161},[102,63772,51483],{"class":108},[102,63774,1279],{"class":112},[102,63776,63777,63779,63781,63783],{"class":104,"line":1748},[102,63778,55000],{"class":161},[102,63780,51428],{"class":112},[102,63782,51468],{"class":161},[102,63784,1279],{"class":112},[102,63786,63787,63789,63791,63793],{"class":104,"line":1753},[102,63788,55011],{"class":161},[102,63790,51428],{"class":112},[102,63792,51659],{"class":161},[102,63794,1279],{"class":112},[102,63796,63797],{"class":104,"line":1767},[102,63798,2176],{"class":112},[102,63800,63801],{"class":104,"line":1772},[102,63802,2389],{"emptyLinePlaceholder":30},[102,63804,63805,63807,63810],{"class":104,"line":2566},[102,63806,63736],{"class":1952},[102,63808,63809],{"class":51291}," h3",[102,63811,15562],{"class":112},[102,63813,63814,63816,63818,63820,63822],{"class":104,"line":2580},[102,63815,54913],{"class":161},[102,63817,51428],{"class":112},[102,63819,913],{"class":161},[102,63821,51483],{"class":108},[102,63823,1279],{"class":112},[102,63825,63826,63828,63830,63833],{"class":104,"line":2588},[102,63827,62325],{"class":161},[102,63829,51428],{"class":112},[102,63831,63832],{"class":161},"normal",[102,63834,1279],{"class":112},[102,63836,63837,63839,63841,63843,63845],{"class":104,"line":2593},[102,63838,61991],{"class":161},[102,63840,51428],{"class":112},[102,63842,813],{"class":161},[102,63844,51483],{"class":108},[102,63846,1279],{"class":112},[102,63848,63849],{"class":104,"line":2599},[102,63850,2176],{"class":112},[102,63852,63853],{"class":104,"line":2605},[102,63854,2389],{"emptyLinePlaceholder":30},[102,63856,63857,63859,63861],{"class":104,"line":2610},[102,63858,63736],{"class":1952},[102,63860,61283],{"class":51291},[102,63862,15562],{"class":112},[102,63864,63865,63867,63869,63871],{"class":104,"line":7938},[102,63866,54723],{"class":161},[102,63868,51428],{"class":112},[102,63870,54728],{"class":161},[102,63872,1279],{"class":112},[102,63874,63875,63877,63879,63881],{"class":104,"line":7962},[102,63876,55000],{"class":161},[102,63878,51428],{"class":112},[102,63880,51468],{"class":161},[102,63882,1279],{"class":112},[102,63884,63885,63887,63889,63891],{"class":104,"line":7967},[102,63886,55011],{"class":161},[102,63888,51428],{"class":112},[102,63890,51571],{"class":161},[102,63892,1279],{"class":112},[102,63894,63895],{"class":104,"line":7973},[102,63896,2176],{"class":112},[102,63898,63899],{"class":104,"line":8000},[102,63900,2389],{"emptyLinePlaceholder":30},[102,63902,63903,63905,63907,63909],{"class":104,"line":8005},[102,63904,63736],{"class":1952},[102,63906,61283],{"class":51291},[102,63908,55066],{"class":51291},[102,63910,15562],{"class":112},[102,63912,63913,63915,63917,63919,63921,63923],{"class":104,"line":8011},[102,63914,54697],{"class":161},[102,63916,51428],{"class":112},[102,63918,304],{"class":161},[102,63920,8940],{"class":161},[102,63922,51483],{"class":108},[102,63924,1279],{"class":112},[102,63926,63927,63929,63931,63933,63935],{"class":104,"line":8023},[102,63928,54913],{"class":161},[102,63930,51428],{"class":112},[102,63932,662],{"class":161},[102,63934,51483],{"class":108},[102,63936,1279],{"class":112},[102,63938,63939],{"class":104,"line":8035},[102,63940,2176],{"class":112},[102,63942,63943],{"class":104,"line":8047},[102,63944,2389],{"emptyLinePlaceholder":30},[102,63946,63947,63949,63951,63953,63955],{"class":104,"line":9706},[102,63948,63736],{"class":1952},[102,63950,61283],{"class":51291},[102,63952,55066],{"class":51291},[102,63954,1387],{"class":51291},[102,63956,15562],{"class":112},[102,63958,63959,63962,63964,63966],{"class":104,"line":9731},[102,63960,63961],{"class":161},"      text-decoration",[102,63963,51428],{"class":112},[102,63965,54728],{"class":161},[102,63967,1279],{"class":112},[102,63969,63970,63972,63974,63976,63978,63980,63983],{"class":104,"line":9754},[102,63971,62223],{"class":161},[102,63973,51428],{"class":112},[102,63975,190],{"class":161},[102,63977,51483],{"class":108},[102,63979,51512],{"class":161},[102,63981,63982],{"class":161}," transparent",[102,63984,1279],{"class":112},[102,63986,63987,63989,63991,63993],{"class":104,"line":9778},[102,63988,57407],{"class":161},[102,63990,51428],{"class":112},[102,63992,62360],{"class":161},[102,63994,1279],{"class":112},[102,63996,63997],{"class":104,"line":9783},[102,63998,2176],{"class":112},[102,64000,64001],{"class":104,"line":9788},[102,64002,2389],{"emptyLinePlaceholder":30},[102,64004,64005,64007,64009,64011,64013,64016],{"class":104,"line":9793},[102,64006,63736],{"class":1952},[102,64008,61283],{"class":51291},[102,64010,55066],{"class":51291},[102,64012,1387],{"class":51291},[102,64014,64015],{"class":1952},".active",[102,64017,15562],{"class":112},[102,64019,64020,64022,64024,64027],{"class":104,"line":9802},[102,64021,61782],{"class":161},[102,64023,51428],{"class":112},[102,64025,64026],{"class":161},"#e1251b",[102,64028,1279],{"class":112},[102,64030,64031,64033,64035,64037],{"class":104,"line":9807},[102,64032,57407],{"class":161},[102,64034,51428],{"class":112},[102,64036,64026],{"class":161},[102,64038,1279],{"class":112},[102,64040,64041],{"class":104,"line":9813},[102,64042,2176],{"class":112},[102,64044,64045],{"class":104,"line":9834},[102,64046,2389],{"emptyLinePlaceholder":30},[102,64048,64049,64052],{"class":104,"line":9840},[102,64050,64051],{"class":1952},"    .tab-content",[102,64053,15562],{"class":112},[102,64055,64056,64058,64060,64062,64065,64067],{"class":104,"line":9854},[102,64057,54686],{"class":161},[102,64059,51428],{"class":112},[102,64061,304],{"class":161},[102,64063,64064],{"class":161}," 16",[102,64066,51483],{"class":108},[102,64068,1279],{"class":112},[102,64070,64071],{"class":104,"line":9860},[102,64072,2176],{"class":112},[102,64074,64075],{"class":104,"line":9887},[102,64076,2389],{"emptyLinePlaceholder":30},[102,64078,64079,64081,64083],{"class":104,"line":9896},[102,64080,64051],{"class":1952},[102,64082,62165],{"class":1952},[102,64084,15562],{"class":112},[102,64086,64087,64089,64091,64093],{"class":104,"line":9902},[102,64088,55000],{"class":161},[102,64090,51428],{"class":112},[102,64092,54728],{"class":161},[102,64094,1279],{"class":112},[102,64096,64097],{"class":104,"line":9910},[102,64098,2176],{"class":112},[102,64100,64101],{"class":104,"line":9915},[102,64102,2389],{"emptyLinePlaceholder":30},[102,64104,64105,64107,64110],{"class":104,"line":16594},[102,64106,64051],{"class":1952},[102,64108,64109],{"class":1952}," .item.active",[102,64111,15562],{"class":112},[102,64113,64114,64116,64118,64120],{"class":104,"line":16600},[102,64115,55000],{"class":161},[102,64117,51428],{"class":112},[102,64119,60860],{"class":161},[102,64121,1279],{"class":112},[102,64123,64124],{"class":104,"line":16623},[102,64125,2176],{"class":112},[102,64127,64128,64130,64132],{"class":104,"line":16629},[102,64129,52408],{"class":112},[102,64131,5116],{"class":51291},[102,64133,51298],{"class":112},[102,64135,64136,64138,64140],{"class":104,"line":16652},[102,64137,51776],{"class":112},[102,64139,51325],{"class":51291},[102,64141,51298],{"class":112},[102,64143,64144],{"class":104,"line":16666},[102,64145,2389],{"emptyLinePlaceholder":30},[102,64147,64148,64150,64152],{"class":104,"line":16686},[102,64149,1023],{"class":112},[102,64151,51791],{"class":51291},[102,64153,51298],{"class":112},[102,64155,64156,64158,64160,64162,64164,64167],{"class":104,"line":16692},[102,64157,52135],{"class":112},[102,64159,51602],{"class":51291},[102,64161,53477],{"class":1952},[102,64163,158],{"class":112},[102,64165,64166],{"class":217},"\"tab\"",[102,64168,51298],{"class":112},[102,64170,64171,64173,64175,64177,64179,64182],{"class":104,"line":16703},[102,64172,51332],{"class":112},[102,64174,51602],{"class":51291},[102,64176,53477],{"class":1952},[102,64178,158],{"class":112},[102,64180,64181],{"class":217},"\"tab-nav\"",[102,64183,51298],{"class":112},[102,64185,64186,64188,64190,64193,64195],{"class":104,"line":16726},[102,64187,55225],{"class":112},[102,64189,73],{"class":51291},[102,64191,64192],{"class":112},">每日特价\u003C\u002F",[102,64194,73],{"class":51291},[102,64196,51298],{"class":112},[102,64198,64199,64201,64203],{"class":104,"line":16748},[102,64200,55225],{"class":112},[102,64202,1120],{"class":51291},[102,64204,51298],{"class":112},[102,64206,64207,64209,64211,64213,64215,64217,64219,64221,64223,64225,64228,64231,64233,64235,64237],{"class":104,"line":16753},[102,64208,55293],{"class":112},[102,64210,59],{"class":51291},[102,64212,61043],{"class":112},[102,64214,351],{"class":51291},[102,64216,53477],{"class":1952},[102,64218,158],{"class":112},[102,64220,59697],{"class":217},[102,64222,61048],{"class":1952},[102,64224,158],{"class":112},[102,64226,64227],{"class":217},"\"javascript:;\"",[102,64229,64230],{"class":112},">精选\u003C\u002F",[102,64232,351],{"class":51291},[102,64234,55305],{"class":112},[102,64236,59],{"class":51291},[102,64238,51298],{"class":112},[102,64240,64241,64243,64245,64247,64249,64251,64253,64255,64258,64260,64262,64264],{"class":104,"line":16759},[102,64242,55293],{"class":112},[102,64244,59],{"class":51291},[102,64246,61043],{"class":112},[102,64248,351],{"class":51291},[102,64250,61048],{"class":1952},[102,64252,158],{"class":112},[102,64254,64227],{"class":217},[102,64256,64257],{"class":112},">美食\u003C\u002F",[102,64259,351],{"class":51291},[102,64261,55305],{"class":112},[102,64263,59],{"class":51291},[102,64265,51298],{"class":112},[102,64267,64268,64270,64272,64274,64276,64278,64280,64282,64285,64287,64289,64291],{"class":104,"line":16773},[102,64269,55293],{"class":112},[102,64271,59],{"class":51291},[102,64273,61043],{"class":112},[102,64275,351],{"class":51291},[102,64277,61048],{"class":1952},[102,64279,158],{"class":112},[102,64281,64227],{"class":217},[102,64283,64284],{"class":112},">百货\u003C\u002F",[102,64286,351],{"class":51291},[102,64288,55305],{"class":112},[102,64290,59],{"class":51291},[102,64292,51298],{"class":112},[102,64294,64295,64297,64299,64301,64303,64305,64307,64309,64312,64314,64316,64318],{"class":104,"line":16786},[102,64296,55293],{"class":112},[102,64298,59],{"class":51291},[102,64300,61043],{"class":112},[102,64302,351],{"class":51291},[102,64304,61048],{"class":1952},[102,64306,158],{"class":112},[102,64308,64227],{"class":217},[102,64310,64311],{"class":112},">个护\u003C\u002F",[102,64313,351],{"class":51291},[102,64315,55305],{"class":112},[102,64317,59],{"class":51291},[102,64319,51298],{"class":112},[102,64321,64322,64324,64326,64328,64330,64332,64334,64336,64339,64341,64343,64345],{"class":104,"line":16791},[102,64323,55293],{"class":112},[102,64325,59],{"class":51291},[102,64327,61043],{"class":112},[102,64329,351],{"class":51291},[102,64331,61048],{"class":1952},[102,64333,158],{"class":112},[102,64335,64227],{"class":217},[102,64337,64338],{"class":112},">预告\u003C\u002F",[102,64340,351],{"class":51291},[102,64342,55305],{"class":112},[102,64344,59],{"class":51291},[102,64346,51298],{"class":112},[102,64348,64349,64351,64353],{"class":104,"line":16805},[102,64350,55398],{"class":112},[102,64352,1120],{"class":51291},[102,64354,51298],{"class":112},[102,64356,64357,64359,64361],{"class":104,"line":16810},[102,64358,51767],{"class":112},[102,64360,51602],{"class":51291},[102,64362,51298],{"class":112},[102,64364,64365,64367,64369,64371,64373,64376],{"class":104,"line":16816},[102,64366,51332],{"class":112},[102,64368,51602],{"class":51291},[102,64370,53477],{"class":1952},[102,64372,158],{"class":112},[102,64374,64375],{"class":217},"\"tab-content\"",[102,64377,51298],{"class":112},[102,64379,64380,64382,64384,64386,64388,64391,64393,64395,64397,64399,64402,64404,64406,64408,64411,64413],{"class":104,"line":16821},[102,64381,55225],{"class":112},[102,64383,51602],{"class":51291},[102,64385,53477],{"class":1952},[102,64387,158],{"class":112},[102,64389,64390],{"class":217},"\"item active\"",[102,64392,61043],{"class":112},[102,64394,1451],{"class":51291},[102,64396,55230],{"class":1952},[102,64398,158],{"class":112},[102,64400,64401],{"class":217},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[102,64403,55238],{"class":1952},[102,64405,158],{"class":112},[102,64407,7642],{"class":217},[102,64409,64410],{"class":112}," \u002F>\u003C\u002F",[102,64412,51602],{"class":51291},[102,64414,51298],{"class":112},[102,64416,64417,64419,64421,64423,64425,64427,64429,64431,64433,64435,64438,64440,64442,64444,64446,64448],{"class":104,"line":16835},[102,64418,55225],{"class":112},[102,64420,51602],{"class":51291},[102,64422,53477],{"class":1952},[102,64424,158],{"class":112},[102,64426,62614],{"class":217},[102,64428,61043],{"class":112},[102,64430,1451],{"class":51291},[102,64432,55230],{"class":1952},[102,64434,158],{"class":112},[102,64436,64437],{"class":217},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[102,64439,55238],{"class":1952},[102,64441,158],{"class":112},[102,64443,7642],{"class":217},[102,64445,64410],{"class":112},[102,64447,51602],{"class":51291},[102,64449,51298],{"class":112},[102,64451,64452,64454,64456,64458,64460,64462,64464,64466,64468,64470,64473,64475,64477,64479,64481,64483],{"class":104,"line":16840},[102,64453,55225],{"class":112},[102,64455,51602],{"class":51291},[102,64457,53477],{"class":1952},[102,64459,158],{"class":112},[102,64461,62614],{"class":217},[102,64463,61043],{"class":112},[102,64465,1451],{"class":51291},[102,64467,55230],{"class":1952},[102,64469,158],{"class":112},[102,64471,64472],{"class":217},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[102,64474,55238],{"class":1952},[102,64476,158],{"class":112},[102,64478,7642],{"class":217},[102,64480,64410],{"class":112},[102,64482,51602],{"class":51291},[102,64484,51298],{"class":112},[102,64486,64487,64489,64491,64493,64495,64497,64499,64501,64503,64505,64508,64510,64512,64514,64516,64518],{"class":104,"line":16845},[102,64488,55225],{"class":112},[102,64490,51602],{"class":51291},[102,64492,53477],{"class":1952},[102,64494,158],{"class":112},[102,64496,62614],{"class":217},[102,64498,61043],{"class":112},[102,64500,1451],{"class":51291},[102,64502,55230],{"class":1952},[102,64504,158],{"class":112},[102,64506,64507],{"class":217},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[102,64509,55238],{"class":1952},[102,64511,158],{"class":112},[102,64513,7642],{"class":217},[102,64515,64410],{"class":112},[102,64517,51602],{"class":51291},[102,64519,51298],{"class":112},[102,64521,64522,64524,64526,64528,64530,64532,64534,64536,64538,64540,64543,64545,64547,64549,64551,64553],{"class":104,"line":16859},[102,64523,55225],{"class":112},[102,64525,51602],{"class":51291},[102,64527,53477],{"class":1952},[102,64529,158],{"class":112},[102,64531,62614],{"class":217},[102,64533,61043],{"class":112},[102,64535,1451],{"class":51291},[102,64537,55230],{"class":1952},[102,64539,158],{"class":112},[102,64541,64542],{"class":217},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[102,64544,55238],{"class":1952},[102,64546,158],{"class":112},[102,64548,7642],{"class":217},[102,64550,64410],{"class":112},[102,64552,51602],{"class":51291},[102,64554,51298],{"class":112},[102,64556,64557,64559,64561],{"class":104,"line":16871},[102,64558,51767],{"class":112},[102,64560,51602],{"class":51291},[102,64562,51298],{"class":112},[102,64564,64565,64567,64569],{"class":104,"line":16876},[102,64566,52408],{"class":112},[102,64568,51602],{"class":51291},[102,64570,51298],{"class":112},[102,64572,64573,64575,64577],{"class":104,"line":16889},[102,64574,52135],{"class":112},[102,64576,51804],{"class":51291},[102,64578,51298],{"class":112},[102,64580,64581],{"class":104,"line":16894},[102,64582,64583],{"class":171},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[102,64585,64586],{"class":104,"line":16899},[102,64587,64588],{"class":171},"    \u002F\u002F 1.1 获取 a 元素 \n",[102,64590,64591,64593,64596,64598,64600,64602,64604,64607],{"class":104,"line":16904},[102,64592,11211],{"class":108},[102,64594,64595],{"class":161}," as",[102,64597,13554],{"class":108},[102,64599,54387],{"class":112},[102,64601,55672],{"class":1952},[102,64603,113],{"class":112},[102,64605,64606],{"class":217},"'.tab-nav a'",[102,64608,119],{"class":112},[102,64610,64611],{"class":104,"line":16917},[102,64612,64613],{"class":171},"    \u002F\u002F console.log(as) \n",[102,64615,64616,64618,64620,64622,64624,64626,64628,64630,64632,64635,64637,64639,64641],{"class":104,"line":16922},[102,64617,3190],{"class":108},[102,64619,1647],{"class":112},[102,64621,51838],{"class":108},[102,64623,9428],{"class":112},[102,64625,158],{"class":108},[102,64627,4082],{"class":161},[102,64629,9435],{"class":112},[102,64631,1023],{"class":108},[102,64633,64634],{"class":112}," as.",[102,64636,51959],{"class":161},[102,64638,3203],{"class":112},[102,64640,2281],{"class":108},[102,64642,12432],{"class":112},[102,64644,64645],{"class":104,"line":32624},[102,64646,64647],{"class":171},"      \u002F\u002F console.log(as[i])\n",[102,64649,64650],{"class":104,"line":32630},[102,64651,64652],{"class":171},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[102,64654,64655,64658,64660,64662,64665,64667,64669],{"class":104,"line":32636},[102,64656,64657],{"class":112},"      as[i].",[102,64659,57804],{"class":1952},[102,64661,113],{"class":112},[102,64663,64664],{"class":217},"'mouseenter'",[102,64666,12425],{"class":112},[102,64668,54440],{"class":108},[102,64670,54443],{"class":112},[102,64672,64673],{"class":104,"line":32642},[102,64674,64675],{"class":171},"        \u002F\u002F console.log('鼠标经过')\n",[102,64677,64678],{"class":104,"line":32648},[102,64679,64680],{"class":171},"        \u002F\u002F 排他思想  \n",[102,64682,64683],{"class":104,"line":32659},[102,64684,64685],{"class":171},"        \u002F\u002F 干掉别人 移除类active\n",[102,64687,64688,64690,64692,64694,64697,64699,64701,64703,64706],{"class":104,"line":32665},[102,64689,51916],{"class":112},[102,64691,54390],{"class":1952},[102,64693,113],{"class":112},[102,64695,64696],{"class":217},"'.tab-nav .active'",[102,64698,56994],{"class":112},[102,64700,56997],{"class":1952},[102,64702,113],{"class":112},[102,64704,64705],{"class":217},"'active'",[102,64707,119],{"class":112},[102,64709,64710],{"class":104,"line":32685},[102,64711,64712],{"class":171},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[102,64714,64715,64718,64721,64723,64725,64727],{"class":104,"line":32691},[102,64716,64717],{"class":161},"        this",[102,64719,64720],{"class":112},".classList.",[102,64722,5324],{"class":1952},[102,64724,113],{"class":112},[102,64726,64705],{"class":217},[102,64728,119],{"class":112},[102,64730,64731],{"class":104,"line":32702},[102,64732,2389],{"emptyLinePlaceholder":30},[102,64734,64735],{"class":104,"line":32708},[102,64736,64737],{"class":171},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[102,64739,64740],{"class":104,"line":32714},[102,64741,64742],{"class":171},"        \u002F\u002F 干掉别人\n",[102,64744,64745,64747,64749,64751,64754,64756,64758,64760,64762],{"class":104,"line":32720},[102,64746,51916],{"class":112},[102,64748,54390],{"class":1952},[102,64750,113],{"class":112},[102,64752,64753],{"class":217},"'.tab-content .active'",[102,64755,56994],{"class":112},[102,64757,56997],{"class":1952},[102,64759,113],{"class":112},[102,64761,64705],{"class":217},[102,64763,119],{"class":112},[102,64765,64766],{"class":104,"line":32726},[102,64767,64768],{"class":171},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[102,64770,64771,64773,64775,64777,64780,64782,64784,64786,64788,64790,64792,64794,64796],{"class":104,"line":32732},[102,64772,51916],{"class":112},[102,64774,54390],{"class":1952},[102,64776,113],{"class":112},[102,64778,64779],{"class":217},"`.tab-content .item:nth-child(${",[102,64781,554],{"class":112},[102,64783,45557],{"class":108},[102,64785,25109],{"class":161},[102,64787,57023],{"class":217},[102,64789,56994],{"class":112},[102,64791,5324],{"class":1952},[102,64793,113],{"class":112},[102,64795,64705],{"class":217},[102,64797,119],{"class":112},[102,64799,64800],{"class":104,"line":32738},[102,64801,2389],{"emptyLinePlaceholder":30},[102,64803,64804],{"class":104,"line":32744},[102,64805,64806],{"class":112},"      })\n",[102,64808,64809],{"class":104,"line":32764},[102,64810,2176],{"class":112},[102,64812,64813,64815,64817],{"class":104,"line":32770},[102,64814,52408],{"class":112},[102,64816,51804],{"class":51291},[102,64818,51298],{"class":112},[102,64820,64821,64823,64825],{"class":104,"line":32786},[102,64822,51776],{"class":112},[102,64824,51791],{"class":51291},[102,64826,51298],{"class":112},[102,64828,64829],{"class":104,"line":32792},[102,64830,2389],{"emptyLinePlaceholder":30},[102,64832,64833,64835,64837],{"class":104,"line":32806},[102,64834,51776],{"class":112},[102,64836,50626],{"class":51291},[102,64838,51298],{"class":112},[19,64840,64841],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,64843,64844],{},"在监听事件中，this指向的就是他的调用者",[19,64846,64847],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,64849,53711],{},[19,64851,64852],{},"(function () {",[19,64854,64855],{},"const list = document.querySelector('.xtx-elevator-list')",[19,64857,64858],{},"list.addEventListener('click', function (e) {",[19,64860,64861],{},"if (e.target.tagName === 'A') {",[19,64863,64864],{},"\u002F\u002F 排他思想",[19,64866,64867],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,64869,64870],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,64872,64873],{},"\u002F\u002F console.log(old);",[19,64875,64876],{},"\u002F\u002F 判断",[19,64878,64879],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,64881,64882],{},"if (old) old.classList.remove('active')",[19,64884,64885],{},"e.target.classList.add('active')",[19,64887,1059],{},[19,64889,52455],{},[19,64891,64892],{},"})();",[73,64894,64896],{"id":64895},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[93,64898,64900],{"className":50624,"code":64899,"language":50626,"meta":23,"style":23},"\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",[99,64901,64902,64912,64916,64924,64928,64942,64956,64968,64976,64982,64992,65002,65006,65010,65017,65029,65040,65057,65070,65084,65094,65098,65102,65109,65120,65138,65148,65160,65164,65168,65175,65192,65203,65215,65219,65223,65230,65242,65246,65254,65262,65266,65274,65282,65290,65305,65349,65357,65370,65383,65396,65404,65412,65420,65448,65456,65468,65481,65494,65502,65510,65518,65544,65552,65565,65577,65590,65598,65606,65614,65640,65648,65661,65673,65686,65694,65702,65710,65715,65735,65740,65760,65765,65782,65787,65795,65800,65829,65842,65846,65850,65855,65859,65887,65892,65909,65914,65919,65924,65929,65955,65959,65963,65971,65979,65983],{"__ignoreMap":23},[102,64903,64904,64906,64908,64910],{"class":104,"line":105},[102,64905,51288],{"class":112},[102,64907,51292],{"class":51291},[102,64909,51295],{"class":1952},[102,64911,51298],{"class":112},[102,64913,64914],{"class":104,"line":24},[102,64915,2389],{"emptyLinePlaceholder":30},[102,64917,64918,64920,64922],{"class":104,"line":1168},[102,64919,1023],{"class":112},[102,64921,50626],{"class":51291},[102,64923,51298],{"class":112},[102,64925,64926],{"class":104,"line":1183},[102,64927,2389],{"emptyLinePlaceholder":30},[102,64929,64930,64932,64934,64936,64938,64940],{"class":104,"line":1189},[102,64931,1023],{"class":112},[102,64933,51325],{"class":51291},[102,64935,51307],{"class":1952},[102,64937,158],{"class":112},[102,64939,51312],{"class":217},[102,64941,51298],{"class":112},[102,64943,64944,64946,64948,64950,64952,64954],{"class":104,"line":1203},[102,64945,52135],{"class":112},[102,64947,51335],{"class":51291},[102,64949,51338],{"class":1952},[102,64951,158],{"class":112},[102,64953,51343],{"class":217},[102,64955,51298],{"class":112},[102,64957,64958,64960,64962,64964,64966],{"class":104,"line":1209},[102,64959,52135],{"class":112},[102,64961,51398],{"class":51291},[102,64963,55305],{"class":112},[102,64965,51398],{"class":51291},[102,64967,51298],{"class":112},[102,64969,64970,64972,64974],{"class":104,"line":1300},[102,64971,52135],{"class":112},[102,64973,5116],{"class":51291},[102,64975,51298],{"class":112},[102,64977,64978,64980],{"class":104,"line":1306},[102,64979,6393],{"class":51291},[102,64981,15562],{"class":112},[102,64983,64984,64986,64988,64990],{"class":104,"line":1318},[102,64985,54697],{"class":161},[102,64987,51428],{"class":112},[102,64989,304],{"class":161},[102,64991,1279],{"class":112},[102,64993,64994,64996,64998,65000],{"class":104,"line":1601},[102,64995,54686],{"class":161},[102,64997,51428],{"class":112},[102,64999,304],{"class":161},[102,65001,1279],{"class":112},[102,65003,65004],{"class":104,"line":1606},[102,65005,2176],{"class":112},[102,65007,65008],{"class":104,"line":1612},[102,65009,2389],{"emptyLinePlaceholder":30},[102,65011,65012,65015],{"class":104,"line":1617},[102,65013,65014],{"class":51291},"    table",[102,65016,15562],{"class":112},[102,65018,65019,65022,65024,65027],{"class":104,"line":1631},[102,65020,65021],{"class":161},"      border-collapse",[102,65023,51428],{"class":112},[102,65025,65026],{"class":161},"collapse",[102,65028,1279],{"class":112},[102,65030,65031,65034,65036,65038],{"class":104,"line":1636},[102,65032,65033],{"class":161},"      border-spacing",[102,65035,51428],{"class":112},[102,65037,304],{"class":161},[102,65039,1279],{"class":112},[102,65041,65042,65044,65046,65048,65050,65052,65055],{"class":104,"line":1642},[102,65043,61968],{"class":161},[102,65045,51428],{"class":112},[102,65047,330],{"class":161},[102,65049,51483],{"class":108},[102,65051,51512],{"class":161},[102,65053,65054],{"class":161}," #c0c0c0",[102,65056,1279],{"class":112},[102,65058,65059,65061,65063,65066,65068],{"class":104,"line":1663},[102,65060,54762],{"class":161},[102,65062,51428],{"class":112},[102,65064,65065],{"class":161},"500",[102,65067,51483],{"class":108},[102,65069,1279],{"class":112},[102,65071,65072,65074,65076,65078,65080,65082],{"class":104,"line":1668},[102,65073,54697],{"class":161},[102,65075,51428],{"class":112},[102,65077,424],{"class":161},[102,65079,51483],{"class":108},[102,65081,51547],{"class":161},[102,65083,1279],{"class":112},[102,65085,65086,65088,65090,65092],{"class":104,"line":1682},[102,65087,57277],{"class":161},[102,65089,51428],{"class":112},[102,65091,51583],{"class":161},[102,65093,1279],{"class":112},[102,65095,65096],{"class":104,"line":1687},[102,65097,2176],{"class":112},[102,65099,65100],{"class":104,"line":1716},[102,65101,2389],{"emptyLinePlaceholder":30},[102,65103,65104,65107],{"class":104,"line":1721},[102,65105,65106],{"class":51291},"    th",[102,65108,15562],{"class":112},[102,65110,65111,65113,65115,65118],{"class":104,"line":1738},[102,65112,54875],{"class":161},[102,65114,51428],{"class":112},[102,65116,65117],{"class":161},"#09c",[102,65119,1279],{"class":112},[102,65121,65122,65125,65127,65129,65131,65133,65136],{"class":104,"line":1743},[102,65123,65124],{"class":161},"      font",[102,65126,51428],{"class":112},[102,65128,62330],{"class":161},[102,65130,64064],{"class":161},[102,65132,51483],{"class":108},[102,65134,65135],{"class":217}," \"微软雅黑\"",[102,65137,1279],{"class":112},[102,65139,65140,65142,65144,65146],{"class":104,"line":1748},[102,65141,57407],{"class":161},[102,65143,51428],{"class":112},[102,65145,60833],{"class":161},[102,65147,1279],{"class":112},[102,65149,65150,65152,65154,65156,65158],{"class":104,"line":1753},[102,65151,54776],{"class":161},[102,65153,51428],{"class":112},[102,65155,913],{"class":161},[102,65157,51483],{"class":108},[102,65159,1279],{"class":112},[102,65161,65162],{"class":104,"line":1767},[102,65163,2176],{"class":112},[102,65165,65166],{"class":104,"line":1772},[102,65167,2389],{"emptyLinePlaceholder":30},[102,65169,65170,65173],{"class":104,"line":2566},[102,65171,65172],{"class":51291},"    td",[102,65174,15562],{"class":112},[102,65176,65177,65179,65181,65183,65185,65187,65190],{"class":104,"line":2580},[102,65178,61968],{"class":161},[102,65180,51428],{"class":112},[102,65182,330],{"class":161},[102,65184,51483],{"class":108},[102,65186,51512],{"class":161},[102,65188,65189],{"class":161}," #d0d0d0",[102,65191,1279],{"class":112},[102,65193,65194,65196,65198,65201],{"class":104,"line":2588},[102,65195,57407],{"class":161},[102,65197,51428],{"class":112},[102,65199,65200],{"class":161},"#404060",[102,65202,1279],{"class":112},[102,65204,65205,65207,65209,65211,65213],{"class":104,"line":2593},[102,65206,54686],{"class":161},[102,65208,51428],{"class":112},[102,65210,559],{"class":161},[102,65212,51483],{"class":108},[102,65214,1279],{"class":112},[102,65216,65217],{"class":104,"line":2599},[102,65218,2176],{"class":112},[102,65220,65221],{"class":104,"line":2605},[102,65222,2389],{"emptyLinePlaceholder":30},[102,65224,65225,65228],{"class":104,"line":2610},[102,65226,65227],{"class":1952},"    .allCheck",[102,65229,15562],{"class":112},[102,65231,65232,65234,65236,65238,65240],{"class":104,"line":7938},[102,65233,54762],{"class":161},[102,65235,51428],{"class":112},[102,65237,725],{"class":161},[102,65239,51483],{"class":108},[102,65241,1279],{"class":112},[102,65243,65244],{"class":104,"line":7962},[102,65245,2176],{"class":112},[102,65247,65248,65250,65252],{"class":104,"line":7967},[102,65249,52408],{"class":112},[102,65251,5116],{"class":51291},[102,65253,51298],{"class":112},[102,65255,65256,65258,65260],{"class":104,"line":7973},[102,65257,51776],{"class":112},[102,65259,51325],{"class":51291},[102,65261,51298],{"class":112},[102,65263,65264],{"class":104,"line":8000},[102,65265,2389],{"emptyLinePlaceholder":30},[102,65267,65268,65270,65272],{"class":104,"line":8005},[102,65269,1023],{"class":112},[102,65271,51791],{"class":51291},[102,65273,51298],{"class":112},[102,65275,65276,65278,65280],{"class":104,"line":8011},[102,65277,52135],{"class":112},[102,65279,250],{"class":51291},[102,65281,51298],{"class":112},[102,65283,65284,65286,65288],{"class":104,"line":8023},[102,65285,51332],{"class":112},[102,65287,256],{"class":51291},[102,65289,51298],{"class":112},[102,65291,65292,65294,65296,65298,65300,65303],{"class":104,"line":8035},[102,65293,55225],{"class":112},[102,65295,259],{"class":51291},[102,65297,53477],{"class":1952},[102,65299,158],{"class":112},[102,65301,65302],{"class":217},"\"allCheck\"",[102,65304,51298],{"class":112},[102,65306,65307,65309,65311,65313,65315,65317,65319,65321,65323,65325,65327,65330,65333,65335,65337,65339,65342,65345,65347],{"class":104,"line":8047},[102,65308,55293],{"class":112},[102,65310,53812],{"class":51291},[102,65312,53815],{"class":1952},[102,65314,158],{"class":112},[102,65316,53820],{"class":217},[102,65318,14910],{"class":1952},[102,65320,158],{"class":112},[102,65322,7642],{"class":217},[102,65324,14949],{"class":1952},[102,65326,158],{"class":112},[102,65328,65329],{"class":217},"\"checkAll\"",[102,65331,65332],{"class":112},"> \u003C",[102,65334,102],{"class":51291},[102,65336,53477],{"class":1952},[102,65338,158],{"class":112},[102,65340,65341],{"class":217},"\"all\"",[102,65343,65344],{"class":112},">全选\u003C\u002F",[102,65346,102],{"class":51291},[102,65348,51298],{"class":112},[102,65350,65351,65353,65355],{"class":104,"line":9706},[102,65352,55398],{"class":112},[102,65354,259],{"class":51291},[102,65356,51298],{"class":112},[102,65358,65359,65361,65363,65366,65368],{"class":104,"line":9731},[102,65360,55225],{"class":112},[102,65362,259],{"class":51291},[102,65364,65365],{"class":112},">商品\u003C\u002F",[102,65367,259],{"class":51291},[102,65369,51298],{"class":112},[102,65371,65372,65374,65376,65379,65381],{"class":104,"line":9754},[102,65373,55225],{"class":112},[102,65375,259],{"class":51291},[102,65377,65378],{"class":112},">商家\u003C\u002F",[102,65380,259],{"class":51291},[102,65382,51298],{"class":112},[102,65384,65385,65387,65389,65392,65394],{"class":104,"line":9778},[102,65386,55225],{"class":112},[102,65388,259],{"class":51291},[102,65390,65391],{"class":112},">价格\u003C\u002F",[102,65393,259],{"class":51291},[102,65395,51298],{"class":112},[102,65397,65398,65400,65402],{"class":104,"line":9783},[102,65399,51767],{"class":112},[102,65401,256],{"class":51291},[102,65403,51298],{"class":112},[102,65405,65406,65408,65410],{"class":104,"line":9788},[102,65407,51332],{"class":112},[102,65409,256],{"class":51291},[102,65411,51298],{"class":112},[102,65413,65414,65416,65418],{"class":104,"line":9793},[102,65415,55225],{"class":112},[102,65417,302],{"class":51291},[102,65419,51298],{"class":112},[102,65421,65422,65424,65426,65428,65430,65432,65434,65436,65439,65441,65443,65446],{"class":104,"line":9802},[102,65423,55293],{"class":112},[102,65425,53812],{"class":51291},[102,65427,53815],{"class":1952},[102,65429,158],{"class":112},[102,65431,53820],{"class":217},[102,65433,14910],{"class":1952},[102,65435,158],{"class":112},[102,65437,65438],{"class":217},"\"check\"",[102,65440,53477],{"class":1952},[102,65442,158],{"class":112},[102,65444,65445],{"class":217},"\"ck\"",[102,65447,51298],{"class":112},[102,65449,65450,65452,65454],{"class":104,"line":9807},[102,65451,55398],{"class":112},[102,65453,302],{"class":51291},[102,65455,51298],{"class":112},[102,65457,65458,65460,65462,65464,65466],{"class":104,"line":9813},[102,65459,55225],{"class":112},[102,65461,302],{"class":51291},[102,65463,61164],{"class":112},[102,65465,302],{"class":51291},[102,65467,51298],{"class":112},[102,65469,65470,65472,65474,65477,65479],{"class":104,"line":9834},[102,65471,55225],{"class":112},[102,65473,302],{"class":51291},[102,65475,65476],{"class":112},">小米\u003C\u002F",[102,65478,302],{"class":51291},[102,65480,51298],{"class":112},[102,65482,65483,65485,65487,65490,65492],{"class":104,"line":9840},[102,65484,55225],{"class":112},[102,65486,302],{"class":51291},[102,65488,65489],{"class":112},">￥1999\u003C\u002F",[102,65491,302],{"class":51291},[102,65493,51298],{"class":112},[102,65495,65496,65498,65500],{"class":104,"line":9854},[102,65497,51767],{"class":112},[102,65499,256],{"class":51291},[102,65501,51298],{"class":112},[102,65503,65504,65506,65508],{"class":104,"line":9860},[102,65505,51332],{"class":112},[102,65507,256],{"class":51291},[102,65509,51298],{"class":112},[102,65511,65512,65514,65516],{"class":104,"line":9887},[102,65513,55225],{"class":112},[102,65515,302],{"class":51291},[102,65517,51298],{"class":112},[102,65519,65520,65522,65524,65526,65528,65530,65532,65534,65536,65538,65540,65542],{"class":104,"line":9896},[102,65521,55293],{"class":112},[102,65523,53812],{"class":51291},[102,65525,53815],{"class":1952},[102,65527,158],{"class":112},[102,65529,53820],{"class":217},[102,65531,14910],{"class":1952},[102,65533,158],{"class":112},[102,65535,65438],{"class":217},[102,65537,53477],{"class":1952},[102,65539,158],{"class":112},[102,65541,65445],{"class":217},[102,65543,51298],{"class":112},[102,65545,65546,65548,65550],{"class":104,"line":9902},[102,65547,55398],{"class":112},[102,65549,302],{"class":51291},[102,65551,51298],{"class":112},[102,65553,65554,65556,65558,65561,65563],{"class":104,"line":9910},[102,65555,55225],{"class":112},[102,65557,302],{"class":51291},[102,65559,65560],{"class":112},">小米净水器\u003C\u002F",[102,65562,302],{"class":51291},[102,65564,51298],{"class":112},[102,65566,65567,65569,65571,65573,65575],{"class":104,"line":9915},[102,65568,55225],{"class":112},[102,65570,302],{"class":51291},[102,65572,65476],{"class":112},[102,65574,302],{"class":51291},[102,65576,51298],{"class":112},[102,65578,65579,65581,65583,65586,65588],{"class":104,"line":16594},[102,65580,55225],{"class":112},[102,65582,302],{"class":51291},[102,65584,65585],{"class":112},">￥4999\u003C\u002F",[102,65587,302],{"class":51291},[102,65589,51298],{"class":112},[102,65591,65592,65594,65596],{"class":104,"line":16600},[102,65593,51767],{"class":112},[102,65595,256],{"class":51291},[102,65597,51298],{"class":112},[102,65599,65600,65602,65604],{"class":104,"line":16623},[102,65601,51332],{"class":112},[102,65603,256],{"class":51291},[102,65605,51298],{"class":112},[102,65607,65608,65610,65612],{"class":104,"line":16629},[102,65609,55225],{"class":112},[102,65611,302],{"class":51291},[102,65613,51298],{"class":112},[102,65615,65616,65618,65620,65622,65624,65626,65628,65630,65632,65634,65636,65638],{"class":104,"line":16652},[102,65617,55293],{"class":112},[102,65619,53812],{"class":51291},[102,65621,53815],{"class":1952},[102,65623,158],{"class":112},[102,65625,53820],{"class":217},[102,65627,14910],{"class":1952},[102,65629,158],{"class":112},[102,65631,65438],{"class":217},[102,65633,53477],{"class":1952},[102,65635,158],{"class":112},[102,65637,65445],{"class":217},[102,65639,51298],{"class":112},[102,65641,65642,65644,65646],{"class":104,"line":16666},[102,65643,55398],{"class":112},[102,65645,302],{"class":51291},[102,65647,51298],{"class":112},[102,65649,65650,65652,65654,65657,65659],{"class":104,"line":16686},[102,65651,55225],{"class":112},[102,65653,302],{"class":51291},[102,65655,65656],{"class":112},">小米电视\u003C\u002F",[102,65658,302],{"class":51291},[102,65660,51298],{"class":112},[102,65662,65663,65665,65667,65669,65671],{"class":104,"line":16692},[102,65664,55225],{"class":112},[102,65666,302],{"class":51291},[102,65668,65476],{"class":112},[102,65670,302],{"class":51291},[102,65672,51298],{"class":112},[102,65674,65675,65677,65679,65682,65684],{"class":104,"line":16703},[102,65676,55225],{"class":112},[102,65678,302],{"class":51291},[102,65680,65681],{"class":112},">￥5999\u003C\u002F",[102,65683,302],{"class":51291},[102,65685,51298],{"class":112},[102,65687,65688,65690,65692],{"class":104,"line":16726},[102,65689,51767],{"class":112},[102,65691,256],{"class":51291},[102,65693,51298],{"class":112},[102,65695,65696,65698,65700],{"class":104,"line":16748},[102,65697,52408],{"class":112},[102,65699,250],{"class":51291},[102,65701,51298],{"class":112},[102,65703,65704,65706,65708],{"class":104,"line":16753},[102,65705,52135],{"class":112},[102,65707,51804],{"class":51291},[102,65709,51298],{"class":112},[102,65711,65712],{"class":104,"line":16759},[102,65713,65714],{"class":171},"    \u002F\u002F 1. 获取大复选框\n",[102,65716,65717,65719,65722,65724,65726,65728,65730,65733],{"class":104,"line":16773},[102,65718,11211],{"class":108},[102,65720,65721],{"class":161}," checkAll",[102,65723,13554],{"class":108},[102,65725,54387],{"class":112},[102,65727,54390],{"class":1952},[102,65729,113],{"class":112},[102,65731,65732],{"class":217},"'#checkAll'",[102,65734,119],{"class":112},[102,65736,65737],{"class":104,"line":16786},[102,65738,65739],{"class":171},"    \u002F\u002F 2. 获取所有的小复选框\n",[102,65741,65742,65744,65747,65749,65751,65753,65755,65758],{"class":104,"line":16791},[102,65743,11211],{"class":108},[102,65745,65746],{"class":161}," cks",[102,65748,13554],{"class":108},[102,65750,54387],{"class":112},[102,65752,55672],{"class":1952},[102,65754,113],{"class":112},[102,65756,65757],{"class":217},"'.ck'",[102,65759,119],{"class":112},[102,65761,65762],{"class":104,"line":16805},[102,65763,65764],{"class":171},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[102,65766,65767,65770,65772,65774,65776,65778,65780],{"class":104,"line":16810},[102,65768,65769],{"class":112},"    checkAll.",[102,65771,57804],{"class":1952},[102,65773,113],{"class":112},[102,65775,57809],{"class":217},[102,65777,12425],{"class":112},[102,65779,54440],{"class":108},[102,65781,54443],{"class":112},[102,65783,65784],{"class":104,"line":16816},[102,65785,65786],{"class":171},"      \u002F\u002F 得到当前大复选框的选中状态\n",[102,65788,65789,65792],{"class":104,"line":16821},[102,65790,65791],{"class":171},"      \u002F\u002F console.log(checkAll.checked)",[102,65793,65794],{"class":171},"  \u002F\u002F 得到 是 true 或者是 false\n",[102,65796,65797],{"class":104,"line":16835},[102,65798,65799],{"class":171},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[102,65801,65802,65804,65806,65808,65810,65812,65814,65816,65818,65821,65823,65825,65827],{"class":104,"line":16840},[102,65803,52275],{"class":108},[102,65805,1647],{"class":112},[102,65807,51838],{"class":108},[102,65809,9428],{"class":112},[102,65811,158],{"class":108},[102,65813,4082],{"class":161},[102,65815,9435],{"class":112},[102,65817,1023],{"class":108},[102,65819,65820],{"class":112}," cks.",[102,65822,51959],{"class":161},[102,65824,3203],{"class":112},[102,65826,2281],{"class":108},[102,65828,12432],{"class":112},[102,65830,65831,65834,65836,65839],{"class":104,"line":16845},[102,65832,65833],{"class":112},"        cks[i].checked ",[102,65835,158],{"class":108},[102,65837,65838],{"class":161}," this",[102,65840,65841],{"class":112},".checked\n",[102,65843,65844],{"class":104,"line":16859},[102,65845,52389],{"class":112},[102,65847,65848],{"class":104,"line":16871},[102,65849,33452],{"class":112},[102,65851,65852],{"class":104,"line":16876},[102,65853,65854],{"class":171},"    \u002F\u002F 5. 小复选框控制大复选框\n",[102,65856,65857],{"class":104,"line":16889},[102,65858,2389],{"emptyLinePlaceholder":30},[102,65860,65861,65863,65865,65867,65869,65871,65873,65875,65877,65879,65881,65883,65885],{"class":104,"line":16894},[102,65862,3190],{"class":108},[102,65864,1647],{"class":112},[102,65866,51838],{"class":108},[102,65868,9428],{"class":112},[102,65870,158],{"class":108},[102,65872,4082],{"class":161},[102,65874,9435],{"class":112},[102,65876,1023],{"class":108},[102,65878,65820],{"class":112},[102,65880,51959],{"class":161},[102,65882,3203],{"class":112},[102,65884,2281],{"class":108},[102,65886,12432],{"class":112},[102,65888,65889],{"class":104,"line":16899},[102,65890,65891],{"class":171},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[102,65893,65894,65897,65899,65901,65903,65905,65907],{"class":104,"line":16904},[102,65895,65896],{"class":112},"      cks[i].",[102,65898,57804],{"class":1952},[102,65900,113],{"class":112},[102,65902,57809],{"class":217},[102,65904,12425],{"class":112},[102,65906,54440],{"class":108},[102,65908,54443],{"class":112},[102,65910,65911],{"class":104,"line":16917},[102,65912,65913],{"class":171},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[102,65915,65916],{"class":104,"line":16922},[102,65917,65918],{"class":171},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[102,65920,65921],{"class":104,"line":32624},[102,65922,65923],{"class":171},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[102,65925,65926],{"class":104,"line":32630},[102,65927,65928],{"class":171},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[102,65930,65931,65934,65936,65938,65940,65942,65945,65947,65949,65951,65953],{"class":104,"line":32636},[102,65932,65933],{"class":112},"        checkAll.checked ",[102,65935,158],{"class":108},[102,65937,54387],{"class":112},[102,65939,55672],{"class":1952},[102,65941,113],{"class":112},[102,65943,65944],{"class":217},"'.ck:checked'",[102,65946,30817],{"class":112},[102,65948,51959],{"class":161},[102,65950,57897],{"class":108},[102,65952,65820],{"class":112},[102,65954,55822],{"class":161},[102,65956,65957],{"class":104,"line":32642},[102,65958,64806],{"class":112},[102,65960,65961],{"class":104,"line":32648},[102,65962,2176],{"class":112},[102,65964,65965,65967,65969],{"class":104,"line":32659},[102,65966,52408],{"class":112},[102,65968,51804],{"class":51291},[102,65970,51298],{"class":112},[102,65972,65973,65975,65977],{"class":104,"line":32665},[102,65974,51776],{"class":112},[102,65976,51791],{"class":51291},[102,65978,51298],{"class":112},[102,65980,65981],{"class":104,"line":32685},[102,65982,2389],{"emptyLinePlaceholder":30},[102,65984,65985,65987,65989],{"class":104,"line":32691},[102,65986,51776],{"class":112},[102,65988,50626],{"class":51291},[102,65990,51298],{"class":112},[19,65992,65993],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,65995,65996],{},"用好之间比较得到的布尔值！！！",[19,65998,65999,66000,66003,66004,1647,66007,697,66009,66012],{},"在 JS 里访问的时候，",[99,66001,66002],{},"checkbox.checked"," 是一个 ",[262,66005,66006],{},"布尔值",[99,66008,1351],{},[99,66010,66011],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66014,66015,66016,66019,66020],{},"HTML 的 ",[99,66017,66018],{},"checked=\"checked\""," 只是 ",[262,66021,66022,66023,66026],{},"初始值；JS 的 ",[99,66024,66025],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66028,66029],{},"：checked是一个伪类选择器",[19,66031,66032],{},[1451,66033],{"alt":23,"src":66034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66036,66037,66040],{},[66038,66039],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66042,66043],{},[1451,66044],{"alt":23,"src":66045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66047,66049],{"id":66048},"_33-dom事件进阶","3.3 DOM事件进阶",[73,66051,66053],{"id":66052},"_331-事件流","3.3.1 事件流",[19,66055,66056],{},[1451,66057],{"alt":23,"src":66058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21988,66060,66062],{"id":66061},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66064,66065],{},[1451,66066],{"alt":23,"src":66067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[93,66069,66071],{"className":50624,"code":66070,"language":50626,"meta":23,"style":23},"\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",[99,66072,66073,66083,66097,66101,66109,66123,66143,66155,66163,66170,66182,66194,66204,66208,66212,66219,66231,66243,66253,66257,66265,66273,66277,66285,66300,66319,66327,66335,66355,66375,66391,66402,66410,66427,66438,66446,66463,66474,66482,66490,66498,66502],{"__ignoreMap":23},[102,66074,66075,66077,66079,66081],{"class":104,"line":105},[102,66076,51288],{"class":112},[102,66078,51292],{"class":51291},[102,66080,51295],{"class":1952},[102,66082,51298],{"class":112},[102,66084,66085,66087,66089,66091,66093,66095],{"class":104,"line":24},[102,66086,1023],{"class":112},[102,66088,50626],{"class":51291},[102,66090,51307],{"class":1952},[102,66092,158],{"class":112},[102,66094,51312],{"class":217},[102,66096,51298],{"class":112},[102,66098,66099],{"class":104,"line":1168},[102,66100,2389],{"emptyLinePlaceholder":30},[102,66102,66103,66105,66107],{"class":104,"line":1183},[102,66104,1023],{"class":112},[102,66106,51325],{"class":51291},[102,66108,51298],{"class":112},[102,66110,66111,66113,66115,66117,66119,66121],{"class":104,"line":1189},[102,66112,52135],{"class":112},[102,66114,51335],{"class":51291},[102,66116,51338],{"class":1952},[102,66118,158],{"class":112},[102,66120,51343],{"class":217},[102,66122,51298],{"class":112},[102,66124,66125,66127,66129,66131,66133,66135,66137,66139,66141],{"class":104,"line":1203},[102,66126,52135],{"class":112},[102,66128,51335],{"class":51291},[102,66130,14910],{"class":1952},[102,66132,158],{"class":112},[102,66134,51382],{"class":217},[102,66136,51362],{"class":1952},[102,66138,158],{"class":112},[102,66140,51389],{"class":217},[102,66142,51298],{"class":112},[102,66144,66145,66147,66149,66151,66153],{"class":104,"line":1209},[102,66146,52135],{"class":112},[102,66148,51398],{"class":51291},[102,66150,51401],{"class":112},[102,66152,51398],{"class":51291},[102,66154,51298],{"class":112},[102,66156,66157,66159,66161],{"class":104,"line":1300},[102,66158,52135],{"class":112},[102,66160,5116],{"class":51291},[102,66162,51298],{"class":112},[102,66164,66165,66168],{"class":104,"line":1306},[102,66166,66167],{"class":1952},"    .father",[102,66169,15562],{"class":112},[102,66171,66172,66174,66176,66178,66180],{"class":104,"line":1318},[102,66173,54762],{"class":161},[102,66175,51428],{"class":112},[102,66177,65065],{"class":161},[102,66179,51483],{"class":108},[102,66181,1279],{"class":112},[102,66183,66184,66186,66188,66190,66192],{"class":104,"line":1601},[102,66185,54776],{"class":161},[102,66187,51428],{"class":112},[102,66189,65065],{"class":161},[102,66191,51483],{"class":108},[102,66193,1279],{"class":112},[102,66195,66196,66198,66200,66202],{"class":104,"line":1606},[102,66197,54875],{"class":161},[102,66199,51428],{"class":112},[102,66201,51636],{"class":161},[102,66203,1279],{"class":112},[102,66205,66206],{"class":104,"line":1612},[102,66207,2176],{"class":112},[102,66209,66210],{"class":104,"line":1617},[102,66211,2389],{"emptyLinePlaceholder":30},[102,66213,66214,66217],{"class":104,"line":1631},[102,66215,66216],{"class":1952},"    .son",[102,66218,15562],{"class":112},[102,66220,66221,66223,66225,66227,66229],{"class":104,"line":1636},[102,66222,54762],{"class":161},[102,66224,51428],{"class":112},[102,66226,1711],{"class":161},[102,66228,51483],{"class":108},[102,66230,1279],{"class":112},[102,66232,66233,66235,66237,66239,66241],{"class":104,"line":1642},[102,66234,54776],{"class":161},[102,66236,51428],{"class":112},[102,66238,1711],{"class":161},[102,66240,51483],{"class":108},[102,66242,1279],{"class":112},[102,66244,66245,66247,66249,66251],{"class":104,"line":1663},[102,66246,54875],{"class":161},[102,66248,51428],{"class":112},[102,66250,54880],{"class":161},[102,66252,1279],{"class":112},[102,66254,66255],{"class":104,"line":1668},[102,66256,2176],{"class":112},[102,66258,66259,66261,66263],{"class":104,"line":1682},[102,66260,52408],{"class":112},[102,66262,5116],{"class":51291},[102,66264,51298],{"class":112},[102,66266,66267,66269,66271],{"class":104,"line":1687},[102,66268,51776],{"class":112},[102,66270,51325],{"class":51291},[102,66272,51298],{"class":112},[102,66274,66275],{"class":104,"line":1716},[102,66276,2389],{"emptyLinePlaceholder":30},[102,66278,66279,66281,66283],{"class":104,"line":1721},[102,66280,1023],{"class":112},[102,66282,51791],{"class":51291},[102,66284,51298],{"class":112},[102,66286,66287,66289,66291,66293,66295,66298],{"class":104,"line":1738},[102,66288,52135],{"class":112},[102,66290,51602],{"class":51291},[102,66292,53477],{"class":1952},[102,66294,158],{"class":112},[102,66296,66297],{"class":217},"\"father\"",[102,66299,51298],{"class":112},[102,66301,66302,66304,66306,66308,66310,66313,66315,66317],{"class":104,"line":1743},[102,66303,51332],{"class":112},[102,66305,51602],{"class":51291},[102,66307,53477],{"class":1952},[102,66309,158],{"class":112},[102,66311,66312],{"class":217},"\"son\"",[102,66314,55305],{"class":112},[102,66316,51602],{"class":51291},[102,66318,51298],{"class":112},[102,66320,66321,66323,66325],{"class":104,"line":1748},[102,66322,52408],{"class":112},[102,66324,51602],{"class":51291},[102,66326,51298],{"class":112},[102,66328,66329,66331,66333],{"class":104,"line":1753},[102,66330,52135],{"class":112},[102,66332,51804],{"class":51291},[102,66334,51298],{"class":112},[102,66336,66337,66339,66342,66344,66346,66348,66350,66353],{"class":104,"line":1767},[102,66338,11211],{"class":108},[102,66340,66341],{"class":161}," fa",[102,66343,13554],{"class":108},[102,66345,54387],{"class":112},[102,66347,54390],{"class":1952},[102,66349,113],{"class":112},[102,66351,66352],{"class":217},"'.father'",[102,66354,119],{"class":112},[102,66356,66357,66359,66362,66364,66366,66368,66370,66373],{"class":104,"line":1772},[102,66358,11211],{"class":108},[102,66360,66361],{"class":161}," son",[102,66363,13554],{"class":108},[102,66365,54387],{"class":112},[102,66367,54390],{"class":1952},[102,66369,113],{"class":112},[102,66371,66372],{"class":217},"'.son'",[102,66374,119],{"class":112},[102,66376,66377,66379,66381,66383,66385,66387,66389],{"class":104,"line":2566},[102,66378,52398],{"class":112},[102,66380,57804],{"class":1952},[102,66382,113],{"class":112},[102,66384,57809],{"class":217},[102,66386,12425],{"class":112},[102,66388,54440],{"class":108},[102,66390,54443],{"class":112},[102,66392,66393,66395,66397,66400],{"class":104,"line":2580},[102,66394,58916],{"class":1952},[102,66396,113],{"class":112},[102,66398,66399],{"class":217},"'woshiu1'",[102,66401,119],{"class":112},[102,66403,66404,66406,66408],{"class":104,"line":2588},[102,66405,54526],{"class":112},[102,66407,1351],{"class":161},[102,66409,119],{"class":112},[102,66411,66412,66415,66417,66419,66421,66423,66425],{"class":104,"line":2593},[102,66413,66414],{"class":112},"    fa.",[102,66416,57804],{"class":1952},[102,66418,113],{"class":112},[102,66420,57809],{"class":217},[102,66422,12425],{"class":112},[102,66424,54440],{"class":108},[102,66426,54443],{"class":112},[102,66428,66429,66431,66433,66436],{"class":104,"line":2599},[102,66430,58916],{"class":1952},[102,66432,113],{"class":112},[102,66434,66435],{"class":217},"'1'",[102,66437,119],{"class":112},[102,66439,66440,66442,66444],{"class":104,"line":2605},[102,66441,54526],{"class":112},[102,66443,1351],{"class":161},[102,66445,119],{"class":112},[102,66447,66448,66451,66453,66455,66457,66459,66461],{"class":104,"line":2610},[102,66449,66450],{"class":112},"    son.",[102,66452,57804],{"class":1952},[102,66454,113],{"class":112},[102,66456,57809],{"class":217},[102,66458,12425],{"class":112},[102,66460,54440],{"class":108},[102,66462,54443],{"class":112},[102,66464,66465,66467,66469,66472],{"class":104,"line":7938},[102,66466,58916],{"class":1952},[102,66468,113],{"class":112},[102,66470,66471],{"class":217},"'2'",[102,66473,119],{"class":112},[102,66475,66476,66478,66480],{"class":104,"line":7962},[102,66477,54526],{"class":112},[102,66479,1351],{"class":161},[102,66481,119],{"class":112},[102,66483,66484,66486,66488],{"class":104,"line":7967},[102,66485,52408],{"class":112},[102,66487,51804],{"class":51291},[102,66489,51298],{"class":112},[102,66491,66492,66494,66496],{"class":104,"line":7973},[102,66493,51776],{"class":112},[102,66495,51791],{"class":51291},[102,66497,51298],{"class":112},[102,66499,66500],{"class":104,"line":8000},[102,66501,2389],{"emptyLinePlaceholder":30},[102,66503,66504,66506,66508],{"class":104,"line":8005},[102,66505,51776],{"class":112},[102,66507,50626],{"class":51291},[102,66509,51298],{"class":112},[19,66511,66512],{},[1451,66513],{"alt":23,"src":66514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66516,66517],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21988,66519,66521],{"id":66520},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66523,66524],{},[1451,66525],{"alt":23,"src":66526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66528,66529],{},"反着来",[19,66531,66532],{},"注意是同名事件，比如都是‘click’",[21988,66534,66536],{"id":66535},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66538,66539],{},[1451,66540],{"alt":23,"src":66541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21988,66543,66545],{"id":66544},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66547,66548],{},[1451,66549],{"alt":23,"src":66550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66552,66553],{},[1451,66554],{"alt":23,"src":66555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21988,66557,66559],{"id":66558},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[56,66561,66562],{},[59,66563,66564],{},"事件类型的区别",[19,66566,66567],{},[1451,66568],{"alt":23,"src":66569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66571,66572],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[56,66574,66575],{"start":24},[59,66576,66577],{},"注册事件的区别",[19,66579,66580],{},[1451,66581],{"alt":23,"src":66582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21988,66584,66586],{"id":66585},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66588,66589],{},[1451,66590],{"alt":23,"src":66591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66593,66594],{},[1451,66595],{"alt":23,"src":66596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[93,66598,66600],{"className":53058,"code":66599,"language":53060,"meta":23,"style":23},"\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",[99,66601,66602,66610,66627,66650,66658,66663,66668,66673,66677,66685,66693],{"__ignoreMap":23},[102,66603,66604,66606,66608],{"class":104,"line":105},[102,66605,1023],{"class":112},[102,66607,51791],{"class":51291},[102,66609,51298],{"class":112},[102,66611,66612,66614,66617,66620,66622,66625],{"class":104,"line":24},[102,66613,52135],{"class":112},[102,66615,66616],{"class":51291},"form",[102,66618,66619],{"class":1952}," action",[102,66621,158],{"class":112},[102,66623,66624],{"class":217},"\"http:\u002F\u002Fwww.itcast.cn\"",[102,66626,51298],{"class":112},[102,66628,66629,66631,66633,66635,66637,66640,66643,66645,66648],{"class":104,"line":1168},[102,66630,51332],{"class":112},[102,66632,53812],{"class":51291},[102,66634,53815],{"class":1952},[102,66636,158],{"class":112},[102,66638,66639],{"class":217},"\"submit\"",[102,66641,66642],{"class":1952}," value",[102,66644,158],{"class":112},[102,66646,66647],{"class":217},"\"免费注册\"",[102,66649,51298],{"class":112},[102,66651,66652,66654,66656],{"class":104,"line":1183},[102,66653,51332],{"class":112},[102,66655,51804],{"class":51291},[102,66657,51298],{"class":112},[102,66659,66660],{"class":104,"line":1189},[102,66661,66662],{"class":112},"      const form = document.querySelector('form')\n",[102,66664,66665],{"class":104,"line":1203},[102,66666,66667],{"class":112},"      form.addEventListener('submit', function (e) {\n",[102,66669,66670],{"class":104,"line":1209},[102,66671,66672],{"class":112},"        e.preventDefault()\n",[102,66674,66675],{"class":104,"line":1300},[102,66676,64806],{"class":112},[102,66678,66679,66681,66683],{"class":104,"line":1306},[102,66680,51767],{"class":112},[102,66682,51804],{"class":51291},[102,66684,51298],{"class":112},[102,66686,66687,66689,66691],{"class":104,"line":1318},[102,66688,52408],{"class":112},[102,66690,66616],{"class":51291},[102,66692,51298],{"class":112},[102,66694,66695,66697,66699],{"class":104,"line":1601},[102,66696,51776],{"class":112},[102,66698,51791],{"class":51291},[102,66700,51298],{"class":112},[19,66702,66703],{},"点击不在跳转！！！",[73,66705,66707],{"id":66706},"_332-事件委托","3.3.2 事件委托",[19,66709,66710],{},[1451,66711],{"alt":23,"src":66712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[93,66714,66716],{"className":50624,"code":66715,"language":50626,"meta":23,"style":23},"\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",[99,66717,66718,66728,66742,66746,66754,66768,66788,66800,66808,66812,66820,66828,66840,66852,66864,66876,66888,66901,66909,66917,66922,66941,66962,66967,66972,66977,66982,66991,66995,67005,67009,67014,67019,67033,67043,67047,67051,67059,67067,67071],{"__ignoreMap":23},[102,66719,66720,66722,66724,66726],{"class":104,"line":105},[102,66721,51288],{"class":112},[102,66723,51292],{"class":51291},[102,66725,51295],{"class":1952},[102,66727,51298],{"class":112},[102,66729,66730,66732,66734,66736,66738,66740],{"class":104,"line":24},[102,66731,1023],{"class":112},[102,66733,50626],{"class":51291},[102,66735,51307],{"class":1952},[102,66737,158],{"class":112},[102,66739,51312],{"class":217},[102,66741,51298],{"class":112},[102,66743,66744],{"class":104,"line":1168},[102,66745,2389],{"emptyLinePlaceholder":30},[102,66747,66748,66750,66752],{"class":104,"line":1183},[102,66749,1023],{"class":112},[102,66751,51325],{"class":51291},[102,66753,51298],{"class":112},[102,66755,66756,66758,66760,66762,66764,66766],{"class":104,"line":1189},[102,66757,52135],{"class":112},[102,66759,51335],{"class":51291},[102,66761,51338],{"class":1952},[102,66763,158],{"class":112},[102,66765,51343],{"class":217},[102,66767,51298],{"class":112},[102,66769,66770,66772,66774,66776,66778,66780,66782,66784,66786],{"class":104,"line":1203},[102,66771,52135],{"class":112},[102,66773,51335],{"class":51291},[102,66775,14910],{"class":1952},[102,66777,158],{"class":112},[102,66779,51382],{"class":217},[102,66781,51362],{"class":1952},[102,66783,158],{"class":112},[102,66785,51389],{"class":217},[102,66787,51298],{"class":112},[102,66789,66790,66792,66794,66796,66798],{"class":104,"line":1209},[102,66791,52135],{"class":112},[102,66793,51398],{"class":51291},[102,66795,51401],{"class":112},[102,66797,51398],{"class":51291},[102,66799,51298],{"class":112},[102,66801,66802,66804,66806],{"class":104,"line":1300},[102,66803,51776],{"class":112},[102,66805,51325],{"class":51291},[102,66807,51298],{"class":112},[102,66809,66810],{"class":104,"line":1306},[102,66811,2389],{"emptyLinePlaceholder":30},[102,66813,66814,66816,66818],{"class":104,"line":1318},[102,66815,1023],{"class":112},[102,66817,51791],{"class":51291},[102,66819,51298],{"class":112},[102,66821,66822,66824,66826],{"class":104,"line":1601},[102,66823,52135],{"class":112},[102,66825,1120],{"class":51291},[102,66827,51298],{"class":112},[102,66829,66830,66832,66834,66836,66838],{"class":104,"line":1606},[102,66831,51332],{"class":112},[102,66833,59],{"class":51291},[102,66835,53957],{"class":112},[102,66837,59],{"class":51291},[102,66839,51298],{"class":112},[102,66841,66842,66844,66846,66848,66850],{"class":104,"line":1612},[102,66843,51332],{"class":112},[102,66845,59],{"class":51291},[102,66847,53976],{"class":112},[102,66849,59],{"class":51291},[102,66851,51298],{"class":112},[102,66853,66854,66856,66858,66860,66862],{"class":104,"line":1617},[102,66855,51332],{"class":112},[102,66857,59],{"class":51291},[102,66859,53995],{"class":112},[102,66861,59],{"class":51291},[102,66863,51298],{"class":112},[102,66865,66866,66868,66870,66872,66874],{"class":104,"line":1631},[102,66867,51332],{"class":112},[102,66869,59],{"class":51291},[102,66871,54014],{"class":112},[102,66873,59],{"class":51291},[102,66875,51298],{"class":112},[102,66877,66878,66880,66882,66884,66886],{"class":104,"line":1636},[102,66879,51332],{"class":112},[102,66881,59],{"class":51291},[102,66883,54033],{"class":112},[102,66885,59],{"class":51291},[102,66887,51298],{"class":112},[102,66889,66890,66892,66894,66897,66899],{"class":104,"line":1642},[102,66891,51332],{"class":112},[102,66893,19],{"class":51291},[102,66895,66896],{"class":112},">我不需要变色\u003C\u002F",[102,66898,19],{"class":51291},[102,66900,51298],{"class":112},[102,66902,66903,66905,66907],{"class":104,"line":1663},[102,66904,52408],{"class":112},[102,66906,1120],{"class":51291},[102,66908,51298],{"class":112},[102,66910,66911,66913,66915],{"class":104,"line":1668},[102,66912,52135],{"class":112},[102,66914,51804],{"class":51291},[102,66916,51298],{"class":112},[102,66918,66919],{"class":104,"line":1682},[102,66920,66921],{"class":171},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[102,66923,66924,66926,66928,66930,66932,66934,66936,66939],{"class":104,"line":1687},[102,66925,11211],{"class":108},[102,66927,61283],{"class":161},[102,66929,13554],{"class":108},[102,66931,54387],{"class":112},[102,66933,54390],{"class":1952},[102,66935,113],{"class":112},[102,66937,66938],{"class":217},"'ul'",[102,66940,119],{"class":112},[102,66942,66943,66946,66948,66950,66952,66954,66956,66958,66960],{"class":104,"line":1716},[102,66944,66945],{"class":112},"    ul.",[102,66947,57804],{"class":1952},[102,66949,113],{"class":112},[102,66951,57809],{"class":217},[102,66953,12425],{"class":112},[102,66955,54440],{"class":108},[102,66957,1647],{"class":112},[102,66959,187],{"class":5206},[102,66961,12432],{"class":112},[102,66963,66964],{"class":104,"line":1721},[102,66965,66966],{"class":171},"      \u002F\u002F alert(1)\n",[102,66968,66969],{"class":104,"line":1738},[102,66970,66971],{"class":171},"      \u002F\u002F e.target就是我们点击的对象\n",[102,66973,66974],{"class":104,"line":1743},[102,66975,66976],{"class":171},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[102,66978,66979],{"class":104,"line":1748},[102,66980,66981],{"class":171},"      \u002F\u002F e.target.style.color = 'red'\n",[102,66983,66984,66986,66988],{"class":104,"line":1753},[102,66985,58235],{"class":112},[102,66987,58238],{"class":1952},[102,66989,66990],{"class":112},"(e)\n",[102,66992,66993],{"class":104,"line":1767},[102,66994,2389],{"emptyLinePlaceholder":30},[102,66996,66997,66999,67002],{"class":104,"line":1772},[102,66998,58235],{"class":112},[102,67000,67001],{"class":1952},"dir",[102,67003,67004],{"class":112},"(e.target)\n",[102,67006,67007],{"class":104,"line":2566},[102,67008,2389],{"emptyLinePlaceholder":30},[102,67010,67011],{"class":104,"line":2580},[102,67012,67013],{"class":171},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[102,67015,67016],{"class":104,"line":2588},[102,67017,67018],{"class":171},"      \u002F\u002F 通过tagName来进行判断\n",[102,67020,67021,67023,67026,67028,67031],{"class":104,"line":2593},[102,67022,54471],{"class":108},[102,67024,67025],{"class":112}," (e.target.tagName ",[102,67027,54477],{"class":108},[102,67029,67030],{"class":217}," 'LI'",[102,67032,12432],{"class":112},[102,67034,67035,67038,67040],{"class":104,"line":2599},[102,67036,67037],{"class":112},"        e.target.style.color ",[102,67039,158],{"class":108},[102,67041,67042],{"class":217}," 'red'\n",[102,67044,67045],{"class":104,"line":2605},[102,67046,52389],{"class":112},[102,67048,67049],{"class":104,"line":2610},[102,67050,33452],{"class":112},[102,67052,67053,67055,67057],{"class":104,"line":7938},[102,67054,52408],{"class":112},[102,67056,51804],{"class":51291},[102,67058,51298],{"class":112},[102,67060,67061,67063,67065],{"class":104,"line":7962},[102,67062,51776],{"class":112},[102,67064,51791],{"class":51291},[102,67066,51298],{"class":112},[102,67068,67069],{"class":104,"line":7967},[102,67070,2389],{"emptyLinePlaceholder":30},[102,67072,67073,67075,67077],{"class":104,"line":7973},[102,67074,51776],{"class":112},[102,67076,50626],{"class":51291},[102,67078,51298],{"class":112},[19,67080,67081],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67083,67084],{},"if(e.target.ragName==='P') {}",[19,67086,67087],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67089,67090],{},"通过事件委托的方式实现tab栏切换改造：",[19,67092,67093],{},"一定要记住自定义属性！！！！！！",[19,67095,67096],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67098,67099],{},"id是自定义的属性名",[19,67101,67102],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[93,67104,67106],{"className":50624,"code":67105,"language":50626,"meta":23,"style":23},"\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",[99,67107,67108,67118,67132,67136,67144,67158,67178,67198,67210,67218,67224,67234,67244,67248,67252,67258,67270,67282,67294,67310,67314,67318,67324,67336,67348,67360,67370,67380,67384,67388,67396,67408,67418,67430,67434,67438,67446,67456,67466,67476,67480,67484,67494,67508,67520,67524,67528,67540,67550,67566,67576,67580,67584,67598,67608,67618,67622,67626,67632,67646,67650,67654,67662,67672,67676,67680,67689,67699,67703,67711,67719,67723,67731,67745,67759,67771,67779,67818,67850,67882,67914,67946,67954,67962,67976,68010,68044,68078,68112,68146,68154,68162,68170,68175,68180,68199,68204,68224,68232,68237,68250,68271,68284,68288,68293,68298,68311,68331,68359,68363,68367,68371,68379,68387,68391],{"__ignoreMap":23},[102,67109,67110,67112,67114,67116],{"class":104,"line":105},[102,67111,51288],{"class":112},[102,67113,51292],{"class":51291},[102,67115,51295],{"class":1952},[102,67117,51298],{"class":112},[102,67119,67120,67122,67124,67126,67128,67130],{"class":104,"line":24},[102,67121,1023],{"class":112},[102,67123,50626],{"class":51291},[102,67125,51307],{"class":1952},[102,67127,158],{"class":112},[102,67129,51312],{"class":217},[102,67131,51298],{"class":112},[102,67133,67134],{"class":104,"line":1168},[102,67135,2389],{"emptyLinePlaceholder":30},[102,67137,67138,67140,67142],{"class":104,"line":1183},[102,67139,1023],{"class":112},[102,67141,51325],{"class":51291},[102,67143,51298],{"class":112},[102,67145,67146,67148,67150,67152,67154,67156],{"class":104,"line":1189},[102,67147,52135],{"class":112},[102,67149,51335],{"class":51291},[102,67151,51338],{"class":1952},[102,67153,158],{"class":112},[102,67155,51343],{"class":217},[102,67157,59118],{"class":112},[102,67159,67160,67162,67164,67166,67168,67170,67172,67174,67176],{"class":104,"line":1203},[102,67161,52135],{"class":112},[102,67163,51335],{"class":51291},[102,67165,51354],{"class":1952},[102,67167,158],{"class":112},[102,67169,51359],{"class":217},[102,67171,51362],{"class":1952},[102,67173,158],{"class":112},[102,67175,51367],{"class":217},[102,67177,59118],{"class":112},[102,67179,67180,67182,67184,67186,67188,67190,67192,67194,67196],{"class":104,"line":1209},[102,67181,52135],{"class":112},[102,67183,51335],{"class":51291},[102,67185,14910],{"class":1952},[102,67187,158],{"class":112},[102,67189,51382],{"class":217},[102,67191,51362],{"class":1952},[102,67193,158],{"class":112},[102,67195,51389],{"class":217},[102,67197,59118],{"class":112},[102,67199,67200,67202,67204,67206,67208],{"class":104,"line":1300},[102,67201,52135],{"class":112},[102,67203,51398],{"class":51291},[102,67205,63616],{"class":112},[102,67207,51398],{"class":51291},[102,67209,51298],{"class":112},[102,67211,67212,67214,67216],{"class":104,"line":1306},[102,67213,52135],{"class":112},[102,67215,5116],{"class":51291},[102,67217,51298],{"class":112},[102,67219,67220,67222],{"class":104,"line":1318},[102,67221,6393],{"class":51291},[102,67223,15562],{"class":112},[102,67225,67226,67228,67230,67232],{"class":104,"line":1601},[102,67227,54697],{"class":161},[102,67229,51428],{"class":112},[102,67231,304],{"class":161},[102,67233,1279],{"class":112},[102,67235,67236,67238,67240,67242],{"class":104,"line":1606},[102,67237,54686],{"class":161},[102,67239,51428],{"class":112},[102,67241,304],{"class":161},[102,67243,1279],{"class":112},[102,67245,67246],{"class":104,"line":1612},[102,67247,2176],{"class":112},[102,67249,67250],{"class":104,"line":1617},[102,67251,2389],{"emptyLinePlaceholder":30},[102,67253,67254,67256],{"class":104,"line":1631},[102,67255,63667],{"class":1952},[102,67257,15562],{"class":112},[102,67259,67260,67262,67264,67266,67268],{"class":104,"line":1636},[102,67261,54762],{"class":161},[102,67263,51428],{"class":112},[102,67265,63678],{"class":161},[102,67267,51483],{"class":108},[102,67269,1279],{"class":112},[102,67271,67272,67274,67276,67278,67280],{"class":104,"line":1642},[102,67273,54776],{"class":161},[102,67275,51428],{"class":112},[102,67277,63691],{"class":161},[102,67279,51483],{"class":108},[102,67281,1279],{"class":112},[102,67283,67284,67286,67288,67290,67292],{"class":104,"line":1663},[102,67285,54697],{"class":161},[102,67287,51428],{"class":112},[102,67289,813],{"class":161},[102,67291,51483],{"class":108},[102,67293,1279],{"class":112},[102,67295,67296,67298,67300,67302,67304,67306,67308],{"class":104,"line":1668},[102,67297,61968],{"class":161},[102,67299,51428],{"class":112},[102,67301,330],{"class":161},[102,67303,51483],{"class":108},[102,67305,51512],{"class":161},[102,67307,62235],{"class":161},[102,67309,1279],{"class":112},[102,67311,67312],{"class":104,"line":1682},[102,67313,2176],{"class":112},[102,67315,67316],{"class":104,"line":1687},[102,67317,2389],{"emptyLinePlaceholder":30},[102,67319,67320,67322],{"class":104,"line":1716},[102,67321,63736],{"class":1952},[102,67323,15562],{"class":112},[102,67325,67326,67328,67330,67332,67334],{"class":104,"line":1721},[102,67327,54762],{"class":161},[102,67329,51428],{"class":112},[102,67331,424],{"class":161},[102,67333,441],{"class":108},[102,67335,1279],{"class":112},[102,67337,67338,67340,67342,67344,67346],{"class":104,"line":1738},[102,67339,54776],{"class":161},[102,67341,51428],{"class":112},[102,67343,1020],{"class":161},[102,67345,51483],{"class":108},[102,67347,1279],{"class":112},[102,67349,67350,67352,67354,67356,67358],{"class":104,"line":1743},[102,67351,57350],{"class":161},[102,67353,51428],{"class":112},[102,67355,1020],{"class":161},[102,67357,51483],{"class":108},[102,67359,1279],{"class":112},[102,67361,67362,67364,67366,67368],{"class":104,"line":1748},[102,67363,55000],{"class":161},[102,67365,51428],{"class":112},[102,67367,51468],{"class":161},[102,67369,1279],{"class":112},[102,67371,67372,67374,67376,67378],{"class":104,"line":1753},[102,67373,55011],{"class":161},[102,67375,51428],{"class":112},[102,67377,51659],{"class":161},[102,67379,1279],{"class":112},[102,67381,67382],{"class":104,"line":1767},[102,67383,2176],{"class":112},[102,67385,67386],{"class":104,"line":1772},[102,67387,2389],{"emptyLinePlaceholder":30},[102,67389,67390,67392,67394],{"class":104,"line":2566},[102,67391,63736],{"class":1952},[102,67393,63809],{"class":51291},[102,67395,15562],{"class":112},[102,67397,67398,67400,67402,67404,67406],{"class":104,"line":2580},[102,67399,54913],{"class":161},[102,67401,51428],{"class":112},[102,67403,913],{"class":161},[102,67405,51483],{"class":108},[102,67407,1279],{"class":112},[102,67409,67410,67412,67414,67416],{"class":104,"line":2588},[102,67411,62325],{"class":161},[102,67413,51428],{"class":112},[102,67415,63832],{"class":161},[102,67417,1279],{"class":112},[102,67419,67420,67422,67424,67426,67428],{"class":104,"line":2593},[102,67421,61991],{"class":161},[102,67423,51428],{"class":112},[102,67425,813],{"class":161},[102,67427,51483],{"class":108},[102,67429,1279],{"class":112},[102,67431,67432],{"class":104,"line":2599},[102,67433,2176],{"class":112},[102,67435,67436],{"class":104,"line":2605},[102,67437,2389],{"emptyLinePlaceholder":30},[102,67439,67440,67442,67444],{"class":104,"line":2610},[102,67441,63736],{"class":1952},[102,67443,61283],{"class":51291},[102,67445,15562],{"class":112},[102,67447,67448,67450,67452,67454],{"class":104,"line":7938},[102,67449,54723],{"class":161},[102,67451,51428],{"class":112},[102,67453,54728],{"class":161},[102,67455,1279],{"class":112},[102,67457,67458,67460,67462,67464],{"class":104,"line":7962},[102,67459,55000],{"class":161},[102,67461,51428],{"class":112},[102,67463,51468],{"class":161},[102,67465,1279],{"class":112},[102,67467,67468,67470,67472,67474],{"class":104,"line":7967},[102,67469,55011],{"class":161},[102,67471,51428],{"class":112},[102,67473,51571],{"class":161},[102,67475,1279],{"class":112},[102,67477,67478],{"class":104,"line":7973},[102,67479,2176],{"class":112},[102,67481,67482],{"class":104,"line":8000},[102,67483,2389],{"emptyLinePlaceholder":30},[102,67485,67486,67488,67490,67492],{"class":104,"line":8005},[102,67487,63736],{"class":1952},[102,67489,61283],{"class":51291},[102,67491,55066],{"class":51291},[102,67493,15562],{"class":112},[102,67495,67496,67498,67500,67502,67504,67506],{"class":104,"line":8011},[102,67497,54697],{"class":161},[102,67499,51428],{"class":112},[102,67501,304],{"class":161},[102,67503,8940],{"class":161},[102,67505,51483],{"class":108},[102,67507,1279],{"class":112},[102,67509,67510,67512,67514,67516,67518],{"class":104,"line":8023},[102,67511,54913],{"class":161},[102,67513,51428],{"class":112},[102,67515,662],{"class":161},[102,67517,51483],{"class":108},[102,67519,1279],{"class":112},[102,67521,67522],{"class":104,"line":8035},[102,67523,2176],{"class":112},[102,67525,67526],{"class":104,"line":8047},[102,67527,2389],{"emptyLinePlaceholder":30},[102,67529,67530,67532,67534,67536,67538],{"class":104,"line":9706},[102,67531,63736],{"class":1952},[102,67533,61283],{"class":51291},[102,67535,55066],{"class":51291},[102,67537,1387],{"class":51291},[102,67539,15562],{"class":112},[102,67541,67542,67544,67546,67548],{"class":104,"line":9731},[102,67543,63961],{"class":161},[102,67545,51428],{"class":112},[102,67547,54728],{"class":161},[102,67549,1279],{"class":112},[102,67551,67552,67554,67556,67558,67560,67562,67564],{"class":104,"line":9754},[102,67553,62223],{"class":161},[102,67555,51428],{"class":112},[102,67557,190],{"class":161},[102,67559,51483],{"class":108},[102,67561,51512],{"class":161},[102,67563,63982],{"class":161},[102,67565,1279],{"class":112},[102,67567,67568,67570,67572,67574],{"class":104,"line":9778},[102,67569,57407],{"class":161},[102,67571,51428],{"class":112},[102,67573,62360],{"class":161},[102,67575,1279],{"class":112},[102,67577,67578],{"class":104,"line":9783},[102,67579,2176],{"class":112},[102,67581,67582],{"class":104,"line":9788},[102,67583,2389],{"emptyLinePlaceholder":30},[102,67585,67586,67588,67590,67592,67594,67596],{"class":104,"line":9793},[102,67587,63736],{"class":1952},[102,67589,61283],{"class":51291},[102,67591,55066],{"class":51291},[102,67593,1387],{"class":51291},[102,67595,64015],{"class":1952},[102,67597,15562],{"class":112},[102,67599,67600,67602,67604,67606],{"class":104,"line":9802},[102,67601,61782],{"class":161},[102,67603,51428],{"class":112},[102,67605,64026],{"class":161},[102,67607,1279],{"class":112},[102,67609,67610,67612,67614,67616],{"class":104,"line":9807},[102,67611,57407],{"class":161},[102,67613,51428],{"class":112},[102,67615,64026],{"class":161},[102,67617,1279],{"class":112},[102,67619,67620],{"class":104,"line":9813},[102,67621,2176],{"class":112},[102,67623,67624],{"class":104,"line":9834},[102,67625,2389],{"emptyLinePlaceholder":30},[102,67627,67628,67630],{"class":104,"line":9840},[102,67629,64051],{"class":1952},[102,67631,15562],{"class":112},[102,67633,67634,67636,67638,67640,67642,67644],{"class":104,"line":9854},[102,67635,54686],{"class":161},[102,67637,51428],{"class":112},[102,67639,304],{"class":161},[102,67641,64064],{"class":161},[102,67643,51483],{"class":108},[102,67645,1279],{"class":112},[102,67647,67648],{"class":104,"line":9860},[102,67649,2176],{"class":112},[102,67651,67652],{"class":104,"line":9887},[102,67653,2389],{"emptyLinePlaceholder":30},[102,67655,67656,67658,67660],{"class":104,"line":9896},[102,67657,64051],{"class":1952},[102,67659,62165],{"class":1952},[102,67661,15562],{"class":112},[102,67663,67664,67666,67668,67670],{"class":104,"line":9902},[102,67665,55000],{"class":161},[102,67667,51428],{"class":112},[102,67669,54728],{"class":161},[102,67671,1279],{"class":112},[102,67673,67674],{"class":104,"line":9910},[102,67675,2176],{"class":112},[102,67677,67678],{"class":104,"line":9915},[102,67679,2389],{"emptyLinePlaceholder":30},[102,67681,67682,67684,67687],{"class":104,"line":16594},[102,67683,64051],{"class":1952},[102,67685,67686],{"class":1952}," .active",[102,67688,15562],{"class":112},[102,67690,67691,67693,67695,67697],{"class":104,"line":16600},[102,67692,55000],{"class":161},[102,67694,51428],{"class":112},[102,67696,60860],{"class":161},[102,67698,1279],{"class":112},[102,67700,67701],{"class":104,"line":16623},[102,67702,2176],{"class":112},[102,67704,67705,67707,67709],{"class":104,"line":16629},[102,67706,52408],{"class":112},[102,67708,5116],{"class":51291},[102,67710,51298],{"class":112},[102,67712,67713,67715,67717],{"class":104,"line":16652},[102,67714,51776],{"class":112},[102,67716,51325],{"class":51291},[102,67718,51298],{"class":112},[102,67720,67721],{"class":104,"line":16666},[102,67722,2389],{"emptyLinePlaceholder":30},[102,67724,67725,67727,67729],{"class":104,"line":16686},[102,67726,1023],{"class":112},[102,67728,51791],{"class":51291},[102,67730,51298],{"class":112},[102,67732,67733,67735,67737,67739,67741,67743],{"class":104,"line":16692},[102,67734,52135],{"class":112},[102,67736,51602],{"class":51291},[102,67738,53477],{"class":1952},[102,67740,158],{"class":112},[102,67742,64166],{"class":217},[102,67744,51298],{"class":112},[102,67746,67747,67749,67751,67753,67755,67757],{"class":104,"line":16703},[102,67748,51332],{"class":112},[102,67750,51602],{"class":51291},[102,67752,53477],{"class":1952},[102,67754,158],{"class":112},[102,67756,64181],{"class":217},[102,67758,51298],{"class":112},[102,67760,67761,67763,67765,67767,67769],{"class":104,"line":16726},[102,67762,55225],{"class":112},[102,67764,73],{"class":51291},[102,67766,64192],{"class":112},[102,67768,73],{"class":51291},[102,67770,51298],{"class":112},[102,67772,67773,67775,67777],{"class":104,"line":16748},[102,67774,55225],{"class":112},[102,67776,1120],{"class":51291},[102,67778,51298],{"class":112},[102,67780,67781,67783,67785,67787,67789,67791,67793,67795,67797,67799,67801,67803,67805,67808,67810,67812,67814,67816],{"class":104,"line":16753},[102,67782,55293],{"class":112},[102,67784,59],{"class":51291},[102,67786,61043],{"class":112},[102,67788,351],{"class":51291},[102,67790,53477],{"class":1952},[102,67792,158],{"class":112},[102,67794,59697],{"class":217},[102,67796,61048],{"class":1952},[102,67798,158],{"class":112},[102,67800,64227],{"class":217},[102,67802,53942],{"class":1952},[102,67804,158],{"class":112},[102,67806,67807],{"class":217},"\"0\"",[102,67809,64230],{"class":112},[102,67811,351],{"class":51291},[102,67813,55305],{"class":112},[102,67815,59],{"class":51291},[102,67817,51298],{"class":112},[102,67819,67820,67822,67824,67826,67828,67830,67832,67834,67836,67838,67840,67842,67844,67846,67848],{"class":104,"line":16759},[102,67821,55293],{"class":112},[102,67823,59],{"class":51291},[102,67825,61043],{"class":112},[102,67827,351],{"class":51291},[102,67829,61048],{"class":1952},[102,67831,158],{"class":112},[102,67833,64227],{"class":217},[102,67835,53942],{"class":1952},[102,67837,158],{"class":112},[102,67839,3667],{"class":217},[102,67841,64257],{"class":112},[102,67843,351],{"class":51291},[102,67845,55305],{"class":112},[102,67847,59],{"class":51291},[102,67849,51298],{"class":112},[102,67851,67852,67854,67856,67858,67860,67862,67864,67866,67868,67870,67872,67874,67876,67878,67880],{"class":104,"line":16773},[102,67853,55293],{"class":112},[102,67855,59],{"class":51291},[102,67857,61043],{"class":112},[102,67859,351],{"class":51291},[102,67861,61048],{"class":1952},[102,67863,158],{"class":112},[102,67865,64227],{"class":217},[102,67867,53942],{"class":1952},[102,67869,158],{"class":112},[102,67871,3690],{"class":217},[102,67873,64284],{"class":112},[102,67875,351],{"class":51291},[102,67877,55305],{"class":112},[102,67879,59],{"class":51291},[102,67881,51298],{"class":112},[102,67883,67884,67886,67888,67890,67892,67894,67896,67898,67900,67902,67904,67906,67908,67910,67912],{"class":104,"line":16786},[102,67885,55293],{"class":112},[102,67887,59],{"class":51291},[102,67889,61043],{"class":112},[102,67891,351],{"class":51291},[102,67893,61048],{"class":1952},[102,67895,158],{"class":112},[102,67897,64227],{"class":217},[102,67899,53942],{"class":1952},[102,67901,158],{"class":112},[102,67903,3703],{"class":217},[102,67905,64311],{"class":112},[102,67907,351],{"class":51291},[102,67909,55305],{"class":112},[102,67911,59],{"class":51291},[102,67913,51298],{"class":112},[102,67915,67916,67918,67920,67922,67924,67926,67928,67930,67932,67934,67936,67938,67940,67942,67944],{"class":104,"line":16791},[102,67917,55293],{"class":112},[102,67919,59],{"class":51291},[102,67921,61043],{"class":112},[102,67923,351],{"class":51291},[102,67925,61048],{"class":1952},[102,67927,158],{"class":112},[102,67929,64227],{"class":217},[102,67931,53942],{"class":1952},[102,67933,158],{"class":112},[102,67935,3716],{"class":217},[102,67937,64338],{"class":112},[102,67939,351],{"class":51291},[102,67941,55305],{"class":112},[102,67943,59],{"class":51291},[102,67945,51298],{"class":112},[102,67947,67948,67950,67952],{"class":104,"line":16805},[102,67949,55398],{"class":112},[102,67951,1120],{"class":51291},[102,67953,51298],{"class":112},[102,67955,67956,67958,67960],{"class":104,"line":16810},[102,67957,51767],{"class":112},[102,67959,51602],{"class":51291},[102,67961,51298],{"class":112},[102,67963,67964,67966,67968,67970,67972,67974],{"class":104,"line":16816},[102,67965,51332],{"class":112},[102,67967,51602],{"class":51291},[102,67969,53477],{"class":1952},[102,67971,158],{"class":112},[102,67973,64375],{"class":217},[102,67975,51298],{"class":112},[102,67977,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998,68000,68002,68004,68006,68008],{"class":104,"line":16821},[102,67979,55225],{"class":112},[102,67981,51602],{"class":51291},[102,67983,53477],{"class":1952},[102,67985,158],{"class":112},[102,67987,64390],{"class":217},[102,67989,61043],{"class":112},[102,67991,1451],{"class":51291},[102,67993,55230],{"class":1952},[102,67995,158],{"class":112},[102,67997,64401],{"class":217},[102,67999,55238],{"class":1952},[102,68001,158],{"class":112},[102,68003,7642],{"class":217},[102,68005,64410],{"class":112},[102,68007,51602],{"class":51291},[102,68009,51298],{"class":112},[102,68011,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034,68036,68038,68040,68042],{"class":104,"line":16835},[102,68013,55225],{"class":112},[102,68015,51602],{"class":51291},[102,68017,53477],{"class":1952},[102,68019,158],{"class":112},[102,68021,62614],{"class":217},[102,68023,61043],{"class":112},[102,68025,1451],{"class":51291},[102,68027,55230],{"class":1952},[102,68029,158],{"class":112},[102,68031,64437],{"class":217},[102,68033,55238],{"class":1952},[102,68035,158],{"class":112},[102,68037,7642],{"class":217},[102,68039,64410],{"class":112},[102,68041,51602],{"class":51291},[102,68043,51298],{"class":112},[102,68045,68046,68048,68050,68052,68054,68056,68058,68060,68062,68064,68066,68068,68070,68072,68074,68076],{"class":104,"line":16840},[102,68047,55225],{"class":112},[102,68049,51602],{"class":51291},[102,68051,53477],{"class":1952},[102,68053,158],{"class":112},[102,68055,62614],{"class":217},[102,68057,61043],{"class":112},[102,68059,1451],{"class":51291},[102,68061,55230],{"class":1952},[102,68063,158],{"class":112},[102,68065,64472],{"class":217},[102,68067,55238],{"class":1952},[102,68069,158],{"class":112},[102,68071,7642],{"class":217},[102,68073,64410],{"class":112},[102,68075,51602],{"class":51291},[102,68077,51298],{"class":112},[102,68079,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098,68100,68102,68104,68106,68108,68110],{"class":104,"line":16845},[102,68081,55225],{"class":112},[102,68083,51602],{"class":51291},[102,68085,53477],{"class":1952},[102,68087,158],{"class":112},[102,68089,62614],{"class":217},[102,68091,61043],{"class":112},[102,68093,1451],{"class":51291},[102,68095,55230],{"class":1952},[102,68097,158],{"class":112},[102,68099,64507],{"class":217},[102,68101,55238],{"class":1952},[102,68103,158],{"class":112},[102,68105,7642],{"class":217},[102,68107,64410],{"class":112},[102,68109,51602],{"class":51291},[102,68111,51298],{"class":112},[102,68113,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144],{"class":104,"line":16859},[102,68115,55225],{"class":112},[102,68117,51602],{"class":51291},[102,68119,53477],{"class":1952},[102,68121,158],{"class":112},[102,68123,62614],{"class":217},[102,68125,61043],{"class":112},[102,68127,1451],{"class":51291},[102,68129,55230],{"class":1952},[102,68131,158],{"class":112},[102,68133,64542],{"class":217},[102,68135,55238],{"class":1952},[102,68137,158],{"class":112},[102,68139,7642],{"class":217},[102,68141,64410],{"class":112},[102,68143,51602],{"class":51291},[102,68145,51298],{"class":112},[102,68147,68148,68150,68152],{"class":104,"line":16871},[102,68149,51767],{"class":112},[102,68151,51602],{"class":51291},[102,68153,51298],{"class":112},[102,68155,68156,68158,68160],{"class":104,"line":16876},[102,68157,52408],{"class":112},[102,68159,51602],{"class":51291},[102,68161,51298],{"class":112},[102,68163,68164,68166,68168],{"class":104,"line":16889},[102,68165,52135],{"class":112},[102,68167,51804],{"class":51291},[102,68169,51298],{"class":112},[102,68171,68172],{"class":104,"line":16894},[102,68173,68174],{"class":171},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[102,68176,68177],{"class":104,"line":16899},[102,68178,68179],{"class":171},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[102,68181,68182,68184,68186,68188,68190,68192,68194,68197],{"class":104,"line":16904},[102,68183,11211],{"class":108},[102,68185,61283],{"class":161},[102,68187,13554],{"class":108},[102,68189,54387],{"class":112},[102,68191,54390],{"class":1952},[102,68193,113],{"class":112},[102,68195,68196],{"class":217},"'.tab-nav ul'",[102,68198,119],{"class":112},[102,68200,68201],{"class":104,"line":16917},[102,68202,68203],{"class":171},"    \u002F\u002F 2.添加事件\n",[102,68205,68206,68208,68210,68212,68214,68216,68218,68220,68222],{"class":104,"line":16922},[102,68207,66945],{"class":112},[102,68209,57804],{"class":1952},[102,68211,113],{"class":112},[102,68213,57809],{"class":217},[102,68215,12425],{"class":112},[102,68217,54440],{"class":108},[102,68219,1647],{"class":112},[102,68221,187],{"class":5206},[102,68223,12432],{"class":112},[102,68225,68226,68228,68230],{"class":104,"line":32624},[102,68227,58235],{"class":112},[102,68229,67001],{"class":1952},[102,68231,67004],{"class":112},[102,68233,68234],{"class":104,"line":32630},[102,68235,68236],{"class":171},"      \u002F\u002Fe.targer是我们点击的对象\n",[102,68238,68239,68241,68243,68245,68248],{"class":104,"line":32636},[102,68240,54471],{"class":108},[102,68242,67025],{"class":112},[102,68244,54477],{"class":108},[102,68246,68247],{"class":217}," 'A'",[102,68249,12432],{"class":112},[102,68251,68252,68254,68256,68258,68261,68263,68265,68267,68269],{"class":104,"line":32642},[102,68253,51916],{"class":112},[102,68255,54390],{"class":1952},[102,68257,113],{"class":112},[102,68259,68260],{"class":217},"'.active'",[102,68262,56994],{"class":112},[102,68264,56997],{"class":1952},[102,68266,113],{"class":112},[102,68268,64705],{"class":217},[102,68270,119],{"class":112},[102,68272,68273,68276,68278,68280,68282],{"class":104,"line":32648},[102,68274,68275],{"class":112},"        e.target.classList.",[102,68277,5324],{"class":1952},[102,68279,113],{"class":112},[102,68281,64705],{"class":217},[102,68283,119],{"class":112},[102,68285,68286],{"class":104,"line":32659},[102,68287,2389],{"emptyLinePlaceholder":30},[102,68289,68290],{"class":104,"line":32665},[102,68291,68292],{"class":171},"        \u002F\u002F 下面大盒子模块\n",[102,68294,68295],{"class":104,"line":32685},[102,68296,68297],{"class":171},"        \u002F\u002F console.log(e.target.dataset.id)\n",[102,68299,68300,68302,68304,68306,68308],{"class":104,"line":32691},[102,68301,61261],{"class":108},[102,68303,3021],{"class":161},[102,68305,13554],{"class":108},[102,68307,45557],{"class":108},[102,68309,68310],{"class":112},"e.target.dataset.id\n",[102,68312,68313,68315,68317,68319,68321,68323,68325,68327,68329],{"class":104,"line":32702},[102,68314,51916],{"class":112},[102,68316,54390],{"class":1952},[102,68318,113],{"class":112},[102,68320,64753],{"class":217},[102,68322,56994],{"class":112},[102,68324,56997],{"class":1952},[102,68326,113],{"class":112},[102,68328,64705],{"class":217},[102,68330,119],{"class":112},[102,68332,68333,68335,68337,68339,68341,68343,68345,68347,68349,68351,68353,68355,68357],{"class":104,"line":32708},[102,68334,51916],{"class":112},[102,68336,54390],{"class":1952},[102,68338,113],{"class":112},[102,68340,64779],{"class":217},[102,68342,554],{"class":112},[102,68344,45557],{"class":108},[102,68346,25109],{"class":161},[102,68348,57023],{"class":217},[102,68350,56994],{"class":112},[102,68352,5324],{"class":1952},[102,68354,113],{"class":112},[102,68356,64705],{"class":217},[102,68358,119],{"class":112},[102,68360,68361],{"class":104,"line":32714},[102,68362,2389],{"emptyLinePlaceholder":30},[102,68364,68365],{"class":104,"line":32720},[102,68366,52389],{"class":112},[102,68368,68369],{"class":104,"line":32726},[102,68370,33452],{"class":112},[102,68372,68373,68375,68377],{"class":104,"line":32732},[102,68374,52408],{"class":112},[102,68376,51804],{"class":51291},[102,68378,51298],{"class":112},[102,68380,68381,68383,68385],{"class":104,"line":32738},[102,68382,51776],{"class":112},[102,68384,51791],{"class":51291},[102,68386,51298],{"class":112},[102,68388,68389],{"class":104,"line":32744},[102,68390,2389],{"emptyLinePlaceholder":30},[102,68392,68393,68395,68397],{"class":104,"line":32764},[102,68394,51776],{"class":112},[102,68396,50626],{"class":51291},[102,68398,51298],{"class":112},[73,68400,68402],{"id":68401},"_333-页面加载事件","3.3.3 页面加载事件",[56,68404,68405],{},[59,68406,68407],{},"load",[19,68409,68410],{},[1451,68411],{"alt":23,"src":68412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68414,68415],{},"window代表整个窗口，比document还要大",[19,68417,68418],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68420,68421],{},"img.addEventListener('load', function () {",[19,68423,68424],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68426,52455],{},[56,68428,68429],{"start":24},[59,68430,68431],{},"DOMContentLoaded",[19,68433,68434],{},[1451,68435],{"alt":23,"src":68436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68438,68439],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[73,68441,68443],{"id":68442},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68445,68446],{},[1451,68447],{"alt":23,"src":68448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68450,68451],{},[1451,68452],{"alt":23,"src":68453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68455,68456],{},[1451,68457],{"alt":23,"src":68458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68460,68461],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68463,68464],{},"获得的是数字型数据，不带单位",[19,68466,68467],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68469,68470],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68472,68473],{},"它是通过document.documentElement来获取",[19,68475,68476],{},[1451,68477],{"alt":23,"src":68478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68480,68481],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[73,68483,68485],{"id":68484},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68487,68488],{},[1451,68489],{"alt":23,"src":68490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68492,68493],{},[1451,68494],{"alt":23,"src":68495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[73,68497,68499],{"id":68498},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68501,68502],{},[1451,68503],{"alt":23,"src":68504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68506,68507],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68509,68510],{},[1451,68511],{"alt":23,"src":68512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68514,68515],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68517,68518],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68520,68521],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68523,68524],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68526,68527],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68529,68530],{},[1451,68531],{"alt":23,"src":68532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68534,68535],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68537,68538],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68540,68541],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68543,68544],{},"e.pageX-box.getBoundingClientRect()",[73,68546,68548],{"id":68547},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68550,68551],{},[1451,68552],{"alt":23,"src":68553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68555,68556],{},"这个是相对于视口来说的，它是个方法，不是属性值",[73,68558,68560],{"id":68559},"_338-总结","3.3.8 总结",[19,68562,68563],{},[1451,68564],{"alt":23,"src":68565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68567,68568],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68570,68571],{},"修改盒子的宽高只能通过width和height来实现",[73,68573,68575],{"id":68574},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[93,68577,68579],{"className":50624,"code":68578,"language":50626,"meta":23,"style":23},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[99,68580,68581,68586,68591,68596,68601],{"__ignoreMap":23},[102,68582,68583],{"class":104,"line":105},[102,68584,68585],{"class":112},"\u002F* 页面滑动 *\u002F\n",[102,68587,68588],{"class":104,"line":24},[102,68589,68590],{"class":112},"html {\n",[102,68592,68593],{"class":104,"line":1168},[102,68594,68595],{"class":112},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[102,68597,68598],{"class":104,"line":1183},[102,68599,68600],{"class":112},"  scroll-behavior: smooth;\n",[102,68602,68603],{"class":104,"line":1189},[102,68604,1554],{"class":112},[19,68606,68607],{},"默认是auto",[73,68609,68611],{"id":68610},"_3310-日期对象","3.3.10 日期对象",[21988,68613,68615],{"id":68614},"_33101-实例化","3.3.10.1 实例化",[19,68617,68618],{},[1451,68619],{"alt":23,"src":68620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21988,68622,68624],{"id":68623},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68626,68627],{},[1451,68628],{"alt":23,"src":68629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68631,68632],{},"月份+1",[19,68634,68635],{},"老外认为第一天为0，星期天",[19,68637,68638],{},"方法使用的时候必须要跟括号",[19,68640,68641],{},"快速获得日期",[19,68643,68644],{},"\u002F\u002F 得到年月日",[19,68646,68647],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68649,68650],{},"\u002F\u002F 得到当地日期",[19,68652,68653],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68655,68656],{},"\u002F\u002F 得到当地时间",[19,68658,68659],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68661,68662],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68664,68665],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51804,68667,68668],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,68670,68671],{},"学会去封装函数！",[21988,68673,68675],{"id":68674},"_33103-时间戳","3.3.10.3 时间戳",[19,68677,68678],{},[1451,68679],{"alt":23,"src":68680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68682,68683],{},[1451,68684],{"alt":23,"src":68685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68687,68688],{},"三种方法记住一个就可以",[73,68690,68692],{"id":68691},"_3311-节点操作","3.3.11 节点操作",[21988,68694,68696],{"id":68695},"_33111-dom节点","3.3.11.1 DOM节点",[19,68698,68699],{},[1451,68700],{"alt":23,"src":68701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68703,68704],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21988,68706,68708],{"id":68707},"_33112-查找节点","3.3.11.2 查找节点",[19,68710,68711],{},"前边的document.querySelector()是获取的元素",[19,68713,68714],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68716,68717],{},[1451,68718],{"alt":23,"src":68719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[56,68721,68722],{},[59,68723,68724],{},"父节点",[19,68726,68727],{},[1451,68728],{"alt":23,"src":68729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[56,68731,68732],{"start":24},[59,68733,68734],{},"子节点",[19,68736,68737],{},[1451,68738],{"alt":23,"src":68739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,68741,68742],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,68744,68745],{},"children获得的是伪数组，是亲儿子",[56,68747,68748],{"start":1168},[59,68749,68750],{},"兄弟节点",[19,68752,68753],{},[1451,68754],{"alt":23,"src":68755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21988,68757,68759],{"id":68758},"_33113-增加节点","3.3.11.3 增加节点",[19,68761,68762],{},[1451,68763],{"alt":23,"src":68764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,68766,68767],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,68769,68770],{},[1451,68771],{"alt":23,"src":68772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,68774,68775],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,68777,68778],{},"下面是写法的部分展示，就按照下边的格式来写",[19,68780,68781],{},"例：",[51804,68783,68784],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,68786,68787],{},[1451,68788],{"alt":23,"src":68789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,68791,68792],{},"false只克隆标签，里边的内容不会克隆过来",[93,68794,68796],{"className":50624,"code":68795,"language":50626,"meta":23,"style":23},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[99,68797,68798],{"__ignoreMap":23},[102,68799,68800],{"class":104,"line":105},[102,68801,68795],{"class":112},[21988,68803,68805],{"id":68804},"_33114-删除节点","3.3.11.4 删除节点",[19,68807,68808],{},[1451,68809],{"alt":23,"src":68810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,68812,68813],{},"父亲删儿子",[19,68815,68816],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[73,68818,68820],{"id":68819},"_3312-m端事件","3.3.12 M端事件",[19,68822,68823],{},"M端就是移动端",[19,68825,68826],{},[1451,68827],{"alt":23,"src":68828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[73,68830,68832],{"id":68831},"_3313-插件","3.3.13 插件",[19,68834,68835],{},"要熟悉官网！！！",[19,68837,68838],{},[351,68839,68840],{"href":68840,"rel":68841},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23855],[19,68843,68844],{},[351,68845,68846],{"href":68846,"rel":68847},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23855],[73,68849,68851],{"id":68850},"_3314-学生信息表","3.3.14 学生信息表",[56,68853,68854,68857,68860,68863,68866,68869,68872,68875],{},[59,68855,68856],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[59,68858,68859],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[59,68861,68862],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[59,68864,68865],{},"用好表单元素自带的属性，value,name等",[59,68867,68868],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[59,68870,68871],{},"不要忘记事件对象",[59,68873,68874],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[59,68876,68877],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,68879,68880],{},"结构：",[93,68882,68884],{"className":50624,"code":68883,"language":50626,"meta":23,"style":23},"\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",[99,68885,68886,68896,68910,68914,68922,68936,68956,68977,68990,69014,69022,69026,69034,69047,69068,69096,69124,69129,69151,69171,69190,69198,69226,69248,69268,69288,69308,69328,69348,69356,69376,69384,69388,69401,69409,69417,69425,69438,69451,69464,69477,69490,69503,69516,69524,69532,69540,69545,69550,69555,69560,69565,69570,69575,69580,69585,69590,69595,69600,69605,69613,69621,69629,69633,69653,69672,69692,69712,69732,69752,69756,69761,69781,69786,69796,69801,69806,69826,69848,69853,69863,69867,69871,69876,69881,69910,69924,69939,69943,69947,69951,69956,69967,69980,69985,69990,69995,70000,70005,70009,70014,70019,70028,70033,70038,70050,70055,70062,70066,70071,70081,70086,70096,70101,70129,70150,70160,70180,70198,70215,70232,70249,70266,70270,70280,70285,70290,70295,70306,70310,70314,70318,70323,70328,70349,70361,70366,70371,70376,70390,70395,70402,70406,70410,70418,70422,70430,70434],{"__ignoreMap":23},[102,68887,68888,68890,68892,68894],{"class":104,"line":105},[102,68889,51288],{"class":112},[102,68891,51292],{"class":51291},[102,68893,51295],{"class":1952},[102,68895,51298],{"class":112},[102,68897,68898,68900,68902,68904,68906,68908],{"class":104,"line":24},[102,68899,1023],{"class":112},[102,68901,50626],{"class":51291},[102,68903,51307],{"class":1952},[102,68905,158],{"class":112},[102,68907,51312],{"class":217},[102,68909,51298],{"class":112},[102,68911,68912],{"class":104,"line":1168},[102,68913,2389],{"emptyLinePlaceholder":30},[102,68915,68916,68918,68920],{"class":104,"line":1183},[102,68917,1023],{"class":112},[102,68919,51325],{"class":51291},[102,68921,51298],{"class":112},[102,68923,68924,68926,68928,68930,68932,68934],{"class":104,"line":1189},[102,68925,52135],{"class":112},[102,68927,51335],{"class":51291},[102,68929,51338],{"class":1952},[102,68931,158],{"class":112},[102,68933,51343],{"class":217},[102,68935,59118],{"class":112},[102,68937,68938,68940,68942,68944,68946,68948,68950,68952,68954],{"class":104,"line":1203},[102,68939,52135],{"class":112},[102,68941,51335],{"class":51291},[102,68943,14910],{"class":1952},[102,68945,158],{"class":112},[102,68947,51382],{"class":217},[102,68949,51362],{"class":1952},[102,68951,158],{"class":112},[102,68953,51389],{"class":217},[102,68955,59118],{"class":112},[102,68957,68958,68960,68962,68964,68966,68968,68970,68972,68975],{"class":104,"line":1209},[102,68959,52135],{"class":112},[102,68961,51335],{"class":51291},[102,68963,51354],{"class":1952},[102,68965,158],{"class":112},[102,68967,51359],{"class":217},[102,68969,51362],{"class":1952},[102,68971,158],{"class":112},[102,68973,68974],{"class":217},"\"ie=edge\"",[102,68976,59118],{"class":112},[102,68978,68979,68981,68983,68986,68988],{"class":104,"line":1300},[102,68980,52135],{"class":112},[102,68982,51398],{"class":51291},[102,68984,68985],{"class":112},">学生信息管理\u003C\u002F",[102,68987,51398],{"class":51291},[102,68989,51298],{"class":112},[102,68991,68992,68994,68997,69000,69002,69005,69007,69009,69012],{"class":104,"line":1306},[102,68993,52135],{"class":112},[102,68995,68996],{"class":51291},"link",[102,68998,68999],{"class":1952}," rel",[102,69001,158],{"class":112},[102,69003,69004],{"class":217},"\"stylesheet\"",[102,69006,61048],{"class":1952},[102,69008,158],{"class":112},[102,69010,69011],{"class":217},"\"css\u002Findex.css\"",[102,69013,59118],{"class":112},[102,69015,69016,69018,69020],{"class":104,"line":1318},[102,69017,51776],{"class":112},[102,69019,51325],{"class":51291},[102,69021,51298],{"class":112},[102,69023,69024],{"class":104,"line":1601},[102,69025,2389],{"emptyLinePlaceholder":30},[102,69027,69028,69030,69032],{"class":104,"line":1606},[102,69029,1023],{"class":112},[102,69031,51791],{"class":51291},[102,69033,51298],{"class":112},[102,69035,69036,69038,69040,69043,69045],{"class":104,"line":1612},[102,69037,52135],{"class":112},[102,69039,10],{"class":51291},[102,69041,69042],{"class":112},">新增学员\u003C\u002F",[102,69044,10],{"class":51291},[102,69046,51298],{"class":112},[102,69048,69049,69051,69053,69055,69057,69059,69062,69064,69066],{"class":104,"line":1617},[102,69050,52135],{"class":112},[102,69052,66616],{"class":51291},[102,69054,53477],{"class":1952},[102,69056,158],{"class":112},[102,69058,62655],{"class":217},[102,69060,69061],{"class":1952}," autocomplete",[102,69063,158],{"class":112},[102,69065,31767],{"class":217},[102,69067,51298],{"class":112},[102,69069,69070,69073,69075,69077,69079,69081,69083,69085,69088,69090,69092,69094],{"class":104,"line":1631},[102,69071,69072],{"class":112},"    姓名：\u003C",[102,69074,53812],{"class":51291},[102,69076,53815],{"class":1952},[102,69078,158],{"class":112},[102,69080,62690],{"class":217},[102,69082,53477],{"class":1952},[102,69084,158],{"class":112},[102,69086,69087],{"class":217},"\"uname\"",[102,69089,14910],{"class":1952},[102,69091,158],{"class":112},[102,69093,69087],{"class":217},[102,69095,59118],{"class":112},[102,69097,69098,69101,69103,69105,69107,69109,69111,69113,69116,69118,69120,69122],{"class":104,"line":1636},[102,69099,69100],{"class":112},"    年龄：\u003C",[102,69102,53812],{"class":51291},[102,69104,53815],{"class":1952},[102,69106,158],{"class":112},[102,69108,62690],{"class":217},[102,69110,53477],{"class":1952},[102,69112,158],{"class":112},[102,69114,69115],{"class":217},"\"age\"",[102,69117,14910],{"class":1952},[102,69119,158],{"class":112},[102,69121,69115],{"class":217},[102,69123,59118],{"class":112},[102,69125,69126],{"class":104,"line":1642},[102,69127,69128],{"class":112},"    性别:\n",[102,69130,69131,69133,69136,69138,69140,69143,69145,69147,69149],{"class":104,"line":1663},[102,69132,51332],{"class":112},[102,69134,69135],{"class":51291},"select",[102,69137,14910],{"class":1952},[102,69139,158],{"class":112},[102,69141,69142],{"class":217},"\"gender\"",[102,69144,53477],{"class":1952},[102,69146,158],{"class":112},[102,69148,69142],{"class":217},[102,69150,51298],{"class":112},[102,69152,69153,69155,69158,69160,69162,69164,69167,69169],{"class":104,"line":1668},[102,69154,55225],{"class":112},[102,69156,69157],{"class":51291},"option",[102,69159,66642],{"class":1952},[102,69161,158],{"class":112},[102,69163,9951],{"class":217},[102,69165,69166],{"class":112},">男\u003C\u002F",[102,69168,69157],{"class":51291},[102,69170,51298],{"class":112},[102,69172,69173,69175,69177,69179,69181,69183,69186,69188],{"class":104,"line":1682},[102,69174,55225],{"class":112},[102,69176,69157],{"class":51291},[102,69178,66642],{"class":1952},[102,69180,158],{"class":112},[102,69182,10020],{"class":217},[102,69184,69185],{"class":112},">女\u003C\u002F",[102,69187,69157],{"class":51291},[102,69189,51298],{"class":112},[102,69191,69192,69194,69196],{"class":104,"line":1687},[102,69193,51767],{"class":112},[102,69195,69135],{"class":51291},[102,69197,51298],{"class":112},[102,69199,69200,69203,69205,69207,69209,69211,69213,69215,69218,69220,69222,69224],{"class":104,"line":1716},[102,69201,69202],{"class":112},"    薪资：\u003C",[102,69204,53812],{"class":51291},[102,69206,53815],{"class":1952},[102,69208,158],{"class":112},[102,69210,62690],{"class":217},[102,69212,53477],{"class":1952},[102,69214,158],{"class":112},[102,69216,69217],{"class":217},"\"salary\"",[102,69219,14910],{"class":1952},[102,69221,158],{"class":112},[102,69223,69217],{"class":217},[102,69225,59118],{"class":112},[102,69227,69228,69231,69233,69235,69237,69240,69242,69244,69246],{"class":104,"line":1721},[102,69229,69230],{"class":112},"    就业城市：\u003C",[102,69232,69135],{"class":51291},[102,69234,14910],{"class":1952},[102,69236,158],{"class":112},[102,69238,69239],{"class":217},"\"city\"",[102,69241,53477],{"class":1952},[102,69243,158],{"class":112},[102,69245,69239],{"class":217},[102,69247,51298],{"class":112},[102,69249,69250,69252,69254,69256,69258,69261,69264,69266],{"class":104,"line":1738},[102,69251,55225],{"class":112},[102,69253,69157],{"class":51291},[102,69255,66642],{"class":1952},[102,69257,158],{"class":112},[102,69259,69260],{"class":217},"\"北京\"",[102,69262,69263],{"class":112},">北京\u003C\u002F",[102,69265,69157],{"class":51291},[102,69267,51298],{"class":112},[102,69269,69270,69272,69274,69276,69278,69281,69284,69286],{"class":104,"line":1743},[102,69271,55225],{"class":112},[102,69273,69157],{"class":51291},[102,69275,66642],{"class":1952},[102,69277,158],{"class":112},[102,69279,69280],{"class":217},"\"上海\"",[102,69282,69283],{"class":112},">上海\u003C\u002F",[102,69285,69157],{"class":51291},[102,69287,51298],{"class":112},[102,69289,69290,69292,69294,69296,69298,69301,69304,69306],{"class":104,"line":1748},[102,69291,55225],{"class":112},[102,69293,69157],{"class":51291},[102,69295,66642],{"class":1952},[102,69297,158],{"class":112},[102,69299,69300],{"class":217},"\"广州\"",[102,69302,69303],{"class":112},">广州\u003C\u002F",[102,69305,69157],{"class":51291},[102,69307,51298],{"class":112},[102,69309,69310,69312,69314,69316,69318,69321,69324,69326],{"class":104,"line":1753},[102,69311,55225],{"class":112},[102,69313,69157],{"class":51291},[102,69315,66642],{"class":1952},[102,69317,158],{"class":112},[102,69319,69320],{"class":217},"\"深圳\"",[102,69322,69323],{"class":112},">深圳\u003C\u002F",[102,69325,69157],{"class":51291},[102,69327,51298],{"class":112},[102,69329,69330,69332,69334,69336,69338,69341,69344,69346],{"class":104,"line":1767},[102,69331,55225],{"class":112},[102,69333,69157],{"class":51291},[102,69335,66642],{"class":1952},[102,69337,158],{"class":112},[102,69339,69340],{"class":217},"\"曹县\"",[102,69342,69343],{"class":112},">曹县\u003C\u002F",[102,69345,69157],{"class":51291},[102,69347,51298],{"class":112},[102,69349,69350,69352,69354],{"class":104,"line":1772},[102,69351,51767],{"class":112},[102,69353,69135],{"class":51291},[102,69355,51298],{"class":112},[102,69357,69358,69360,69362,69364,69366,69369,69372,69374],{"class":104,"line":2566},[102,69359,51332],{"class":112},[102,69361,53878],{"class":51291},[102,69363,53477],{"class":1952},[102,69365,158],{"class":112},[102,69367,69368],{"class":217},"\"add\"",[102,69370,69371],{"class":112},">录入\u003C\u002F",[102,69373,53878],{"class":51291},[102,69375,51298],{"class":112},[102,69377,69378,69380,69382],{"class":104,"line":2580},[102,69379,52408],{"class":112},[102,69381,66616],{"class":51291},[102,69383,51298],{"class":112},[102,69385,69386],{"class":104,"line":2588},[102,69387,2389],{"emptyLinePlaceholder":30},[102,69389,69390,69392,69394,69397,69399],{"class":104,"line":2593},[102,69391,52135],{"class":112},[102,69393,10],{"class":51291},[102,69395,69396],{"class":112},">就业榜\u003C\u002F",[102,69398,10],{"class":51291},[102,69400,51298],{"class":112},[102,69402,69403,69405,69407],{"class":104,"line":2599},[102,69404,52135],{"class":112},[102,69406,250],{"class":51291},[102,69408,51298],{"class":112},[102,69410,69411,69413,69415],{"class":104,"line":2605},[102,69412,51332],{"class":112},[102,69414,253],{"class":51291},[102,69416,51298],{"class":112},[102,69418,69419,69421,69423],{"class":104,"line":2610},[102,69420,55225],{"class":112},[102,69422,256],{"class":51291},[102,69424,51298],{"class":112},[102,69426,69427,69429,69431,69434,69436],{"class":104,"line":7938},[102,69428,55293],{"class":112},[102,69430,259],{"class":51291},[102,69432,69433],{"class":112},">序号\u003C\u002F",[102,69435,259],{"class":51291},[102,69437,51298],{"class":112},[102,69439,69440,69442,69444,69447,69449],{"class":104,"line":7962},[102,69441,55293],{"class":112},[102,69443,259],{"class":51291},[102,69445,69446],{"class":112},">姓名\u003C\u002F",[102,69448,259],{"class":51291},[102,69450,51298],{"class":112},[102,69452,69453,69455,69457,69460,69462],{"class":104,"line":7967},[102,69454,55293],{"class":112},[102,69456,259],{"class":51291},[102,69458,69459],{"class":112},">年龄\u003C\u002F",[102,69461,259],{"class":51291},[102,69463,51298],{"class":112},[102,69465,69466,69468,69470,69473,69475],{"class":104,"line":7973},[102,69467,55293],{"class":112},[102,69469,259],{"class":51291},[102,69471,69472],{"class":112},">性别\u003C\u002F",[102,69474,259],{"class":51291},[102,69476,51298],{"class":112},[102,69478,69479,69481,69483,69486,69488],{"class":104,"line":8000},[102,69480,55293],{"class":112},[102,69482,259],{"class":51291},[102,69484,69485],{"class":112},">薪资\u003C\u002F",[102,69487,259],{"class":51291},[102,69489,51298],{"class":112},[102,69491,69492,69494,69496,69499,69501],{"class":104,"line":8005},[102,69493,55293],{"class":112},[102,69495,259],{"class":51291},[102,69497,69498],{"class":112},">就业城市\u003C\u002F",[102,69500,259],{"class":51291},[102,69502,51298],{"class":112},[102,69504,69505,69507,69509,69512,69514],{"class":104,"line":8011},[102,69506,55293],{"class":112},[102,69508,259],{"class":51291},[102,69510,69511],{"class":112},">操作\u003C\u002F",[102,69513,259],{"class":51291},[102,69515,51298],{"class":112},[102,69517,69518,69520,69522],{"class":104,"line":8023},[102,69519,55398],{"class":112},[102,69521,256],{"class":51291},[102,69523,51298],{"class":112},[102,69525,69526,69528,69530],{"class":104,"line":8035},[102,69527,51767],{"class":112},[102,69529,253],{"class":51291},[102,69531,51298],{"class":112},[102,69533,69534,69536,69538],{"class":104,"line":8047},[102,69535,51332],{"class":112},[102,69537,297],{"class":51291},[102,69539,51298],{"class":112},[102,69541,69542],{"class":104,"line":9706},[102,69543,69544],{"class":171},"      \u003C!-- \n",[102,69546,69547],{"class":104,"line":9731},[102,69548,69549],{"class":171},"        \u003Ctr>\n",[102,69551,69552],{"class":104,"line":9754},[102,69553,69554],{"class":171},"          \u003Ctd>1001\u003C\u002Ftd>\n",[102,69556,69557],{"class":104,"line":9778},[102,69558,69559],{"class":171},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[102,69561,69562],{"class":104,"line":9783},[102,69563,69564],{"class":171},"          \u003Ctd>19\u003C\u002Ftd>\n",[102,69566,69567],{"class":104,"line":9788},[102,69568,69569],{"class":171},"          \u003Ctd>男\u003C\u002Ftd>\n",[102,69571,69572],{"class":104,"line":9793},[102,69573,69574],{"class":171},"          \u003Ctd>15000\u003C\u002Ftd>\n",[102,69576,69577],{"class":104,"line":9802},[102,69578,69579],{"class":171},"          \u003Ctd>上海\u003C\u002Ftd>\n",[102,69581,69582],{"class":104,"line":9807},[102,69583,69584],{"class":171},"          \u003Ctd>\n",[102,69586,69587],{"class":104,"line":9813},[102,69588,69589],{"class":171},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[102,69591,69592],{"class":104,"line":9834},[102,69593,69594],{"class":171},"          \u003C\u002Ftd>\n",[102,69596,69597],{"class":104,"line":9840},[102,69598,69599],{"class":171},"        \u003C\u002Ftr> \n",[102,69601,69602],{"class":104,"line":9854},[102,69603,69604],{"class":171},"        -->\n",[102,69606,69607,69609,69611],{"class":104,"line":9860},[102,69608,51767],{"class":112},[102,69610,297],{"class":51291},[102,69612,51298],{"class":112},[102,69614,69615,69617,69619],{"class":104,"line":9887},[102,69616,52408],{"class":112},[102,69618,250],{"class":51291},[102,69620,51298],{"class":112},[102,69622,69623,69625,69627],{"class":104,"line":9896},[102,69624,52135],{"class":112},[102,69626,51804],{"class":51291},[102,69628,51298],{"class":112},[102,69630,69631],{"class":104,"line":9902},[102,69632,59949],{"class":171},[102,69634,69635,69637,69640,69642,69644,69646,69648,69651],{"class":104,"line":9910},[102,69636,11211],{"class":108},[102,69638,69639],{"class":161}," uname",[102,69641,13554],{"class":108},[102,69643,54387],{"class":112},[102,69645,54390],{"class":1952},[102,69647,113],{"class":112},[102,69649,69650],{"class":217},"'.uname'",[102,69652,119],{"class":112},[102,69654,69655,69657,69659,69661,69663,69665,69667,69670],{"class":104,"line":9915},[102,69656,11211],{"class":108},[102,69658,15679],{"class":161},[102,69660,13554],{"class":108},[102,69662,54387],{"class":112},[102,69664,54390],{"class":1952},[102,69666,113],{"class":112},[102,69668,69669],{"class":217},"'.age'",[102,69671,119],{"class":112},[102,69673,69674,69676,69679,69681,69683,69685,69687,69690],{"class":104,"line":16594},[102,69675,11211],{"class":108},[102,69677,69678],{"class":161}," gender",[102,69680,13554],{"class":108},[102,69682,54387],{"class":112},[102,69684,54390],{"class":1952},[102,69686,113],{"class":112},[102,69688,69689],{"class":217},"'.gender'",[102,69691,119],{"class":112},[102,69693,69694,69696,69699,69701,69703,69705,69707,69710],{"class":104,"line":16600},[102,69695,11211],{"class":108},[102,69697,69698],{"class":161}," salary",[102,69700,13554],{"class":108},[102,69702,54387],{"class":112},[102,69704,54390],{"class":1952},[102,69706,113],{"class":112},[102,69708,69709],{"class":217},"'.salary'",[102,69711,119],{"class":112},[102,69713,69714,69716,69719,69721,69723,69725,69727,69730],{"class":104,"line":16623},[102,69715,11211],{"class":108},[102,69717,69718],{"class":161}," city",[102,69720,13554],{"class":108},[102,69722,54387],{"class":112},[102,69724,54390],{"class":1952},[102,69726,113],{"class":112},[102,69728,69729],{"class":217},"'.city'",[102,69731,119],{"class":112},[102,69733,69734,69736,69739,69741,69743,69745,69747,69750],{"class":104,"line":16629},[102,69735,11211],{"class":108},[102,69737,69738],{"class":161}," tbody",[102,69740,13554],{"class":108},[102,69742,54387],{"class":112},[102,69744,54390],{"class":1952},[102,69746,113],{"class":112},[102,69748,69749],{"class":217},"'tbody'",[102,69751,119],{"class":112},[102,69753,69754],{"class":104,"line":16652},[102,69755,2389],{"emptyLinePlaceholder":30},[102,69757,69758],{"class":104,"line":16666},[102,69759,69760],{"class":171},"    \u002F\u002F 获取所有带有name属性的元素\n",[102,69762,69763,69765,69768,69770,69772,69774,69776,69779],{"class":104,"line":16686},[102,69764,11211],{"class":108},[102,69766,69767],{"class":161}," items",[102,69769,13554],{"class":108},[102,69771,54387],{"class":112},[102,69773,55672],{"class":1952},[102,69775,113],{"class":112},[102,69777,69778],{"class":217},"'[name]'",[102,69780,119],{"class":112},[102,69782,69783],{"class":104,"line":16692},[102,69784,69785],{"class":171},"    \u002F\u002F 声明一个空的数组\n",[102,69787,69788,69790,69792,69794],{"class":104,"line":16703},[102,69789,11211],{"class":108},[102,69791,57686],{"class":161},[102,69793,13554],{"class":108},[102,69795,51829],{"class":112},[102,69797,69798],{"class":104,"line":16726},[102,69799,69800],{"class":171},"    \u002F\u002F 1.录入模块\n",[102,69802,69803],{"class":104,"line":16748},[102,69804,69805],{"class":171},"    \u002F\u002F 1.1这是一个表单提交事件\n",[102,69807,69808,69810,69813,69815,69817,69819,69821,69824],{"class":104,"line":16753},[102,69809,11211],{"class":108},[102,69811,69812],{"class":161}," info",[102,69814,13554],{"class":108},[102,69816,54387],{"class":112},[102,69818,54390],{"class":1952},[102,69820,113],{"class":112},[102,69822,69823],{"class":217},"'.info'",[102,69825,119],{"class":112},[102,69827,69828,69831,69833,69835,69838,69840,69842,69844,69846],{"class":104,"line":16759},[102,69829,69830],{"class":112},"    info.",[102,69832,57804],{"class":1952},[102,69834,113],{"class":112},[102,69836,69837],{"class":217},"'submit'",[102,69839,12425],{"class":112},[102,69841,54440],{"class":108},[102,69843,1647],{"class":112},[102,69845,187],{"class":5206},[102,69847,12432],{"class":112},[102,69849,69850],{"class":104,"line":16773},[102,69851,69852],{"class":171},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[102,69854,69855,69858,69861],{"class":104,"line":16786},[102,69856,69857],{"class":112},"      e.",[102,69859,69860],{"class":1952},"preventDefault",[102,69862,1965],{"class":112},[102,69864,69865],{"class":104,"line":16791},[102,69866,60003],{"class":171},[102,69868,69869],{"class":104,"line":16805},[102,69870,2389],{"emptyLinePlaceholder":30},[102,69872,69873],{"class":104,"line":16810},[102,69874,69875],{"class":171},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[102,69877,69878],{"class":104,"line":16816},[102,69879,69880],{"class":171},"      \u002F\u002F 先遍历循环\n",[102,69882,69883,69885,69887,69889,69891,69893,69895,69897,69899,69902,69904,69906,69908],{"class":104,"line":16821},[102,69884,52275],{"class":108},[102,69886,1647],{"class":112},[102,69888,51838],{"class":108},[102,69890,9428],{"class":112},[102,69892,158],{"class":108},[102,69894,4082],{"class":161},[102,69896,9435],{"class":112},[102,69898,1023],{"class":108},[102,69900,69901],{"class":112}," items.",[102,69903,51959],{"class":161},[102,69905,3203],{"class":112},[102,69907,2281],{"class":108},[102,69909,12432],{"class":112},[102,69911,69912,69914,69917,69919,69922],{"class":104,"line":16835},[102,69913,2486],{"class":108},[102,69915,69916],{"class":112}," (items[i].value ",[102,69918,54477],{"class":108},[102,69920,69921],{"class":217}," ''",[102,69923,12432],{"class":112},[102,69925,69926,69929,69932,69934,69937],{"class":104,"line":16840},[102,69927,69928],{"class":108},"          return",[102,69930,69931],{"class":1952}," alert",[102,69933,113],{"class":112},[102,69935,69936],{"class":217},"'输入内容不能为空'",[102,69938,119],{"class":112},[102,69940,69941],{"class":104,"line":16845},[102,69942,2518],{"class":112},[102,69944,69945],{"class":104,"line":16859},[102,69946,52389],{"class":112},[102,69948,69949],{"class":104,"line":16871},[102,69950,2389],{"emptyLinePlaceholder":30},[102,69952,69953],{"class":104,"line":16876},[102,69954,69955],{"class":171},"      \u002F\u002F 创建新的对象\n",[102,69957,69958,69960,69963,69965],{"class":104,"line":16889},[102,69959,58219],{"class":108},[102,69961,69962],{"class":161}," obj",[102,69964,13554],{"class":108},[102,69966,15562],{"class":112},[102,69968,69969,69972,69974,69976,69978],{"class":104,"line":16894},[102,69970,69971],{"class":112},"        stuID: arr.",[102,69973,51959],{"class":161},[102,69975,45557],{"class":108},[102,69977,25109],{"class":161},[102,69979,31457],{"class":112},[102,69981,69982],{"class":104,"line":16899},[102,69983,69984],{"class":112},"        uname: uname.value,\n",[102,69986,69987],{"class":104,"line":16904},[102,69988,69989],{"class":112},"        age: age.value,\n",[102,69991,69992],{"class":104,"line":16917},[102,69993,69994],{"class":112},"        gender: gender.value,\n",[102,69996,69997],{"class":104,"line":16922},[102,69998,69999],{"class":112},"        salary: salary.value,\n",[102,70001,70002],{"class":104,"line":32624},[102,70003,70004],{"class":112},"        city: city.value\n",[102,70006,70007],{"class":104,"line":32630},[102,70008,52389],{"class":112},[102,70010,70011],{"class":104,"line":32636},[102,70012,70013],{"class":171},"      \u002F\u002F console.log(obj);\n",[102,70015,70016],{"class":104,"line":32642},[102,70017,70018],{"class":171},"      \u002F\u002F 追加到数组里面\n",[102,70020,70021,70023,70025],{"class":104,"line":32648},[102,70022,57998],{"class":112},[102,70024,51875],{"class":1952},[102,70026,70027],{"class":112},"(obj)\n",[102,70029,70030],{"class":104,"line":32659},[102,70031,70032],{"class":171},"      \u002F\u002F console.log(arr);\n",[102,70034,70035],{"class":104,"line":32665},[102,70036,70037],{"class":171},"      \u002F\u002F 清空表单  reset重置表单\n",[102,70039,70040,70043,70045,70048],{"class":104,"line":32685},[102,70041,70042],{"class":161},"      this",[102,70044,671],{"class":112},[102,70046,70047],{"class":1952},"reset",[102,70049,1965],{"class":112},[102,70051,70052],{"class":104,"line":32691},[102,70053,70054],{"class":171},"      \u002F\u002F 调用渲染函数\n",[102,70056,70057,70060],{"class":104,"line":32702},[102,70058,70059],{"class":1952},"      render",[102,70061,1965],{"class":112},[102,70063,70064],{"class":104,"line":32708},[102,70065,33452],{"class":112},[102,70067,70068],{"class":104,"line":32714},[102,70069,70070],{"class":171},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[102,70072,70073,70076,70079],{"class":104,"line":32720},[102,70074,70075],{"class":108},"    function",[102,70077,70078],{"class":1952}," render",[102,70080,10843],{"class":112},[102,70082,70083],{"class":104,"line":32726},[102,70084,70085],{"class":171},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[102,70087,70088,70091,70093],{"class":104,"line":32732},[102,70089,70090],{"class":112},"      tbody.innerHTML ",[102,70092,158],{"class":108},[102,70094,70095],{"class":217}," ''\n",[102,70097,70098],{"class":104,"line":32738},[102,70099,70100],{"class":171},"      \u002F\u002F 遍历数组\n",[102,70102,70103,70105,70107,70109,70111,70113,70115,70117,70119,70121,70123,70125,70127],{"class":104,"line":32744},[102,70104,52275],{"class":108},[102,70106,1647],{"class":112},[102,70108,51838],{"class":108},[102,70110,9428],{"class":112},[102,70112,158],{"class":108},[102,70114,4082],{"class":161},[102,70116,9435],{"class":112},[102,70118,1023],{"class":108},[102,70120,51956],{"class":112},[102,70122,51959],{"class":161},[102,70124,3203],{"class":112},[102,70126,2281],{"class":108},[102,70128,12432],{"class":112},[102,70130,70131,70133,70136,70138,70140,70143,70145,70148],{"class":104,"line":32764},[102,70132,61261],{"class":108},[102,70134,70135],{"class":161}," tr",[102,70137,13554],{"class":108},[102,70139,54387],{"class":112},[102,70141,70142],{"class":1952},"createElement",[102,70144,113],{"class":112},[102,70146,70147],{"class":217},"'tr'",[102,70149,119],{"class":112},[102,70151,70152,70155,70157],{"class":104,"line":32770},[102,70153,70154],{"class":112},"        tr.innerHTML ",[102,70156,158],{"class":108},[102,70158,70159],{"class":217}," `\n",[102,70161,70162,70165,70167,70169,70171,70174,70177],{"class":104,"line":32786},[102,70163,70164],{"class":217},"        \u003Ctd>${",[102,70166,3869],{"class":112},[102,70168,1003],{"class":217},[102,70170,554],{"class":112},[102,70172,70173],{"class":217},"].",[102,70175,70176],{"class":112},"stuID",[102,70178,70179],{"class":217},"}\u003C\u002Ftd>\n",[102,70181,70182,70185,70187,70189,70191,70193,70196],{"class":104,"line":32792},[102,70183,70184],{"class":217},"          \u003Ctd>${",[102,70186,3869],{"class":112},[102,70188,1003],{"class":217},[102,70190,554],{"class":112},[102,70192,70173],{"class":217},[102,70194,70195],{"class":112},"uname",[102,70197,70179],{"class":217},[102,70199,70200,70202,70204,70206,70208,70210,70213],{"class":104,"line":32806},[102,70201,70184],{"class":217},[102,70203,3869],{"class":112},[102,70205,1003],{"class":217},[102,70207,554],{"class":112},[102,70209,70173],{"class":217},[102,70211,70212],{"class":112},"age",[102,70214,70179],{"class":217},[102,70216,70217,70219,70221,70223,70225,70227,70230],{"class":104,"line":32812},[102,70218,70184],{"class":217},[102,70220,3869],{"class":112},[102,70222,1003],{"class":217},[102,70224,554],{"class":112},[102,70226,70173],{"class":217},[102,70228,70229],{"class":112},"gender",[102,70231,70179],{"class":217},[102,70233,70234,70236,70238,70240,70242,70244,70247],{"class":104,"line":32827},[102,70235,70184],{"class":217},[102,70237,3869],{"class":112},[102,70239,1003],{"class":217},[102,70241,554],{"class":112},[102,70243,70173],{"class":217},[102,70245,70246],{"class":112},"salary",[102,70248,70179],{"class":217},[102,70250,70251,70253,70255,70257,70259,70261,70264],{"class":104,"line":32833},[102,70252,70184],{"class":217},[102,70254,3869],{"class":112},[102,70256,1003],{"class":217},[102,70258,554],{"class":112},[102,70260,70173],{"class":217},[102,70262,70263],{"class":112},"city",[102,70265,70179],{"class":217},[102,70267,70268],{"class":104,"line":32842},[102,70269,69584],{"class":217},[102,70271,70272,70275,70277],{"class":104,"line":32848},[102,70273,70274],{"class":217},"            \u003Ca href=\"javascript:\" data-id=${",[102,70276,554],{"class":112},[102,70278,70279],{"class":217},"}>删除\u003C\u002Fa>\n",[102,70281,70282],{"class":104,"line":32857},[102,70283,70284],{"class":217},"          \u003C\u002Ftd> \n",[102,70286,70287],{"class":104,"line":32863},[102,70288,70289],{"class":217},"          `\n",[102,70291,70292],{"class":104,"line":32869},[102,70293,70294],{"class":171},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[102,70296,70297,70300,70303],{"class":104,"line":32878},[102,70298,70299],{"class":112},"        tbody.",[102,70301,70302],{"class":1952},"appendChild",[102,70304,70305],{"class":112},"(tr)\n",[102,70307,70308],{"class":104,"line":32884},[102,70309,52389],{"class":112},[102,70311,70312],{"class":104,"line":32895},[102,70313,2176],{"class":112},[102,70315,70316],{"class":104,"line":32901},[102,70317,2389],{"emptyLinePlaceholder":30},[102,70319,70320],{"class":104,"line":32920},[102,70321,70322],{"class":171},"    \u002F\u002F 3.删除委托\n",[102,70324,70325],{"class":104,"line":32926},[102,70326,70327],{"class":171},"    \u002F\u002F 3.1 事件委托 tbody\n",[102,70329,70330,70333,70335,70337,70339,70341,70343,70345,70347],{"class":104,"line":32937},[102,70331,70332],{"class":112},"    tbody.",[102,70334,57804],{"class":1952},[102,70336,113],{"class":112},[102,70338,57809],{"class":217},[102,70340,12425],{"class":112},[102,70342,54440],{"class":108},[102,70344,1647],{"class":112},[102,70346,187],{"class":5206},[102,70348,12432],{"class":112},[102,70350,70351,70353,70355,70357,70359],{"class":104,"line":32943},[102,70352,54471],{"class":108},[102,70354,67025],{"class":112},[102,70356,54477],{"class":108},[102,70358,68247],{"class":217},[102,70360,12432],{"class":112},[102,70362,70363],{"class":104,"line":32963},[102,70364,70365],{"class":171},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[102,70367,70368],{"class":104,"line":32979},[102,70369,70370],{"class":171},"        \u002F\u002F console.log(e.target.dataset.id);\n",[102,70372,70373],{"class":104,"line":32985},[102,70374,70375],{"class":171},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[102,70377,70378,70381,70383,70386,70388],{"class":104,"line":32999},[102,70379,70380],{"class":112},"        arr.",[102,70382,58001],{"class":1952},[102,70384,70385],{"class":112},"(e.target.dataset.id, ",[102,70387,330],{"class":161},[102,70389,119],{"class":112},[102,70391,70392],{"class":104,"line":33005},[102,70393,70394],{"class":171},"        \u002F\u002F 重新渲染一次\n",[102,70396,70397,70400],{"class":104,"line":33011},[102,70398,70399],{"class":1952},"        render",[102,70401,1965],{"class":112},[102,70403,70404],{"class":104,"line":33022},[102,70405,52389],{"class":112},[102,70407,70408],{"class":104,"line":33028},[102,70409,33452],{"class":112},[102,70411,70412,70414,70416],{"class":104,"line":33034},[102,70413,52408],{"class":112},[102,70415,51804],{"class":51291},[102,70417,51298],{"class":112},[102,70419,70420],{"class":104,"line":33044},[102,70421,2389],{"emptyLinePlaceholder":30},[102,70423,70424,70426,70428],{"class":104,"line":33050},[102,70425,51776],{"class":112},[102,70427,51791],{"class":51291},[102,70429,51298],{"class":112},[102,70431,70432],{"class":104,"line":33061},[102,70433,2389],{"emptyLinePlaceholder":30},[102,70435,70436,70438,70440],{"class":104,"line":33067},[102,70437,51776],{"class":112},[102,70439,50626],{"class":51291},[102,70441,51298],{"class":112},[19,70443,70444],{},"样式：",[93,70446,70450],{"className":70447,"code":70448,"language":70449,"meta":23,"style":23},"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",[99,70451,70452,70457,70467,70476,70480,70484,70489,70499,70504,70508,70513,70523,70528,70537,70541,70545,70550,70555,70565,70575,70580,70584,70589,70598,70608,70613,70623,70633,70637,70642,70650,70654,70659,70664,70669,70677,70686,70690,70695,70704,70708,70713,70722,70726,70731,70740,70749,70757,70761,70766,70775,70785,70794,70804,70810,70819,70829,70839,70843,70848,70857,70865,70875,70883,70892,70901,70911,70919,70923,70928,70937],{"__ignoreMap":23},[102,70453,70454],{"class":104,"line":105},[102,70455,70456],{"class":112},"* {\n",[102,70458,70459,70462,70464],{"class":104,"line":24},[102,70460,70461],{"class":51291},"  margin",[102,70463,51428],{"class":112},[102,70465,70466],{"class":217},"0;\n",[102,70468,70469,70472,70474],{"class":104,"line":1168},[102,70470,70471],{"class":217},"  padding",[102,70473,51428],{"class":112},[102,70475,70466],{"class":217},[102,70477,70478],{"class":104,"line":1183},[102,70479,1554],{"class":112},[102,70481,70482],{"class":104,"line":1189},[102,70483,2389],{"emptyLinePlaceholder":30},[102,70485,70486],{"class":104,"line":1203},[102,70487,70488],{"class":217},"a {\n",[102,70490,70491,70494,70496],{"class":104,"line":1209},[102,70492,70493],{"class":51291},"  text-decoration",[102,70495,51428],{"class":112},[102,70497,70498],{"class":217},"none;\n",[102,70500,70501],{"class":104,"line":1300},[102,70502,70503],{"class":217},"  color:#721c24;\n",[102,70505,70506],{"class":104,"line":1306},[102,70507,1554],{"class":112},[102,70509,70510],{"class":104,"line":1318},[102,70511,70512],{"class":217},"h1 {\n",[102,70514,70515,70518,70520],{"class":104,"line":1601},[102,70516,70517],{"class":51291},"  text-align",[102,70519,51428],{"class":112},[102,70521,70522],{"class":217},"center;\n",[102,70524,70525],{"class":104,"line":1606},[102,70526,70527],{"class":217},"  color:#333;\n",[102,70529,70530,70532,70534],{"class":104,"line":1612},[102,70531,70461],{"class":51291},[102,70533,51428],{"class":112},[102,70535,70536],{"class":217},"20px 0;\n",[102,70538,70539],{"class":104,"line":1617},[102,70540,2663],{"class":112},[102,70542,70543],{"class":104,"line":1631},[102,70544,1554],{"class":112},[102,70546,70547],{"class":104,"line":1636},[102,70548,70549],{"class":217},"table {\n",[102,70551,70552],{"class":104,"line":1642},[102,70553,70554],{"class":217},"  margin:0 auto;\n",[102,70556,70557,70560,70562],{"class":104,"line":1663},[102,70558,70559],{"class":51291},"  width",[102,70561,51428],{"class":112},[102,70563,70564],{"class":217},"800px;\n",[102,70566,70567,70570,70572],{"class":104,"line":1668},[102,70568,70569],{"class":51291},"  border-collapse",[102,70571,51428],{"class":112},[102,70573,70574],{"class":217},"collapse;\n",[102,70576,70577],{"class":104,"line":1682},[102,70578,70579],{"class":217},"  color:#004085;\n",[102,70581,70582],{"class":104,"line":1687},[102,70583,1554],{"class":112},[102,70585,70586],{"class":104,"line":1716},[102,70587,70588],{"class":217},"th {\n",[102,70590,70591,70593,70595],{"class":104,"line":1721},[102,70592,70471],{"class":51291},[102,70594,51428],{"class":112},[102,70596,70597],{"class":217},"10px;\n",[102,70599,70600,70603,70605],{"class":104,"line":1738},[102,70601,70602],{"class":51291},"  background",[102,70604,51428],{"class":112},[102,70606,70607],{"class":171},"#cfe5ff;\n",[102,70609,70610],{"class":104,"line":1743},[102,70611,70612],{"class":112},"  \n",[102,70614,70615,70618,70620],{"class":104,"line":1748},[102,70616,70617],{"class":51291},"  font-size",[102,70619,51428],{"class":112},[102,70621,70622],{"class":217},"20px;\n",[102,70624,70625,70628,70630],{"class":104,"line":1753},[102,70626,70627],{"class":51291},"  font-weight",[102,70629,51428],{"class":112},[102,70631,70632],{"class":217},"400;\n",[102,70634,70635],{"class":104,"line":1767},[102,70636,1554],{"class":112},[102,70638,70639],{"class":104,"line":1772},[102,70640,70641],{"class":217},"td,th {\n",[102,70643,70644,70647],{"class":104,"line":2566},[102,70645,70646],{"class":217},"  border:1px solid",[102,70648,70649],{"class":171}," #b8daff;\n",[102,70651,70652],{"class":104,"line":2580},[102,70653,1554],{"class":112},[102,70655,70656],{"class":104,"line":2588},[102,70657,70658],{"class":217},"td {\n",[102,70660,70661],{"class":104,"line":2593},[102,70662,70663],{"class":217},"  padding:10px;\n",[102,70665,70666],{"class":104,"line":2599},[102,70667,70668],{"class":217},"  color:#666;\n",[102,70670,70671,70673,70675],{"class":104,"line":2605},[102,70672,70517],{"class":51291},[102,70674,51428],{"class":112},[102,70676,70522],{"class":217},[102,70678,70679,70681,70683],{"class":104,"line":2610},[102,70680,70617],{"class":51291},[102,70682,51428],{"class":112},[102,70684,70685],{"class":217},"16px;\n",[102,70687,70688],{"class":104,"line":7938},[102,70689,1554],{"class":112},[102,70691,70692],{"class":104,"line":7962},[102,70693,70694],{"class":217},"tbody tr {\n",[102,70696,70697,70699,70701],{"class":104,"line":7967},[102,70698,70602],{"class":51291},[102,70700,51428],{"class":112},[102,70702,70703],{"class":171},"#fff;\n",[102,70705,70706],{"class":104,"line":7973},[102,70707,1554],{"class":112},[102,70709,70710],{"class":104,"line":8000},[102,70711,70712],{"class":217},"tbody tr:hover {\n",[102,70714,70715,70717,70719],{"class":104,"line":8005},[102,70716,70602],{"class":51291},[102,70718,51428],{"class":112},[102,70720,70721],{"class":171},"#e1ecf8;\n",[102,70723,70724],{"class":104,"line":8011},[102,70725,1554],{"class":112},[102,70727,70728],{"class":104,"line":8023},[102,70729,70730],{"class":217},".info {\n",[102,70732,70733,70735,70737],{"class":104,"line":8035},[102,70734,70559],{"class":51291},[102,70736,51428],{"class":112},[102,70738,70739],{"class":217},"900px;\n",[102,70741,70742,70744,70746],{"class":104,"line":8047},[102,70743,70461],{"class":51291},[102,70745,51428],{"class":112},[102,70747,70748],{"class":217},"50px auto;\n",[102,70750,70751,70753,70755],{"class":104,"line":9706},[102,70752,70517],{"class":51291},[102,70754,51428],{"class":112},[102,70756,70522],{"class":217},[102,70758,70759],{"class":104,"line":9731},[102,70760,1554],{"class":112},[102,70762,70763],{"class":104,"line":9754},[102,70764,70765],{"class":217},".info  input, .info select {\n",[102,70767,70768,70770,70772],{"class":104,"line":9778},[102,70769,70559],{"class":51291},[102,70771,51428],{"class":112},[102,70773,70774],{"class":217},"80px;\n",[102,70776,70777,70780,70782],{"class":104,"line":9783},[102,70778,70779],{"class":51291},"  height",[102,70781,51428],{"class":112},[102,70783,70784],{"class":217},"27px;\n",[102,70786,70787,70790,70792],{"class":104,"line":9788},[102,70788,70789],{"class":51291},"  outline",[102,70791,51428],{"class":112},[102,70793,70498],{"class":217},[102,70795,70796,70799,70801],{"class":104,"line":9793},[102,70797,70798],{"class":51291},"  border-radius",[102,70800,51428],{"class":112},[102,70802,70803],{"class":217},"5px;\n",[102,70805,70806,70808],{"class":104,"line":9802},[102,70807,70646],{"class":217},[102,70809,70649],{"class":171},[102,70811,70812,70815,70817],{"class":104,"line":9807},[102,70813,70814],{"class":51291},"  padding-left",[102,70816,51428],{"class":112},[102,70818,70803],{"class":217},[102,70820,70821,70824,70826],{"class":104,"line":9813},[102,70822,70823],{"class":51291},"  box-sizing",[102,70825,51428],{"class":112},[102,70827,70828],{"class":217},"border-box;\n",[102,70830,70831,70834,70836],{"class":104,"line":9834},[102,70832,70833],{"class":51291},"  margin-right",[102,70835,51428],{"class":112},[102,70837,70838],{"class":217},"15px;\n",[102,70840,70841],{"class":104,"line":9840},[102,70842,1554],{"class":112},[102,70844,70845],{"class":104,"line":9854},[102,70846,70847],{"class":217},".info button {\n",[102,70849,70850,70852,70854],{"class":104,"line":9860},[102,70851,70559],{"class":51291},[102,70853,51428],{"class":112},[102,70855,70856],{"class":217},"60px;\n",[102,70858,70859,70861,70863],{"class":104,"line":9887},[102,70860,70779],{"class":51291},[102,70862,51428],{"class":112},[102,70864,70784],{"class":217},[102,70866,70867,70870,70872],{"class":104,"line":9896},[102,70868,70869],{"class":51291},"  background-color",[102,70871,51428],{"class":112},[102,70873,70874],{"class":171},"#004085;\n",[102,70876,70877,70879,70881],{"class":104,"line":9902},[102,70878,70789],{"class":51291},[102,70880,51428],{"class":112},[102,70882,70498],{"class":217},[102,70884,70885,70888,70890],{"class":104,"line":9910},[102,70886,70887],{"class":51291},"  border",[102,70889,51428],{"class":112},[102,70891,70466],{"class":217},[102,70893,70894,70897,70899],{"class":104,"line":9915},[102,70895,70896],{"class":51291},"  color",[102,70898,51428],{"class":112},[102,70900,70703],{"class":171},[102,70902,70903,70906,70908],{"class":104,"line":16594},[102,70904,70905],{"class":51291},"  cursor",[102,70907,51428],{"class":112},[102,70909,70910],{"class":217},"pointer;\n",[102,70912,70913,70915,70917],{"class":104,"line":16600},[102,70914,70798],{"class":51291},[102,70916,51428],{"class":112},[102,70918,70803],{"class":217},[102,70920,70921],{"class":104,"line":16623},[102,70922,1554],{"class":112},[102,70924,70925],{"class":104,"line":16629},[102,70926,70927],{"class":217},".info .age {\n",[102,70929,70930,70932,70934],{"class":104,"line":16652},[102,70931,70559],{"class":51291},[102,70933,51428],{"class":112},[102,70935,70936],{"class":217},"50px;\n",[102,70938,70939],{"class":104,"line":16666},[102,70940,1554],{"class":112},[19,70942,70943],{},"思路：",[19,70945,70946],{},[1451,70947],{"alt":23,"src":70948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,70950,70951],{},[1451,70952],{"alt":23,"src":70953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,70955,70956],{},[1451,70957],{"alt":23,"src":70958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[73,70960,70962],{"id":70961},"_3315-重绘回流","3.3.15 重绘回流",[19,70964,70965],{},[1451,70966],{"alt":23,"src":70967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,70969,70970],{},[1451,70971],{"alt":23,"src":70972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,70974,70975],{},[1451,70976],{"alt":23,"src":70977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,70979,70981],{"id":70980},"_34-bom","3.4 BOM",[19,70983,70984],{},[1451,70985],{"alt":23,"src":70986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,70988,70989],{},"平时写的document省略了window而已，实际上是window.document",[19,70991,70992],{},"函数也是这样，调用的时候实际为window.fn()",[19,70994,70995],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,70997,70998],{},"window大部分情况下可以省略",[73,71000,71002],{"id":71001},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71004,71005],{},"只执行一次",[19,71007,71008],{},[1451,71009],{"alt":23,"src":71010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71012,71013],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71015,71016],{},[1451,71017],{"alt":23,"src":71018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[73,71020,71022],{"id":71021},"_342-js执行机制","3.4.2 JS执行机制",[19,71024,71025],{},[1451,71026],{"alt":23,"src":71027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71029,71030],{},"两个的结果都是1111 3333 2222",[19,71032,71033],{},[1451,71034],{"alt":23,"src":71035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71037,71038],{},[1451,71039],{"alt":23,"src":71040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71042,71043],{},[1451,71044],{"alt":23,"src":71045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71047,71048],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71050,71051],{},"工作流程：",[19,71053,71054],{},[1451,71055],{"alt":23,"src":71056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71058,71059],{},[1451,71060],{"alt":23,"src":71061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71063,71064],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71066,71067],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[73,71069,71071],{"id":71070},"_343-location对象","3.4.3 location对象",[19,71073,71074],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71076,71077],{},[1451,71078],{"alt":23,"src":71079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71081,71082],{},"href可以跳转页面",[56,71084,71085],{},[59,71086,71087],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71089,71090],{},"search得到提交信息之后网站后边的地址",[19,71092,71093],{},[1451,71094],{"alt":23,"src":71095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71097,71098],{},[1451,71099],{"alt":23,"src":71100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[56,71102,71103],{"start":24},[59,71104,71105],{},"hash:这个获取单页面应用#后边的地址",[19,71107,71108],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71110,71111],{},[1451,71112],{"alt":23,"src":71113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[93,71115,71117],{"className":53058,"code":71116,"language":53060,"meta":23,"style":23},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[99,71118,71119,71139,71159],{"__ignoreMap":23},[102,71120,71121,71123,71125,71127,71129,71132,71135,71137],{"class":104,"line":105},[102,71122,52135],{"class":112},[102,71124,351],{"class":51291},[102,71126,61048],{"class":1952},[102,71128,158],{"class":112},[102,71130,71131],{"class":217},"\"#\u002Fmy\"",[102,71133,71134],{"class":112},">我的\u003C\u002F",[102,71136,351],{"class":51291},[102,71138,51298],{"class":112},[102,71140,71141,71143,71145,71147,71149,71152,71155,71157],{"class":104,"line":24},[102,71142,52135],{"class":112},[102,71144,351],{"class":51291},[102,71146,61048],{"class":1952},[102,71148,158],{"class":112},[102,71150,71151],{"class":217},"\"#\u002Ffriend\"",[102,71153,71154],{"class":112},">关注\u003C\u002F",[102,71156,351],{"class":51291},[102,71158,51298],{"class":112},[102,71160,71161,71163,71165,71167,71169,71172,71175,71177],{"class":104,"line":1168},[102,71162,52135],{"class":112},[102,71164,351],{"class":51291},[102,71166,61048],{"class":1952},[102,71168,158],{"class":112},[102,71170,71171],{"class":217},"\"#\u002Fdownload\"",[102,71173,71174],{"class":112},">下载\u003C\u002F",[102,71176,351],{"class":51291},[102,71178,51298],{"class":112},[19,71180,71181],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[56,71183,71184],{"start":1168},[59,71185,71186,71187,71189,71190,71192],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53707,71188],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53707,71191],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[73,71194,71196],{"id":71195},"_345-navigator对象","3.4.5 navigator对象",[19,71198,71199],{},[1451,71200],{"alt":23,"src":71201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[93,71203,71207],{"className":71204,"code":71205,"language":71206,"meta":23,"style":23},"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",[99,71208,71209,71214,71225,71237,71242,71293,71334,71339,71352,71364,71369],{"__ignoreMap":23},[102,71210,71211],{"class":104,"line":105},[102,71212,71213],{"class":171},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[102,71215,71216,71218,71220,71222],{"class":104,"line":24},[102,71217,339],{"class":108},[102,71219,113],{"class":112},[102,71221,54440],{"class":108},[102,71223,71224],{"class":112}," () { \n",[102,71226,71227,71229,71232,71234],{"class":104,"line":1168},[102,71228,6782],{"class":108},[102,71230,71231],{"class":161}," userAgent",[102,71233,13554],{"class":108},[102,71235,71236],{"class":112}," navigator.userAgent \n",[102,71238,71239],{"class":104,"line":1183},[102,71240,71241],{"class":171},"\u002F\u002F 验证是否为Android或iPhone \n",[102,71243,71244,71246,71249,71251,71254,71257,71259,71261,71264,71266,71269,71273,71275,71277,71279,71282,71284,71286,71288,71290],{"class":104,"line":1189},[102,71245,6782],{"class":108},[102,71247,71248],{"class":161}," android",[102,71250,13554],{"class":108},[102,71252,71253],{"class":112}," userAgent.",[102,71255,71256],{"class":1952},"match",[102,71258,113],{"class":112},[102,71260,697],{"class":217},[102,71262,71263],{"class":47968},"(Android);",[102,71265,1099],{"class":108},[102,71267,71268],{"class":161},"[\\s",[102,71270,71272],{"class":71271},"snhLl","\\\u002F",[102,71274,1053],{"class":161},[102,71276,594],{"class":108},[102,71278,113],{"class":47968},[102,71280,71281],{"class":161},"[\\d.]",[102,71283,594],{"class":108},[102,71285,542],{"class":47968},[102,71287,1099],{"class":108},[102,71289,697],{"class":217},[102,71291,71292],{"class":112},") \n",[102,71294,71295,71297,71300,71302,71304,71306,71308,71310,71313,71316,71319,71321,71323,71326,71328,71330,71332],{"class":104,"line":1203},[102,71296,6782],{"class":108},[102,71298,71299],{"class":161}," iphone",[102,71301,13554],{"class":108},[102,71303,71253],{"class":112},[102,71305,71256],{"class":1952},[102,71307,113],{"class":112},[102,71309,697],{"class":217},[102,71311,71312],{"class":47968},"(iPhone",[102,71314,71315],{"class":161},"\\s",[102,71317,71318],{"class":47968},"OS)",[102,71320,71315],{"class":161},[102,71322,113],{"class":47968},[102,71324,71325],{"class":161},"[\\d_]",[102,71327,594],{"class":108},[102,71329,542],{"class":47968},[102,71331,697],{"class":217},[102,71333,71292],{"class":112},[102,71335,71336],{"class":104,"line":1209},[102,71337,71338],{"class":171},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[102,71340,71341,71343,71346,71349],{"class":104,"line":1300},[102,71342,1520],{"class":108},[102,71344,71345],{"class":112}," (android ",[102,71347,71348],{"class":108},"||",[102,71350,71351],{"class":112}," iphone) { \n",[102,71353,71354,71357,71359,71362],{"class":104,"line":1306},[102,71355,71356],{"class":112},"location.href ",[102,71358,158],{"class":108},[102,71360,71361],{"class":217}," 'http:\u002F\u002Fm.itcast.cn'",[102,71363,2663],{"class":112},[102,71365,71366],{"class":104,"line":1318},[102,71367,71368],{"class":112},"} \n",[102,71370,71371],{"class":104,"line":1601},[102,71372,71373],{"class":112},"})()\n",[73,71375,71377],{"id":71376},"_346-histroy对象","3.4.6 histroy对象",[19,71379,71380],{},[1451,71381],{"alt":23,"src":71382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71384,71385],{},"浏览器地址的前进与后退!!!",[19,71387,71388],{},"history.back() 等效于 history.go(-1)",[19,71390,71391],{},"history.forward() 等效于 history.go(1)",[14,71393,71395],{"id":71394},"_35-本地存储","3.5 本地存储",[56,71397,71398,71401,71404],{},[59,71399,71400],{},"数据存储在用户浏览器中",[59,71402,71403],{},"设置、读取方便、甚至页面刷新不丢失数据",[59,71405,71406],{},"容量较大，sessionStorage和localStorage约 5M 左右",[73,71408,71410],{"id":71409},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71412,71413],{},"只能存储字符串",[19,71415,71416],{},[1451,71417],{"alt":23,"src":71418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71420,71421],{},[1451,71422],{"alt":23,"src":71423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71425,71426],{},"键值对要加引号,不然就会当变量来看了",[19,71428,71429],{},"localStorage.setItem('uname', 'pink')",[19,71431,71432],{},"刷新之后信息不再丢失",[19,71434,71435],{},"操作key,value会跟着变",[19,71437,71438],{},"删除只删除键就可以,即名字",[19,71440,71429],{},[19,71442,71443],{},"改:",[19,71445,71446],{},"localStorage.setItem('uname','red')",[19,71448,71449],{},"有这个键就是改,没有这个键就是改",[19,71451,71452],{},[1451,71453],{"alt":23,"src":71454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71456,71457],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71459,71460],{},[1451,71461],{"alt":23,"src":71462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71464,71465],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[73,71467,71469],{"id":71468},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71471,71472],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71474,71475],{},"特性:",[56,71477,71478,71481,71484,71487],{},[59,71479,71480],{},"生命周期为关闭浏览器窗口",[59,71482,71483],{},"在同一个窗口(页面)下数据可以共享",[59,71485,71486],{},"以键值对的形式存储使用",[59,71488,71489],{},"用法跟localStorage 基本相同",[73,71491,71493],{"id":71492},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71495,71496],{},"本地只能存储字符串,无法直接存储复杂数据类型",[93,71498,71500],{"className":53058,"code":71499,"language":53060,"meta":23,"style":23},"\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",[99,71501,71502,71510,71515,71520,71525,71530,71534,71539,71544],{"__ignoreMap":23},[102,71503,71504,71506,71508],{"class":104,"line":105},[102,71505,1023],{"class":112},[102,71507,51804],{"class":51291},[102,71509,51298],{"class":112},[102,71511,71512],{"class":104,"line":24},[102,71513,71514],{"class":112},"    const obj = {\n",[102,71516,71517],{"class":104,"line":1168},[102,71518,71519],{"class":112},"      uname: 'pink老师',\n",[102,71521,71522],{"class":104,"line":1183},[102,71523,71524],{"class":112},"      age: 18,\n",[102,71526,71527],{"class":104,"line":1189},[102,71528,71529],{"class":112},"      gender: '女'\n",[102,71531,71532],{"class":104,"line":1203},[102,71533,2176],{"class":112},[102,71535,71536],{"class":104,"line":1209},[102,71537,71538],{"class":112},"    \u002F\u002F 存储复杂数据类型\n",[102,71540,71541],{"class":104,"line":1300},[102,71542,71543],{"class":112},"    localStorage.setItem('obj', obj)\n",[102,71545,71546,71548,71550],{"class":104,"line":1306},[102,71547,52408],{"class":112},[102,71549,51804],{"class":51291},[102,71551,51298],{"class":112},[19,71553,71554],{},[1451,71555],{"alt":23,"src":71556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71558,71559],{},"如果获取一下数据:",[19,71561,71562],{},"log(localStorage.getItem('obj'))",[19,71564,71565],{},[1451,71566],{"alt":23,"src":71567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71569,71570],{},"发现直接存对象是使用不了的!!!",[21988,71572,71574],{"id":71573},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71576,71577],{},[1451,71578],{"alt":23,"src":71579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[93,71581,71583],{"className":50624,"code":71582,"language":50626,"meta":23,"style":23},"\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",[99,71584,71585,71593,71603,71613,71622,71630,71634,71638,71664,71683,71691,71695,71700,71705],{"__ignoreMap":23},[102,71586,71587,71589,71591],{"class":104,"line":105},[102,71588,1023],{"class":112},[102,71590,51804],{"class":51291},[102,71592,51298],{"class":112},[102,71594,71595,71597,71599,71601],{"class":104,"line":24},[102,71596,11211],{"class":108},[102,71598,69962],{"class":161},[102,71600,13554],{"class":108},[102,71602,15562],{"class":112},[102,71604,71605,71608,71611],{"class":104,"line":1168},[102,71606,71607],{"class":112},"      uname: ",[102,71609,71610],{"class":217},"'pink老师'",[102,71612,31457],{"class":112},[102,71614,71615,71618,71620],{"class":104,"line":1183},[102,71616,71617],{"class":112},"      age: ",[102,71619,763],{"class":161},[102,71621,31457],{"class":112},[102,71623,71624,71627],{"class":104,"line":1189},[102,71625,71626],{"class":112},"      gender: ",[102,71628,71629],{"class":217},"'女'\n",[102,71631,71632],{"class":104,"line":1203},[102,71633,2176],{"class":112},[102,71635,71636],{"class":104,"line":1209},[102,71637,71538],{"class":171},[102,71639,71640,71643,71646,71648,71651,71653,71656,71658,71661],{"class":104,"line":1300},[102,71641,71642],{"class":112},"  localStorage.",[102,71644,71645],{"class":1952},"setItem",[102,71647,113],{"class":112},[102,71649,71650],{"class":217},"'obj'",[102,71652,12425],{"class":112},[102,71654,71655],{"class":161},"JSON",[102,71657,671],{"class":112},[102,71659,71660],{"class":1952},"stringify",[102,71662,71663],{"class":112},"(obj))\n",[102,71665,71666,71669,71671,71674,71677,71679,71681],{"class":104,"line":1306},[102,71667,71668],{"class":112},"  console.",[102,71670,58238],{"class":1952},[102,71672,71673],{"class":112},"(localStorage.",[102,71675,71676],{"class":1952},"getItem",[102,71678,113],{"class":112},[102,71680,71650],{"class":217},[102,71682,30488],{"class":112},[102,71684,71685,71687,71689],{"class":104,"line":1318},[102,71686,52408],{"class":112},[102,71688,51804],{"class":51291},[102,71690,51298],{"class":112},[102,71692,71693],{"class":104,"line":1601},[102,71694,70612],{"class":112},[102,71696,71697],{"class":104,"line":1606},[102,71698,71699],{"class":112},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[102,71701,71702],{"class":104,"line":1612},[102,71703,71704],{"class":112},"  类型是字符串的\n",[102,71706,71707],{"class":104,"line":1617},[102,71708,71709],{"class":112},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21988,71711,71713],{"id":71712},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71715,71716],{},[1451,71717],{"alt":23,"src":71718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,71720,71721],{},[1451,71722],{"alt":23,"src":71723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[93,71725,71727],{"className":53058,"code":71726,"language":53060,"meta":23,"style":23},"  \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",[99,71728,71729,71737,71741,71745,71749,71753,71757,71762,71767,71772,71777,71782,71787,71792,71797],{"__ignoreMap":23},[102,71730,71731,71733,71735],{"class":104,"line":105},[102,71732,52135],{"class":112},[102,71734,51804],{"class":51291},[102,71736,51298],{"class":112},[102,71738,71739],{"class":104,"line":24},[102,71740,71514],{"class":112},[102,71742,71743],{"class":104,"line":1168},[102,71744,71519],{"class":112},[102,71746,71747],{"class":104,"line":1183},[102,71748,71524],{"class":112},[102,71750,71751],{"class":104,"line":1189},[102,71752,71529],{"class":112},[102,71754,71755],{"class":104,"line":1203},[102,71756,2176],{"class":112},[102,71758,71759],{"class":104,"line":1209},[102,71760,71761],{"class":112},"    \u002F\u002F 1.存储复杂数据类型\n",[102,71763,71764],{"class":104,"line":1300},[102,71765,71766],{"class":112},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[102,71768,71769],{"class":104,"line":1306},[102,71770,71771],{"class":112},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[102,71773,71774],{"class":104,"line":1318},[102,71775,71776],{"class":112},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[102,71778,71779],{"class":104,"line":1601},[102,71780,71781],{"class":112},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[102,71783,71784],{"class":104,"line":1606},[102,71785,71786],{"class":112},"    \u002F\u002F 取\n",[102,71788,71789],{"class":104,"line":1612},[102,71790,71791],{"class":112},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[102,71793,71794],{"class":104,"line":1617},[102,71795,71796],{"class":112},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[102,71798,71799,71801,71803],{"class":104,"line":1631},[102,71800,52408],{"class":112},[102,71802,51804],{"class":51291},[102,71804,51298],{"class":112},[19,71806,71807],{},[1451,71808],{"alt":23,"src":71809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[73,71811,71813],{"id":71812},"_356-数组map方法","3.5.6 数组map方法",[19,71815,71816],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,71818,71819],{},[1451,71820],{"alt":23,"src":71821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,71823,71824],{},[1451,71825],{"alt":23,"src":71826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,71828,71829,71832],{},[262,71830,71831],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,71834,71835],{},"map有返回值，但是forEach没有返回值",[19,71837,71838],{},"map是个方法。用的时候要加 ()",[19,71840,71841],{},"map返回的是一个数组",[73,71843,71845],{"id":71844},"_357-数组中join方法","3.5.7 数组中join方法",[19,71847,71848],{},[1451,71849],{"alt":23,"src":71850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,71852,71853],{},"类似于python中拼接字符串一样！",[56,71855,71856,71859,71862],{},[59,71857,71858],{},"小括号为空则逗号分开",[59,71860,71861],{},"小括号为空字符串 ''，则元素之间没有分隔符",[59,71863,71864],{},"小括号用啥符号就用进行分割",[73,71866,71868],{"id":71867},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[56,71870,71871,71874,71877,71880,71883],{},[59,71872,71873],{},"记住本地时间获取快速方式：new Date().toDateString()",[59,71875,71876],{},"尽量减少DOM操作，用好map+join的渲染方式",[59,71878,71879],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[59,71881,71882],{},"return可以实现函数的结束",[59,71884,71885],{},"禁止跳转是 preventDefault() 不要忘记",[93,71887,71889],{"className":50624,"code":71888,"language":50626,"meta":23,"style":23},"\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",[99,71890,71891,71901,71915,71919,71927,71941,71961,71973,71981,71987,71997,72007,72011,72015,72021,72031,72043,72047,72051,72058,72070,72084,72094,72098,72102,72109,72116,72123,72135,72147,72157,72169,72173,72177,72184,72191,72203,72215,72225,72237,72267,72271,72275,72282,72294,72306,72330,72340,72350,72354,72358,72366,72377,72389,72401,72413,72430,72442,72454,72458,72462,72469,72481,72493,72505,72516,72534,72547,72559,72583,72594,72598,72602,72610,72620,72624,72628,72634,72646,72657,72667,72671,72675,72681,72703,72707,72711,72717,72723,72735,72745,72757,72787,72800,72817,72821,72825,72836,72858,72868,72872,72876,72889,72899,72911,72923,72935,72947,72957,72967,72977,72988,73001,73005,73013,73021,73025,73033,73046,73066,73099,73132,73165,73191,73209,73227,73235,73261,73279,73297,73315,73333,73351,73359,73367,73385,73393,73422,73430,73438,73446,73459,73471,73483,73495,73507,73519,73532,73544,73552,73560,73568,73573,73578,73582,73586,73590,73594,73598,73602,73607,73612,73617,73622,73630,73638,73646,73651,73656,73661,73666,73671,73676,73681,73686,73691,73696,73701,73706,73711,73716,73720,73725,73730,73740,73749,73753,73758,73767,73783,73825,73865,73904,73969,73977,73981,73986,74004,74012,74017,74022,74052,74058,74063,74076,74088,74100,74112,74124,74136,74148,74152,74162,74166,74171,74176,74180,74189,74193,74198,74203,74222,74227,74247,74251,74256,74260,74265,74283,74301,74319,74338,74357,74376,74381,74387,74408,74414,74423,74429,74435,74441,74468,74481,74486,74496,74502,74508,74514,74520,74525,74531,74537,74543,74549,74582,74587,74592,74597,74602,74608,74614,74620,74631,74636,74642,74649,74663,74669,74693,74698,74703,74709,74715,74736,74742,74755,74761,74767,74773,74779,74784,74790,74796,74802,74820,74834,74840,74848,74854,74876,74881,74886,74891,74896,74901,74910,74919,74924],{"__ignoreMap":23},[102,71892,71893,71895,71897,71899],{"class":104,"line":105},[102,71894,51288],{"class":112},[102,71896,51292],{"class":51291},[102,71898,51295],{"class":1952},[102,71900,51298],{"class":112},[102,71902,71903,71905,71907,71909,71911,71913],{"class":104,"line":24},[102,71904,1023],{"class":112},[102,71906,50626],{"class":51291},[102,71908,51307],{"class":1952},[102,71910,158],{"class":112},[102,71912,51312],{"class":217},[102,71914,51298],{"class":112},[102,71916,71917],{"class":104,"line":1168},[102,71918,2389],{"emptyLinePlaceholder":30},[102,71920,71921,71923,71925],{"class":104,"line":1183},[102,71922,1023],{"class":112},[102,71924,51325],{"class":51291},[102,71926,51298],{"class":112},[102,71928,71929,71931,71933,71935,71937,71939],{"class":104,"line":1189},[102,71930,52135],{"class":112},[102,71932,51335],{"class":51291},[102,71934,51338],{"class":1952},[102,71936,158],{"class":112},[102,71938,51343],{"class":217},[102,71940,51298],{"class":112},[102,71942,71943,71945,71947,71949,71951,71953,71955,71957,71959],{"class":104,"line":1203},[102,71944,52135],{"class":112},[102,71946,51335],{"class":51291},[102,71948,14910],{"class":1952},[102,71950,158],{"class":112},[102,71952,51382],{"class":217},[102,71954,51362],{"class":1952},[102,71956,158],{"class":112},[102,71958,51389],{"class":217},[102,71960,51298],{"class":112},[102,71962,71963,71965,71967,71969,71971],{"class":104,"line":1209},[102,71964,52135],{"class":112},[102,71966,51398],{"class":51291},[102,71968,51401],{"class":112},[102,71970,51398],{"class":51291},[102,71972,51298],{"class":112},[102,71974,71975,71977,71979],{"class":104,"line":1300},[102,71976,52135],{"class":112},[102,71978,5116],{"class":51291},[102,71980,51298],{"class":112},[102,71982,71983,71985],{"class":104,"line":1306},[102,71984,6393],{"class":51291},[102,71986,15562],{"class":112},[102,71988,71989,71991,71993,71995],{"class":104,"line":1318},[102,71990,54686],{"class":161},[102,71992,51428],{"class":112},[102,71994,304],{"class":161},[102,71996,1279],{"class":112},[102,71998,71999,72001,72003,72005],{"class":104,"line":1601},[102,72000,54697],{"class":161},[102,72002,51428],{"class":112},[102,72004,304],{"class":161},[102,72006,1279],{"class":112},[102,72008,72009],{"class":104,"line":1606},[102,72010,2176],{"class":112},[102,72012,72013],{"class":104,"line":1612},[102,72014,2389],{"emptyLinePlaceholder":30},[102,72016,72017,72019],{"class":104,"line":1617},[102,72018,57270],{"class":51291},[102,72020,15562],{"class":112},[102,72022,72023,72025,72027,72029],{"class":104,"line":1631},[102,72024,57277],{"class":161},[102,72026,51428],{"class":112},[102,72028,51583],{"class":161},[102,72030,1279],{"class":112},[102,72032,72033,72035,72037,72039,72041],{"class":104,"line":1636},[102,72034,62068],{"class":161},[102,72036,51428],{"class":112},[102,72038,813],{"class":161},[102,72040,51483],{"class":108},[102,72042,1279],{"class":112},[102,72044,72045],{"class":104,"line":1642},[102,72046,2176],{"class":112},[102,72048,72049],{"class":104,"line":1663},[102,72050,2389],{"emptyLinePlaceholder":30},[102,72052,72053,72056],{"class":104,"line":1668},[102,72054,72055],{"class":1952},"    .info",[102,72057,15562],{"class":112},[102,72059,72060,72062,72064,72066,72068],{"class":104,"line":1682},[102,72061,54762],{"class":161},[102,72063,51428],{"class":112},[102,72065,51480],{"class":161},[102,72067,51483],{"class":108},[102,72069,1279],{"class":112},[102,72071,72072,72074,72076,72078,72080,72082],{"class":104,"line":1687},[102,72073,54697],{"class":161},[102,72075,51428],{"class":112},[102,72077,559],{"class":161},[102,72079,51483],{"class":108},[102,72081,51547],{"class":161},[102,72083,1279],{"class":112},[102,72085,72086,72088,72090,72092],{"class":104,"line":1716},[102,72087,57277],{"class":161},[102,72089,51428],{"class":112},[102,72091,51583],{"class":161},[102,72093,1279],{"class":112},[102,72095,72096],{"class":104,"line":1721},[102,72097,2176],{"class":112},[102,72099,72100],{"class":104,"line":1738},[102,72101,2389],{"emptyLinePlaceholder":30},[102,72103,72104,72107],{"class":104,"line":1743},[102,72105,72106],{"class":1952},"    .uname",[102,72108,31457],{"class":112},[102,72110,72111,72114],{"class":104,"line":1748},[102,72112,72113],{"class":1952},"    .age",[102,72115,31457],{"class":112},[102,72117,72118,72121],{"class":104,"line":1753},[102,72119,72120],{"class":1952},"    .salary",[102,72122,15562],{"class":112},[102,72124,72125,72127,72129,72131,72133],{"class":104,"line":1767},[102,72126,54762],{"class":161},[102,72128,51428],{"class":112},[102,72130,424],{"class":161},[102,72132,51483],{"class":108},[102,72134,1279],{"class":112},[102,72136,72137,72139,72141,72143,72145],{"class":104,"line":1772},[102,72138,54776],{"class":161},[102,72140,51428],{"class":112},[102,72142,813],{"class":161},[102,72144,51483],{"class":108},[102,72146,1279],{"class":112},[102,72148,72149,72151,72153,72155],{"class":104,"line":2566},[102,72150,61771],{"class":161},[102,72152,51428],{"class":112},[102,72154,54728],{"class":161},[102,72156,1279],{"class":112},[102,72158,72159,72161,72163,72165,72167],{"class":104,"line":2580},[102,72160,61741],{"class":161},[102,72162,51428],{"class":112},[102,72164,688],{"class":161},[102,72166,51483],{"class":108},[102,72168,1279],{"class":112},[102,72170,72171],{"class":104,"line":2588},[102,72172,2176],{"class":112},[102,72174,72175],{"class":104,"line":2593},[102,72176,2389],{"emptyLinePlaceholder":30},[102,72178,72179,72182],{"class":104,"line":2599},[102,72180,72181],{"class":1952},"    .gender",[102,72183,31457],{"class":112},[102,72185,72186,72189],{"class":104,"line":2605},[102,72187,72188],{"class":1952},"    .city",[102,72190,15562],{"class":112},[102,72192,72193,72195,72197,72199,72201],{"class":104,"line":2610},[102,72194,54762],{"class":161},[102,72196,51428],{"class":112},[102,72198,424],{"class":161},[102,72200,51483],{"class":108},[102,72202,1279],{"class":112},[102,72204,72205,72207,72209,72211,72213],{"class":104,"line":7938},[102,72206,54776],{"class":161},[102,72208,51428],{"class":112},[102,72210,938],{"class":161},[102,72212,51483],{"class":108},[102,72214,1279],{"class":112},[102,72216,72217,72219,72221,72223],{"class":104,"line":7962},[102,72218,61771],{"class":161},[102,72220,51428],{"class":112},[102,72222,54728],{"class":161},[102,72224,1279],{"class":112},[102,72226,72227,72229,72231,72233,72235],{"class":104,"line":7967},[102,72228,61741],{"class":161},[102,72230,51428],{"class":112},[102,72232,688],{"class":161},[102,72234,51483],{"class":108},[102,72236,1279],{"class":112},[102,72238,72239,72241,72243,72245,72247,72249,72252,72254,72256,72258,72261,72263,72265],{"class":104,"line":7973},[102,72240,61968],{"class":161},[102,72242,51428],{"class":112},[102,72244,330],{"class":161},[102,72246,51483],{"class":108},[102,72248,51512],{"class":161},[102,72250,72251],{"class":161}," rgb",[102,72253,113],{"class":112},[102,72255,1711],{"class":161},[102,72257,12425],{"class":112},[102,72259,72260],{"class":161},"197",[102,72262,12425],{"class":112},[102,72264,72260],{"class":161},[102,72266,2708],{"class":112},[102,72268,72269],{"class":104,"line":8000},[102,72270,2176],{"class":112},[102,72272,72273],{"class":104,"line":8005},[102,72274,2389],{"emptyLinePlaceholder":30},[102,72276,72277,72280],{"class":104,"line":8011},[102,72278,72279],{"class":51291},"    button",[102,72281,15562],{"class":112},[102,72283,72284,72286,72288,72290,72292],{"class":104,"line":8023},[102,72285,54776],{"class":161},[102,72287,51428],{"class":112},[102,72289,938],{"class":161},[102,72291,51483],{"class":108},[102,72293,1279],{"class":112},[102,72295,72296,72298,72300,72302,72304],{"class":104,"line":8035},[102,72297,54762],{"class":161},[102,72299,51428],{"class":112},[102,72301,597],{"class":161},[102,72303,51483],{"class":108},[102,72305,1279],{"class":112},[102,72307,72308,72310,72312,72315,72317,72319,72321,72324,72326,72328],{"class":104,"line":8047},[102,72309,54875],{"class":161},[102,72311,51428],{"class":112},[102,72313,72314],{"class":161},"rgb",[102,72316,113],{"class":112},[102,72318,1082],{"class":161},[102,72320,12425],{"class":112},[102,72322,72323],{"class":161},"187",[102,72325,12425],{"class":112},[102,72327,412],{"class":161},[102,72329,2708],{"class":112},[102,72331,72332,72334,72336,72338],{"class":104,"line":9706},[102,72333,57407],{"class":161},[102,72335,51428],{"class":112},[102,72337,60833],{"class":161},[102,72339,1279],{"class":112},[102,72341,72342,72344,72346,72348],{"class":104,"line":9731},[102,72343,61968],{"class":161},[102,72345,51428],{"class":112},[102,72347,304],{"class":161},[102,72349,1279],{"class":112},[102,72351,72352],{"class":104,"line":9754},[102,72353,2176],{"class":112},[102,72355,72356],{"class":104,"line":9778},[102,72357,2389],{"emptyLinePlaceholder":30},[102,72359,72360,72362,72364],{"class":104,"line":9783},[102,72361,72279],{"class":51291},[102,72363,51679],{"class":51291},[102,72365,15562],{"class":112},[102,72367,72368,72370,72372,72375],{"class":104,"line":9788},[102,72369,55000],{"class":161},[102,72371,51428],{"class":112},[102,72373,72374],{"class":161},"inline-block",[102,72376,1279],{"class":112},[102,72378,72379,72381,72383,72385,72387],{"class":104,"line":9793},[102,72380,54762],{"class":161},[102,72382,51428],{"class":112},[102,72384,559],{"class":161},[102,72386,51483],{"class":108},[102,72388,1279],{"class":112},[102,72390,72391,72393,72395,72397,72399],{"class":104,"line":9802},[102,72392,54776],{"class":161},[102,72394,51428],{"class":112},[102,72396,559],{"class":161},[102,72398,51483],{"class":108},[102,72400,1279],{"class":112},[102,72402,72403,72405,72407,72409,72411],{"class":104,"line":9807},[102,72404,57350],{"class":161},[102,72406,51428],{"class":112},[102,72408,585],{"class":161},[102,72410,51483],{"class":108},[102,72412,1279],{"class":112},[102,72414,72415,72417,72419,72421,72423,72425,72428],{"class":104,"line":9813},[102,72416,61968],{"class":161},[102,72418,51428],{"class":112},[102,72420,330],{"class":161},[102,72422,51483],{"class":108},[102,72424,51512],{"class":161},[102,72426,72427],{"class":161}," #fff",[102,72429,1279],{"class":112},[102,72431,72432,72434,72436,72438,72440],{"class":104,"line":9834},[102,72433,55125],{"class":161},[102,72435,51428],{"class":112},[102,72437,432],{"class":161},[102,72439,51483],{"class":108},[102,72441,1279],{"class":112},[102,72443,72444,72446,72448,72450,72452],{"class":104,"line":9840},[102,72445,61741],{"class":161},[102,72447,51428],{"class":112},[102,72449,330],{"class":161},[102,72451,51483],{"class":108},[102,72453,1279],{"class":112},[102,72455,72456],{"class":104,"line":9854},[102,72457,2176],{"class":112},[102,72459,72460],{"class":104,"line":9860},[102,72461,2389],{"emptyLinePlaceholder":30},[102,72463,72464,72467],{"class":104,"line":9887},[102,72465,72466],{"class":1952},"    .total",[102,72468,15562],{"class":112},[102,72470,72471,72473,72475,72477,72479],{"class":104,"line":9896},[102,72472,54762],{"class":161},[102,72474,51428],{"class":112},[102,72476,61620],{"class":161},[102,72478,51483],{"class":108},[102,72480,1279],{"class":112},[102,72482,72483,72485,72487,72489,72491],{"class":104,"line":9902},[102,72484,54776],{"class":161},[102,72486,51428],{"class":112},[102,72488,514],{"class":161},[102,72490,51483],{"class":108},[102,72492,1279],{"class":112},[102,72494,72495,72497,72499,72501,72503],{"class":104,"line":9910},[102,72496,57350],{"class":161},[102,72498,51428],{"class":112},[102,72500,514],{"class":161},[102,72502,51483],{"class":108},[102,72504,1279],{"class":112},[102,72506,72507,72509,72511,72514],{"class":104,"line":9915},[102,72508,57277],{"class":161},[102,72510,51428],{"class":112},[102,72512,72513],{"class":161},"right",[102,72515,1279],{"class":112},[102,72517,72518,72520,72522,72524,72526,72528,72530,72532],{"class":104,"line":16594},[102,72519,54697],{"class":161},[102,72521,51428],{"class":112},[102,72523,514],{"class":161},[102,72525,51483],{"class":108},[102,72527,51547],{"class":161},[102,72529,2027],{"class":161},[102,72531,51483],{"class":108},[102,72533,1279],{"class":112},[102,72535,72536,72539,72541,72543,72545],{"class":104,"line":16600},[102,72537,72538],{"class":161},"      padding-right",[102,72540,51428],{"class":112},[102,72542,559],{"class":161},[102,72544,51483],{"class":108},[102,72546,1279],{"class":112},[102,72548,72549,72551,72553,72555,72557],{"class":104,"line":16623},[102,72550,54913],{"class":161},[102,72552,51428],{"class":112},[102,72554,636],{"class":161},[102,72556,51483],{"class":108},[102,72558,1279],{"class":112},[102,72560,72561,72563,72565,72567,72569,72572,72574,72577,72579,72581],{"class":104,"line":16629},[102,72562,54875],{"class":161},[102,72564,51428],{"class":112},[102,72566,72314],{"class":161},[102,72568,113],{"class":112},[102,72570,72571],{"class":161},"237",[102,72573,12425],{"class":112},[102,72575,72576],{"class":161},"235",[102,72578,12425],{"class":112},[102,72580,72576],{"class":161},[102,72582,2708],{"class":112},[102,72584,72585,72588,72590,72592],{"class":104,"line":16652},[102,72586,72587],{"class":161},"      box-sizing",[102,72589,51428],{"class":112},[102,72591,60496],{"class":161},[102,72593,1279],{"class":112},[102,72595,72596],{"class":104,"line":16666},[102,72597,2176],{"class":112},[102,72599,72600],{"class":104,"line":16686},[102,72601,2389],{"emptyLinePlaceholder":30},[102,72603,72604,72606,72608],{"class":104,"line":16692},[102,72605,72466],{"class":1952},[102,72607,51679],{"class":51291},[102,72609,15562],{"class":112},[102,72611,72612,72614,72616,72618],{"class":104,"line":16703},[102,72613,57407],{"class":161},[102,72615,51428],{"class":112},[102,72617,57412],{"class":161},[102,72619,1279],{"class":112},[102,72621,72622],{"class":104,"line":16726},[102,72623,2176],{"class":112},[102,72625,72626],{"class":104,"line":16748},[102,72627,2389],{"emptyLinePlaceholder":30},[102,72629,72630,72632],{"class":104,"line":16753},[102,72631,65014],{"class":51291},[102,72633,15562],{"class":112},[102,72635,72636,72638,72640,72642,72644],{"class":104,"line":16759},[102,72637,54762],{"class":161},[102,72639,51428],{"class":112},[102,72641,61620],{"class":161},[102,72643,51483],{"class":108},[102,72645,1279],{"class":112},[102,72647,72648,72650,72652,72655],{"class":104,"line":16773},[102,72649,54697],{"class":161},[102,72651,51428],{"class":112},[102,72653,72654],{"class":161},"auto",[102,72656,1279],{"class":112},[102,72658,72659,72661,72663,72665],{"class":104,"line":16786},[102,72660,65021],{"class":161},[102,72662,51428],{"class":112},[102,72664,65026],{"class":161},[102,72666,1279],{"class":112},[102,72668,72669],{"class":104,"line":16791},[102,72670,2176],{"class":112},[102,72672,72673],{"class":104,"line":16805},[102,72674,2389],{"emptyLinePlaceholder":30},[102,72676,72677,72679],{"class":104,"line":16810},[102,72678,65106],{"class":51291},[102,72680,15562],{"class":112},[102,72682,72683,72685,72687,72689,72691,72693,72695,72697,72699,72701],{"class":104,"line":16816},[102,72684,54875],{"class":161},[102,72686,51428],{"class":112},[102,72688,72314],{"class":161},[102,72690,113],{"class":112},[102,72692,72571],{"class":161},[102,72694,12425],{"class":112},[102,72696,72576],{"class":161},[102,72698,12425],{"class":112},[102,72700,72576],{"class":161},[102,72702,2708],{"class":112},[102,72704,72705],{"class":104,"line":16821},[102,72706,2176],{"class":112},[102,72708,72709],{"class":104,"line":16835},[102,72710,2389],{"emptyLinePlaceholder":30},[102,72712,72713,72715],{"class":104,"line":16840},[102,72714,65106],{"class":51291},[102,72716,31457],{"class":112},[102,72718,72719,72721],{"class":104,"line":16845},[102,72720,65172],{"class":51291},[102,72722,15562],{"class":112},[102,72724,72725,72727,72729,72731,72733],{"class":104,"line":16859},[102,72726,54776],{"class":161},[102,72728,51428],{"class":112},[102,72730,386],{"class":161},[102,72732,51483],{"class":108},[102,72734,1279],{"class":112},[102,72736,72737,72739,72741,72743],{"class":104,"line":16871},[102,72738,57277],{"class":161},[102,72740,51428],{"class":112},[102,72742,23726],{"class":161},[102,72744,1279],{"class":112},[102,72746,72747,72749,72751,72753,72755],{"class":104,"line":16876},[102,72748,54913],{"class":161},[102,72750,51428],{"class":112},[102,72752,662],{"class":161},[102,72754,51483],{"class":108},[102,72756,1279],{"class":112},[102,72758,72759,72761,72763,72765,72767,72769,72771,72773,72776,72778,72781,72783,72785],{"class":104,"line":16889},[102,72760,61968],{"class":161},[102,72762,51428],{"class":112},[102,72764,330],{"class":161},[102,72766,51483],{"class":108},[102,72768,51512],{"class":161},[102,72770,72251],{"class":161},[102,72772,113],{"class":112},[102,72774,72775],{"class":161},"228",[102,72777,12425],{"class":112},[102,72779,72780],{"class":161},"225",[102,72782,12425],{"class":112},[102,72784,72780],{"class":161},[102,72786,2708],{"class":112},[102,72788,72789,72792,72794,72796,72798],{"class":104,"line":16894},[102,72790,72791],{"class":161},"      padding-left",[102,72793,51428],{"class":112},[102,72795,432],{"class":161},[102,72797,51483],{"class":108},[102,72799,1279],{"class":112},[102,72801,72802,72804,72806,72808,72811,72813,72815],{"class":104,"line":16899},[102,72803,61851],{"class":161},[102,72805,51428],{"class":112},[102,72807,28112],{"class":161},[102,72809,72810],{"class":161}," linear",[102,72812,61858],{"class":161},[102,72814,808],{"class":108},[102,72816,1279],{"class":112},[102,72818,72819],{"class":104,"line":16904},[102,72820,2176],{"class":112},[102,72822,72823],{"class":104,"line":16917},[102,72824,2389],{"emptyLinePlaceholder":30},[102,72826,72827,72830,72832,72834],{"class":104,"line":16922},[102,72828,72829],{"class":51291},"    tbody",[102,72831,70135],{"class":51291},[102,72833,60931],{"class":1952},[102,72835,15562],{"class":112},[102,72837,72838,72840,72842,72844,72846,72848,72850,72852,72854,72856],{"class":104,"line":32624},[102,72839,54875],{"class":161},[102,72841,51428],{"class":112},[102,72843,72314],{"class":161},[102,72845,113],{"class":112},[102,72847,72571],{"class":161},[102,72849,12425],{"class":112},[102,72851,72576],{"class":161},[102,72853,12425],{"class":112},[102,72855,72576],{"class":161},[102,72857,2708],{"class":112},[102,72859,72860,72862,72864,72866],{"class":104,"line":32630},[102,72861,62016],{"class":161},[102,72863,51428],{"class":112},[102,72865,62021],{"class":161},[102,72867,1279],{"class":112},[102,72869,72870],{"class":104,"line":32636},[102,72871,2176],{"class":112},[102,72873,72874],{"class":104,"line":32642},[102,72875,2389],{"emptyLinePlaceholder":30},[102,72877,72878,72880,72882,72885,72887],{"class":104,"line":32648},[102,72879,72829],{"class":51291},[102,72881,70135],{"class":51291},[102,72883,72884],{"class":51291}," td",[102,72886,1387],{"class":51291},[102,72888,15562],{"class":112},[102,72890,72891,72893,72895,72897],{"class":104,"line":32659},[102,72892,55000],{"class":161},[102,72894,51428],{"class":112},[102,72896,60860],{"class":161},[102,72898,1279],{"class":112},[102,72900,72901,72903,72905,72907,72909],{"class":104,"line":32665},[102,72902,54762],{"class":161},[102,72904,51428],{"class":112},[102,72906,1020],{"class":161},[102,72908,51483],{"class":108},[102,72910,1279],{"class":112},[102,72912,72913,72915,72917,72919,72921],{"class":104,"line":32685},[102,72914,54776],{"class":161},[102,72916,51428],{"class":112},[102,72918,938],{"class":161},[102,72920,51483],{"class":108},[102,72922,1279],{"class":112},[102,72924,72925,72927,72929,72931,72933],{"class":104,"line":32691},[102,72926,57350],{"class":161},[102,72928,51428],{"class":112},[102,72930,938],{"class":161},[102,72932,51483],{"class":108},[102,72934,1279],{"class":112},[102,72936,72937,72939,72941,72943,72945],{"class":104,"line":32702},[102,72938,62068],{"class":161},[102,72940,51428],{"class":112},[102,72942,190],{"class":161},[102,72944,51483],{"class":108},[102,72946,1279],{"class":112},[102,72948,72949,72951,72953,72955],{"class":104,"line":32708},[102,72950,57407],{"class":161},[102,72952,51428],{"class":112},[102,72954,60833],{"class":161},[102,72956,1279],{"class":112},[102,72958,72959,72961,72963,72965],{"class":104,"line":32714},[102,72960,57277],{"class":161},[102,72962,51428],{"class":112},[102,72964,51583],{"class":161},[102,72966,1279],{"class":112},[102,72968,72969,72971,72973,72975],{"class":104,"line":32720},[102,72970,63961],{"class":161},[102,72972,51428],{"class":112},[102,72974,54728],{"class":161},[102,72976,1279],{"class":112},[102,72978,72979,72981,72983,72986],{"class":104,"line":32726},[102,72980,54875],{"class":161},[102,72982,51428],{"class":112},[102,72984,72985],{"class":161},"orange",[102,72987,1279],{"class":112},[102,72989,72990,72992,72994,72997,72999],{"class":104,"line":32732},[102,72991,55125],{"class":161},[102,72993,51428],{"class":112},[102,72995,72996],{"class":161},"12.5",[102,72998,51483],{"class":108},[102,73000,1279],{"class":112},[102,73002,73003],{"class":104,"line":32738},[102,73004,2176],{"class":112},[102,73006,73007,73009,73011],{"class":104,"line":32744},[102,73008,52408],{"class":112},[102,73010,5116],{"class":51291},[102,73012,51298],{"class":112},[102,73014,73015,73017,73019],{"class":104,"line":32764},[102,73016,51776],{"class":112},[102,73018,51325],{"class":51291},[102,73020,51298],{"class":112},[102,73022,73023],{"class":104,"line":32770},[102,73024,2389],{"emptyLinePlaceholder":30},[102,73026,73027,73029,73031],{"class":104,"line":32786},[102,73028,1023],{"class":112},[102,73030,51791],{"class":51291},[102,73032,51298],{"class":112},[102,73034,73035,73037,73039,73042,73044],{"class":104,"line":32792},[102,73036,52135],{"class":112},[102,73038,14],{"class":51291},[102,73040,73041],{"class":112},">学生就业统计表\u003C\u002F",[102,73043,14],{"class":51291},[102,73045,51298],{"class":112},[102,73047,73048,73050,73052,73054,73056,73058,73060,73062,73064],{"class":104,"line":32806},[102,73049,52135],{"class":112},[102,73051,66616],{"class":51291},[102,73053,53477],{"class":1952},[102,73055,158],{"class":112},[102,73057,62655],{"class":217},[102,73059,69061],{"class":1952},[102,73061,158],{"class":112},[102,73063,31767],{"class":217},[102,73065,51298],{"class":112},[102,73067,73068,73070,73072,73074,73076,73078,73080,73082,73084,73086,73088,73091,73093,73095,73097],{"class":104,"line":32812},[102,73069,51332],{"class":112},[102,73071,53812],{"class":51291},[102,73073,53815],{"class":1952},[102,73075,158],{"class":112},[102,73077,62690],{"class":217},[102,73079,14910],{"class":1952},[102,73081,158],{"class":112},[102,73083,69087],{"class":217},[102,73085,61011],{"class":1952},[102,73087,158],{"class":112},[102,73089,73090],{"class":217},"\"姓名\"",[102,73092,53477],{"class":1952},[102,73094,158],{"class":112},[102,73096,69087],{"class":217},[102,73098,51298],{"class":112},[102,73100,73101,73103,73105,73107,73109,73111,73113,73115,73117,73119,73121,73124,73126,73128,73130],{"class":104,"line":32827},[102,73102,51332],{"class":112},[102,73104,53812],{"class":51291},[102,73106,53815],{"class":1952},[102,73108,158],{"class":112},[102,73110,62690],{"class":217},[102,73112,14910],{"class":1952},[102,73114,158],{"class":112},[102,73116,69115],{"class":217},[102,73118,61011],{"class":1952},[102,73120,158],{"class":112},[102,73122,73123],{"class":217},"\"年龄\"",[102,73125,53477],{"class":1952},[102,73127,158],{"class":112},[102,73129,69115],{"class":217},[102,73131,51298],{"class":112},[102,73133,73134,73136,73138,73140,73142,73144,73146,73148,73150,73152,73154,73157,73159,73161,73163],{"class":104,"line":32833},[102,73135,51332],{"class":112},[102,73137,53812],{"class":51291},[102,73139,53815],{"class":1952},[102,73141,158],{"class":112},[102,73143,62690],{"class":217},[102,73145,14910],{"class":1952},[102,73147,158],{"class":112},[102,73149,69217],{"class":217},[102,73151,61011],{"class":1952},[102,73153,158],{"class":112},[102,73155,73156],{"class":217},"\"薪资\"",[102,73158,53477],{"class":1952},[102,73160,158],{"class":112},[102,73162,69217],{"class":217},[102,73164,51298],{"class":112},[102,73166,73167,73169,73171,73173,73175,73177,73179,73181,73183,73185,73187,73189],{"class":104,"line":32842},[102,73168,51332],{"class":112},[102,73170,69135],{"class":51291},[102,73172,14910],{"class":1952},[102,73174,158],{"class":112},[102,73176,69142],{"class":217},[102,73178,14949],{"class":1952},[102,73180,158],{"class":112},[102,73182,7642],{"class":217},[102,73184,53477],{"class":1952},[102,73186,158],{"class":112},[102,73188,69142],{"class":217},[102,73190,51298],{"class":112},[102,73192,73193,73195,73197,73199,73201,73203,73205,73207],{"class":104,"line":32848},[102,73194,55225],{"class":112},[102,73196,69157],{"class":51291},[102,73198,66642],{"class":1952},[102,73200,158],{"class":112},[102,73202,9951],{"class":217},[102,73204,69166],{"class":112},[102,73206,69157],{"class":51291},[102,73208,51298],{"class":112},[102,73210,73211,73213,73215,73217,73219,73221,73223,73225],{"class":104,"line":32857},[102,73212,55225],{"class":112},[102,73214,69157],{"class":51291},[102,73216,66642],{"class":1952},[102,73218,158],{"class":112},[102,73220,10020],{"class":217},[102,73222,69185],{"class":112},[102,73224,69157],{"class":51291},[102,73226,51298],{"class":112},[102,73228,73229,73231,73233],{"class":104,"line":32863},[102,73230,51767],{"class":112},[102,73232,69135],{"class":51291},[102,73234,51298],{"class":112},[102,73236,73237,73239,73241,73243,73245,73247,73249,73251,73253,73255,73257,73259],{"class":104,"line":32869},[102,73238,51332],{"class":112},[102,73240,69135],{"class":51291},[102,73242,14910],{"class":1952},[102,73244,158],{"class":112},[102,73246,69239],{"class":217},[102,73248,14949],{"class":1952},[102,73250,158],{"class":112},[102,73252,7642],{"class":217},[102,73254,53477],{"class":1952},[102,73256,158],{"class":112},[102,73258,69239],{"class":217},[102,73260,51298],{"class":112},[102,73262,73263,73265,73267,73269,73271,73273,73275,73277],{"class":104,"line":32878},[102,73264,55225],{"class":112},[102,73266,69157],{"class":51291},[102,73268,66642],{"class":1952},[102,73270,158],{"class":112},[102,73272,69260],{"class":217},[102,73274,69263],{"class":112},[102,73276,69157],{"class":51291},[102,73278,51298],{"class":112},[102,73280,73281,73283,73285,73287,73289,73291,73293,73295],{"class":104,"line":32884},[102,73282,55225],{"class":112},[102,73284,69157],{"class":51291},[102,73286,66642],{"class":1952},[102,73288,158],{"class":112},[102,73290,69280],{"class":217},[102,73292,69283],{"class":112},[102,73294,69157],{"class":51291},[102,73296,51298],{"class":112},[102,73298,73299,73301,73303,73305,73307,73309,73311,73313],{"class":104,"line":32895},[102,73300,55225],{"class":112},[102,73302,69157],{"class":51291},[102,73304,66642],{"class":1952},[102,73306,158],{"class":112},[102,73308,69300],{"class":217},[102,73310,69303],{"class":112},[102,73312,69157],{"class":51291},[102,73314,51298],{"class":112},[102,73316,73317,73319,73321,73323,73325,73327,73329,73331],{"class":104,"line":32901},[102,73318,55225],{"class":112},[102,73320,69157],{"class":51291},[102,73322,66642],{"class":1952},[102,73324,158],{"class":112},[102,73326,69320],{"class":217},[102,73328,69323],{"class":112},[102,73330,69157],{"class":51291},[102,73332,51298],{"class":112},[102,73334,73335,73337,73339,73341,73343,73345,73347,73349],{"class":104,"line":32920},[102,73336,55225],{"class":112},[102,73338,69157],{"class":51291},[102,73340,66642],{"class":1952},[102,73342,158],{"class":112},[102,73344,69340],{"class":217},[102,73346,69343],{"class":112},[102,73348,69157],{"class":51291},[102,73350,51298],{"class":112},[102,73352,73353,73355,73357],{"class":104,"line":32926},[102,73354,51767],{"class":112},[102,73356,69135],{"class":51291},[102,73358,51298],{"class":112},[102,73360,73361,73363,73365],{"class":104,"line":32937},[102,73362,51332],{"class":112},[102,73364,53878],{"class":51291},[102,73366,51298],{"class":112},[102,73368,73369,73371,73373,73376,73378,73381,73383],{"class":104,"line":32943},[102,73370,55225],{"class":112},[102,73372,102],{"class":51291},[102,73374,73375],{"class":112},">+\u003C\u002F",[102,73377,102],{"class":51291},[102,73379,73380],{"class":112},">添加\u003C\u002F",[102,73382,53878],{"class":51291},[102,73384,51298],{"class":112},[102,73386,73387,73389,73391],{"class":104,"line":32963},[102,73388,52408],{"class":112},[102,73390,66616],{"class":51291},[102,73392,51298],{"class":112},[102,73394,73395,73397,73399,73401,73403,73405,73408,73410,73413,73415,73418,73420],{"class":104,"line":32979},[102,73396,52135],{"class":112},[102,73398,51602],{"class":51291},[102,73400,53477],{"class":1952},[102,73402,158],{"class":112},[102,73404,62571],{"class":217},[102,73406,73407],{"class":112},">共有数据 \u003C",[102,73409,102],{"class":51291},[102,73411,73412],{"class":112},">0\u003C\u002F",[102,73414,102],{"class":51291},[102,73416,73417],{"class":112},"> 条\u003C\u002F",[102,73419,51602],{"class":51291},[102,73421,51298],{"class":112},[102,73423,73424,73426,73428],{"class":104,"line":32985},[102,73425,52135],{"class":112},[102,73427,250],{"class":51291},[102,73429,51298],{"class":112},[102,73431,73432,73434,73436],{"class":104,"line":32999},[102,73433,51332],{"class":112},[102,73435,253],{"class":51291},[102,73437,51298],{"class":112},[102,73439,73440,73442,73444],{"class":104,"line":33005},[102,73441,55225],{"class":112},[102,73443,256],{"class":51291},[102,73445,51298],{"class":112},[102,73447,73448,73450,73452,73455,73457],{"class":104,"line":33011},[102,73449,55293],{"class":112},[102,73451,259],{"class":51291},[102,73453,73454],{"class":112},">ID\u003C\u002F",[102,73456,259],{"class":51291},[102,73458,51298],{"class":112},[102,73460,73461,73463,73465,73467,73469],{"class":104,"line":33022},[102,73462,55293],{"class":112},[102,73464,259],{"class":51291},[102,73466,69446],{"class":112},[102,73468,259],{"class":51291},[102,73470,51298],{"class":112},[102,73472,73473,73475,73477,73479,73481],{"class":104,"line":33028},[102,73474,55293],{"class":112},[102,73476,259],{"class":51291},[102,73478,69459],{"class":112},[102,73480,259],{"class":51291},[102,73482,51298],{"class":112},[102,73484,73485,73487,73489,73491,73493],{"class":104,"line":33034},[102,73486,55293],{"class":112},[102,73488,259],{"class":51291},[102,73490,69472],{"class":112},[102,73492,259],{"class":51291},[102,73494,51298],{"class":112},[102,73496,73497,73499,73501,73503,73505],{"class":104,"line":33044},[102,73498,55293],{"class":112},[102,73500,259],{"class":51291},[102,73502,69485],{"class":112},[102,73504,259],{"class":51291},[102,73506,51298],{"class":112},[102,73508,73509,73511,73513,73515,73517],{"class":104,"line":33050},[102,73510,55293],{"class":112},[102,73512,259],{"class":51291},[102,73514,69498],{"class":112},[102,73516,259],{"class":51291},[102,73518,51298],{"class":112},[102,73520,73521,73523,73525,73528,73530],{"class":104,"line":33061},[102,73522,55293],{"class":112},[102,73524,259],{"class":51291},[102,73526,73527],{"class":112},">录入时间\u003C\u002F",[102,73529,259],{"class":51291},[102,73531,51298],{"class":112},[102,73533,73534,73536,73538,73540,73542],{"class":104,"line":33067},[102,73535,55293],{"class":112},[102,73537,259],{"class":51291},[102,73539,69511],{"class":112},[102,73541,259],{"class":51291},[102,73543,51298],{"class":112},[102,73545,73546,73548,73550],{"class":104,"line":33077},[102,73547,55398],{"class":112},[102,73549,256],{"class":51291},[102,73551,51298],{"class":112},[102,73553,73554,73556,73558],{"class":104,"line":33082},[102,73555,51767],{"class":112},[102,73557,253],{"class":51291},[102,73559,51298],{"class":112},[102,73561,73562,73564,73566],{"class":104,"line":33088},[102,73563,51332],{"class":112},[102,73565,297],{"class":51291},[102,73567,51298],{"class":112},[102,73569,73570],{"class":104,"line":33137},[102,73571,73572],{"class":171},"      \u003C!-- \u003Ctr>\n",[102,73574,73575],{"class":104,"line":33184},[102,73576,73577],{"class":171},"        \u003Ctd>1\u003C\u002Ftd>\n",[102,73579,73580],{"class":104,"line":33189},[102,73581,73577],{"class":171},[102,73583,73584],{"class":104,"line":33195},[102,73585,73577],{"class":171},[102,73587,73588],{"class":104,"line":33214},[102,73589,73577],{"class":171},[102,73591,73592],{"class":104,"line":33220},[102,73593,73577],{"class":171},[102,73595,73596],{"class":104,"line":33240},[102,73597,73577],{"class":171},[102,73599,73600],{"class":104,"line":33246},[102,73601,73577],{"class":171},[102,73603,73604],{"class":104,"line":33252},[102,73605,73606],{"class":171},"        \u003Ctd>\n",[102,73608,73609],{"class":104,"line":33262},[102,73610,73611],{"class":171},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[102,73613,73614],{"class":104,"line":33267},[102,73615,73616],{"class":171},"        \u003C\u002Ftd>\n",[102,73618,73619],{"class":104,"line":33273},[102,73620,73621],{"class":171},"      \u003C\u002Ftr> -->\n",[102,73623,73624,73626,73628],{"class":104,"line":33289},[102,73625,51767],{"class":112},[102,73627,297],{"class":51291},[102,73629,51298],{"class":112},[102,73631,73632,73634,73636],{"class":104,"line":33334},[102,73633,52408],{"class":112},[102,73635,250],{"class":51291},[102,73637,51298],{"class":112},[102,73639,73640,73642,73644],{"class":104,"line":33340},[102,73641,52135],{"class":112},[102,73643,51804],{"class":51291},[102,73645,51298],{"class":112},[102,73647,73648],{"class":104,"line":33346},[102,73649,73650],{"class":171},"    \u002F\u002F const initData = [{\n",[102,73652,73653],{"class":104,"line":33352},[102,73654,73655],{"class":171},"    \u002F\u002F   unameId: 1,\n",[102,73657,73658],{"class":104,"line":33363},[102,73659,73660],{"class":171},"    \u002F\u002F   uname: '华晨宇',\n",[102,73662,73663],{"class":104,"line":33369},[102,73664,73665],{"class":171},"    \u002F\u002F   age: 22,\n",[102,73667,73668],{"class":104,"line":33375},[102,73669,73670],{"class":171},"    \u002F\u002F   salary: 12000,\n",[102,73672,73673],{"class":104,"line":33381},[102,73674,73675],{"class":171},"    \u002F\u002F   gender: '男',\n",[102,73677,73678],{"class":104,"line":33399},[102,73679,73680],{"class":171},"    \u002F\u002F   city: '北京',\n",[102,73682,73683],{"class":104,"line":33413},[102,73684,73685],{"class":171},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[102,73687,73688],{"class":104,"line":33422},[102,73689,73690],{"class":171},"    \u002F\u002F }]\n",[102,73692,73693],{"class":104,"line":33431},[102,73694,73695],{"class":171},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[102,73697,73698],{"class":104,"line":33440},[102,73699,73700],{"class":171},"    \u002F\u002F 1.渲染业务\n",[102,73702,73703],{"class":104,"line":33449},[102,73704,73705],{"class":171},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[102,73707,73708],{"class":104,"line":33455},[102,73709,73710],{"class":171},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[102,73712,73713],{"class":104,"line":33461},[102,73714,73715],{"class":171},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[102,73717,73718],{"class":104,"line":33469},[102,73719,2389],{"emptyLinePlaceholder":30},[102,73721,73722],{"class":104,"line":33474},[102,73723,73724],{"class":171},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[102,73726,73727],{"class":104,"line":33480},[102,73728,73729],{"class":171},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[102,73731,73732,73734,73736,73738],{"class":104,"line":33491},[102,73733,11211],{"class":108},[102,73735,57686],{"class":161},[102,73737,13554],{"class":108},[102,73739,51829],{"class":112},[102,73741,73742,73745,73747],{"class":104,"line":33497},[102,73743,73744],{"class":112},"    console.",[102,73746,58238],{"class":1952},[102,73748,52403],{"class":112},[102,73750,73751],{"class":104,"line":33517},[102,73752,2389],{"emptyLinePlaceholder":30},[102,73754,73755],{"class":104,"line":33523},[102,73756,73757],{"class":171},"    \u002F\u002F 时间函数\n",[102,73759,73760,73762,73765],{"class":104,"line":33529},[102,73761,70075],{"class":108},[102,73763,73764],{"class":1952}," getTime",[102,73766,10843],{"class":112},[102,73768,73769,73771,73774,73776,73778,73781],{"class":104,"line":33535},[102,73770,58219],{"class":108},[102,73772,73773],{"class":161}," date",[102,73775,13554],{"class":108},[102,73777,11568],{"class":108},[102,73779,73780],{"class":1952}," Date",[102,73782,1965],{"class":112},[102,73784,73785,73787,73789,73791,73794,73797,73799,73801,73803,73806,73809,73811,73813,73815,73817,73819,73821,73823],{"class":104,"line":33552},[102,73786,58219],{"class":108},[102,73788,16081],{"class":161},[102,73790,13554],{"class":108},[102,73792,73793],{"class":112}," date.",[102,73795,73796],{"class":1952},"getHours",[102,73798,13040],{"class":112},[102,73800,1023],{"class":108},[102,73802,2027],{"class":161},[102,73804,73805],{"class":108}," ?",[102,73807,73808],{"class":217}," '0'",[102,73810,45557],{"class":108},[102,73812,73793],{"class":112},[102,73814,73796],{"class":1952},[102,73816,13040],{"class":112},[102,73818,972],{"class":108},[102,73820,73793],{"class":112},[102,73822,73796],{"class":1952},[102,73824,1965],{"class":112},[102,73826,73827,73829,73832,73834,73836,73839,73841,73843,73845,73847,73849,73851,73853,73855,73857,73859,73861,73863],{"class":104,"line":33558},[102,73828,58219],{"class":108},[102,73830,73831],{"class":161}," m",[102,73833,13554],{"class":108},[102,73835,73793],{"class":112},[102,73837,73838],{"class":1952},"getMinutes",[102,73840,13040],{"class":112},[102,73842,1023],{"class":108},[102,73844,2027],{"class":161},[102,73846,73805],{"class":108},[102,73848,73808],{"class":217},[102,73850,45557],{"class":108},[102,73852,73793],{"class":112},[102,73854,73838],{"class":1952},[102,73856,13040],{"class":112},[102,73858,972],{"class":108},[102,73860,73793],{"class":112},[102,73862,73838],{"class":1952},[102,73864,1965],{"class":112},[102,73866,73867,73869,73871,73873,73875,73878,73880,73882,73884,73886,73888,73890,73892,73894,73896,73898,73900,73902],{"class":104,"line":33564},[102,73868,58219],{"class":108},[102,73870,8418],{"class":161},[102,73872,13554],{"class":108},[102,73874,73793],{"class":112},[102,73876,73877],{"class":1952},"getSeconds",[102,73879,13040],{"class":112},[102,73881,1023],{"class":108},[102,73883,2027],{"class":161},[102,73885,73805],{"class":108},[102,73887,73808],{"class":217},[102,73889,45557],{"class":108},[102,73891,73793],{"class":112},[102,73893,73877],{"class":1952},[102,73895,13040],{"class":112},[102,73897,972],{"class":108},[102,73899,73793],{"class":112},[102,73901,73877],{"class":1952},[102,73903,1965],{"class":112},[102,73905,73906,73908,73911,73913,73915,73918,73920,73923,73925,73928,73930,73932,73935,73937,73939,73941,73943,73945,73947,73950,73952,73955,73957,73960,73962,73964,73966],{"class":104,"line":33570},[102,73907,58219],{"class":108},[102,73909,73910],{"class":161}," str",[102,73912,13554],{"class":108},[102,73914,62894],{"class":217},[102,73916,73917],{"class":112},"date",[102,73919,671],{"class":217},[102,73921,73922],{"class":1952},"getFullYear",[102,73924,2416],{"class":217},[102,73926,73927],{"class":217},"}\u002F${",[102,73929,73917],{"class":112},[102,73931,671],{"class":217},[102,73933,73934],{"class":1952},"getMonth",[102,73936,13040],{"class":217},[102,73938,594],{"class":108},[102,73940,25109],{"class":161},[102,73942,73927],{"class":217},[102,73944,73917],{"class":112},[102,73946,671],{"class":217},[102,73948,73949],{"class":1952},"getDate",[102,73951,2416],{"class":217},[102,73953,73954],{"class":217},"} ${",[102,73956,528],{"class":112},[102,73958,73959],{"class":217},"}:${",[102,73961,657],{"class":112},[102,73963,73959],{"class":217},[102,73965,808],{"class":112},[102,73967,73968],{"class":217},"}`\n",[102,73970,73971,73974],{"class":104,"line":33576},[102,73972,73973],{"class":108},"      return",[102,73975,73976],{"class":112}," str\n",[102,73978,73979],{"class":104,"line":33582},[102,73980,2176],{"class":112},[102,73982,73983],{"class":104,"line":33609},[102,73984,73985],{"class":171},"    \u002F\u002F 渲染函数\n",[102,73987,73988,73990,73992,73994,73996,73998,74000,74002],{"class":104,"line":33633},[102,73989,11211],{"class":108},[102,73991,69738],{"class":161},[102,73993,13554],{"class":108},[102,73995,54387],{"class":112},[102,73997,54390],{"class":1952},[102,73999,113],{"class":112},[102,74001,69749],{"class":217},[102,74003,119],{"class":112},[102,74005,74006,74008,74010],{"class":104,"line":33639},[102,74007,70075],{"class":108},[102,74009,70078],{"class":1952},[102,74011,10843],{"class":112},[102,74013,74014],{"class":104,"line":33645},[102,74015,74016],{"class":171},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[102,74018,74019],{"class":104,"line":33651},[102,74020,74021],{"class":171},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[102,74023,74024,74026,74029,74031,74033,74036,74038,74040,74042,74045,74047,74050],{"class":104,"line":33662},[102,74025,58219],{"class":108},[102,74027,74028],{"class":161}," trArr",[102,74030,13554],{"class":108},[102,74032,51956],{"class":112},[102,74034,74035],{"class":1952},"map",[102,74037,113],{"class":112},[102,74039,54440],{"class":108},[102,74041,1647],{"class":112},[102,74043,74044],{"class":5206},"ele",[102,74046,12425],{"class":112},[102,74048,74049],{"class":5206},"index",[102,74051,12432],{"class":112},[102,74053,74054,74056],{"class":104,"line":33673},[102,74055,14742],{"class":108},[102,74057,70159],{"class":217},[102,74059,74060],{"class":104,"line":33679},[102,74061,74062],{"class":217},"      \u003Ctr>\n",[102,74064,74065,74067,74069,74071,74074],{"class":104,"line":33696},[102,74066,70164],{"class":217},[102,74068,74044],{"class":112},[102,74070,671],{"class":217},[102,74072,74073],{"class":112},"unameId",[102,74075,70179],{"class":217},[102,74077,74078,74080,74082,74084,74086],{"class":104,"line":33719},[102,74079,70164],{"class":217},[102,74081,74044],{"class":112},[102,74083,671],{"class":217},[102,74085,70195],{"class":112},[102,74087,70179],{"class":217},[102,74089,74090,74092,74094,74096,74098],{"class":104,"line":33742},[102,74091,70164],{"class":217},[102,74093,74044],{"class":112},[102,74095,671],{"class":217},[102,74097,70212],{"class":112},[102,74099,70179],{"class":217},[102,74101,74102,74104,74106,74108,74110],{"class":104,"line":33748},[102,74103,70164],{"class":217},[102,74105,74044],{"class":112},[102,74107,671],{"class":217},[102,74109,70229],{"class":112},[102,74111,70179],{"class":217},[102,74113,74114,74116,74118,74120,74122],{"class":104,"line":33753},[102,74115,70164],{"class":217},[102,74117,74044],{"class":112},[102,74119,671],{"class":217},[102,74121,70246],{"class":112},[102,74123,70179],{"class":217},[102,74125,74126,74128,74130,74132,74134],{"class":104,"line":33762},[102,74127,70164],{"class":217},[102,74129,74044],{"class":112},[102,74131,671],{"class":217},[102,74133,70263],{"class":112},[102,74135,70179],{"class":217},[102,74137,74138,74140,74142,74144,74146],{"class":104,"line":33772},[102,74139,70164],{"class":217},[102,74141,74044],{"class":112},[102,74143,671],{"class":217},[102,74145,2376],{"class":112},[102,74147,70179],{"class":217},[102,74149,74150],{"class":104,"line":33778},[102,74151,73606],{"class":217},[102,74153,74154,74157,74159],{"class":104,"line":33783},[102,74155,74156],{"class":217},"          \u003Ca href=\"#\" data-id=\"${",[102,74158,74049],{"class":112},[102,74160,74161],{"class":217},"}\">删除\u003C\u002Fa>\n",[102,74163,74164],{"class":104,"line":33789},[102,74165,73616],{"class":217},[102,74167,74168],{"class":104,"line":33802},[102,74169,74170],{"class":217},"      \u003C\u002Ftr>\n",[102,74172,74173],{"class":104,"line":33808},[102,74174,74175],{"class":217},"  `\n",[102,74177,74178],{"class":104,"line":33819},[102,74179,64806],{"class":112},[102,74181,74182,74184,74186],{"class":104,"line":33830},[102,74183,58235],{"class":112},[102,74185,58238],{"class":1952},[102,74187,74188],{"class":112},"(trArr)\n",[102,74190,74191],{"class":104,"line":33849},[102,74192,2389],{"emptyLinePlaceholder":30},[102,74194,74195],{"class":104,"line":49509},[102,74196,74197],{"class":171},"      \u002F\u002F (2) 把数组转换为字符串join\n",[102,74199,74200],{"class":104,"line":49514},[102,74201,74202],{"class":171},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[102,74204,74205,74207,74209,74212,74215,74217,74220],{"class":104,"line":49523},[102,74206,70090],{"class":112},[102,74208,158],{"class":108},[102,74210,74211],{"class":112}," trArr.",[102,74213,74214],{"class":1952},"join",[102,74216,113],{"class":112},[102,74218,74219],{"class":217},"''",[102,74221,119],{"class":112},[102,74223,74224],{"class":104,"line":49532},[102,74225,74226],{"class":171},"      \u002F\u002F 显示共有几条\n",[102,74228,74229,74231,74233,74235,74238,74241,74243,74245],{"class":104,"line":49537},[102,74230,55762],{"class":112},[102,74232,54390],{"class":1952},[102,74234,113],{"class":112},[102,74236,74237],{"class":217},"'.total span'",[102,74239,74240],{"class":112},").innerHTML ",[102,74242,158],{"class":108},[102,74244,51956],{"class":112},[102,74246,55822],{"class":161},[102,74248,74249],{"class":104,"line":49542},[102,74250,2176],{"class":112},[102,74252,74253],{"class":104,"line":49547},[102,74254,74255],{"class":171},"    \u002F\u002F render()\n",[102,74257,74258],{"class":104,"line":49560},[102,74259,2389],{"emptyLinePlaceholder":30},[102,74261,74262],{"class":104,"line":49565},[102,74263,74264],{"class":171},"    \u002F\u002F 获取DOM对象\n",[102,74266,74267,74269,74271,74273,74275,74277,74279,74281],{"class":104,"line":49574},[102,74268,11211],{"class":108},[102,74270,69812],{"class":161},[102,74272,13554],{"class":108},[102,74274,54387],{"class":112},[102,74276,54390],{"class":1952},[102,74278,113],{"class":112},[102,74280,69823],{"class":217},[102,74282,119],{"class":112},[102,74284,74285,74287,74289,74291,74293,74295,74297,74299],{"class":104,"line":49583},[102,74286,11211],{"class":108},[102,74288,69639],{"class":161},[102,74290,13554],{"class":108},[102,74292,54387],{"class":112},[102,74294,54390],{"class":1952},[102,74296,113],{"class":112},[102,74298,69650],{"class":217},[102,74300,119],{"class":112},[102,74302,74303,74305,74307,74309,74311,74313,74315,74317],{"class":104,"line":49600},[102,74304,11211],{"class":108},[102,74306,15679],{"class":161},[102,74308,13554],{"class":108},[102,74310,54387],{"class":112},[102,74312,54390],{"class":1952},[102,74314,113],{"class":112},[102,74316,69669],{"class":217},[102,74318,119],{"class":112},[102,74320,74322,74324,74326,74328,74330,74332,74334,74336],{"class":104,"line":74321},231,[102,74323,11211],{"class":108},[102,74325,69698],{"class":161},[102,74327,13554],{"class":108},[102,74329,54387],{"class":112},[102,74331,54390],{"class":1952},[102,74333,113],{"class":112},[102,74335,69709],{"class":217},[102,74337,119],{"class":112},[102,74339,74341,74343,74345,74347,74349,74351,74353,74355],{"class":104,"line":74340},232,[102,74342,11211],{"class":108},[102,74344,69678],{"class":161},[102,74346,13554],{"class":108},[102,74348,54387],{"class":112},[102,74350,54390],{"class":1952},[102,74352,113],{"class":112},[102,74354,69689],{"class":217},[102,74356,119],{"class":112},[102,74358,74360,74362,74364,74366,74368,74370,74372,74374],{"class":104,"line":74359},233,[102,74361,11211],{"class":108},[102,74363,69718],{"class":161},[102,74365,13554],{"class":108},[102,74367,54387],{"class":112},[102,74369,54390],{"class":1952},[102,74371,113],{"class":112},[102,74373,69729],{"class":217},[102,74375,119],{"class":112},[102,74377,74379],{"class":104,"line":74378},234,[102,74380,2389],{"emptyLinePlaceholder":30},[102,74382,74384],{"class":104,"line":74383},235,[102,74385,74386],{"class":171},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[102,74388,74390,74392,74394,74396,74398,74400,74402,74404,74406],{"class":104,"line":74389},236,[102,74391,69830],{"class":112},[102,74393,57804],{"class":1952},[102,74395,113],{"class":112},[102,74397,69837],{"class":217},[102,74399,12425],{"class":112},[102,74401,54440],{"class":108},[102,74403,1647],{"class":112},[102,74405,187],{"class":5206},[102,74407,12432],{"class":112},[102,74409,74411],{"class":104,"line":74410},237,[102,74412,74413],{"class":171},"      \u002F\u002F 禁止浏览器跳转\n",[102,74415,74417,74419,74421],{"class":104,"line":74416},238,[102,74418,69857],{"class":112},[102,74420,69860],{"class":1952},[102,74422,1965],{"class":112},[102,74424,74426],{"class":104,"line":74425},239,[102,74427,74428],{"class":171},"      \u002F\u002F 非空判断\n",[102,74430,74432],{"class":104,"line":74431},240,[102,74433,74434],{"class":171},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[102,74436,74438],{"class":104,"line":74437},241,[102,74439,74440],{"class":171},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[102,74442,74444,74446,74448,74450,74453,74455,74458,74461,74463,74465],{"class":104,"line":74443},242,[102,74445,54471],{"class":108},[102,74447,1647],{"class":112},[102,74449,339],{"class":108},[102,74451,74452],{"class":112},"uname.value ",[102,74454,71348],{"class":108},[102,74456,74457],{"class":108}," !",[102,74459,74460],{"class":112},"age.value ",[102,74462,71348],{"class":108},[102,74464,74457],{"class":108},[102,74466,74467],{"class":112},"salary.value) {\n",[102,74469,74471,74473,74475,74477,74479],{"class":104,"line":74470},243,[102,74472,14742],{"class":108},[102,74474,69931],{"class":1952},[102,74476,113],{"class":112},[102,74478,69936],{"class":217},[102,74480,119],{"class":112},[102,74482,74484],{"class":104,"line":74483},244,[102,74485,52389],{"class":112},[102,74487,74489,74491,74493],{"class":104,"line":74488},245,[102,74490,57998],{"class":112},[102,74492,51875],{"class":1952},[102,74494,74495],{"class":112},"({\n",[102,74497,74499],{"class":104,"line":74498},246,[102,74500,74501],{"class":171},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[102,74503,74505],{"class":104,"line":74504},247,[102,74506,74507],{"class":171},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[102,74509,74511],{"class":104,"line":74510},248,[102,74512,74513],{"class":171},"        \u002F\u002F 对象的序号应为数组长度+1\n",[102,74515,74517],{"class":104,"line":74516},249,[102,74518,74519],{"class":171},"        \u002F\u002F unameId: arr.length + 1,\n",[102,74521,74523],{"class":104,"line":74522},250,[102,74524,2389],{"emptyLinePlaceholder":30},[102,74526,74528],{"class":104,"line":74527},251,[102,74529,74530],{"class":171},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[102,74532,74534],{"class":104,"line":74533},252,[102,74535,74536],{"class":171},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[102,74538,74540],{"class":104,"line":74539},253,[102,74541,74542],{"class":171},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[102,74544,74546],{"class":104,"line":74545},254,[102,74547,74548],{"class":171},"        \u002F\u002F 0当假看\n",[102,74550,74552,74555,74557,74559,74562,74564,74566,74568,74571,74573,74575,74578,74580],{"class":104,"line":74551},255,[102,74553,74554],{"class":112},"        unameId: arr.",[102,74556,51959],{"class":161},[102,74558,73805],{"class":108},[102,74560,74561],{"class":112}," arr[arr.",[102,74563,51959],{"class":161},[102,74565,52262],{"class":108},[102,74567,25109],{"class":161},[102,74569,74570],{"class":112},"].unameId ",[102,74572,594],{"class":108},[102,74574,25109],{"class":161},[102,74576,74577],{"class":108}," :",[102,74579,25109],{"class":161},[102,74581,31457],{"class":112},[102,74583,74585],{"class":104,"line":74584},256,[102,74586,69984],{"class":112},[102,74588,74590],{"class":104,"line":74589},257,[102,74591,69989],{"class":112},[102,74593,74595],{"class":104,"line":74594},258,[102,74596,69999],{"class":112},[102,74598,74600],{"class":104,"line":74599},259,[102,74601,69994],{"class":112},[102,74603,74605],{"class":104,"line":74604},260,[102,74606,74607],{"class":112},"        city: city.value,\n",[102,74609,74611],{"class":104,"line":74610},261,[102,74612,74613],{"class":171},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[102,74615,74617],{"class":104,"line":74616},262,[102,74618,74619],{"class":171},"        \u002F\u002F time: new Date().toDateString()\n",[102,74621,74623,74626,74629],{"class":104,"line":74622},263,[102,74624,74625],{"class":112},"        time: ",[102,74627,74628],{"class":1952},"getTime",[102,74630,1965],{"class":112},[102,74632,74634],{"class":104,"line":74633},264,[102,74635,64806],{"class":112},[102,74637,74639],{"class":104,"line":74638},265,[102,74640,74641],{"class":171},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[102,74643,74645,74647],{"class":104,"line":74644},266,[102,74646,70059],{"class":1952},[102,74648,1965],{"class":112},[102,74650,74652,74654,74656,74658,74660],{"class":104,"line":74651},267,[102,74653,70042],{"class":161},[102,74655,671],{"class":112},[102,74657,70047],{"class":1952},[102,74659,13040],{"class":112},[102,74661,74662],{"class":171},"\u002F\u002F重置表单\n",[102,74664,74666],{"class":104,"line":74665},268,[102,74667,74668],{"class":171},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[102,74670,74672,74675,74677,74679,74682,74684,74686,74688,74690],{"class":104,"line":74671},269,[102,74673,74674],{"class":112},"      localStorage.",[102,74676,71645],{"class":1952},[102,74678,113],{"class":112},[102,74680,74681],{"class":217},"'data'",[102,74683,12425],{"class":112},[102,74685,71655],{"class":161},[102,74687,671],{"class":112},[102,74689,71660],{"class":1952},[102,74691,74692],{"class":112},"(arr))\n",[102,74694,74696],{"class":104,"line":74695},270,[102,74697,33452],{"class":112},[102,74699,74701],{"class":104,"line":74700},271,[102,74702,2389],{"emptyLinePlaceholder":30},[102,74704,74706],{"class":104,"line":74705},272,[102,74707,74708],{"class":171},"    \u002F\u002F 3.删除业务\n",[102,74710,74712],{"class":104,"line":74711},273,[102,74713,74714],{"class":171},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[102,74716,74718,74720,74722,74724,74726,74728,74730,74732,74734],{"class":104,"line":74717},274,[102,74719,70332],{"class":112},[102,74721,57804],{"class":1952},[102,74723,113],{"class":112},[102,74725,57809],{"class":217},[102,74727,12425],{"class":112},[102,74729,54440],{"class":108},[102,74731,1647],{"class":112},[102,74733,187],{"class":5206},[102,74735,12432],{"class":112},[102,74737,74739],{"class":104,"line":74738},275,[102,74740,74741],{"class":171},"      \u002F\u002F 判断是否点击的是删除按钮\n",[102,74743,74745,74747,74749,74751,74753],{"class":104,"line":74744},276,[102,74746,54471],{"class":108},[102,74748,67025],{"class":112},[102,74750,54477],{"class":108},[102,74752,68247],{"class":217},[102,74754,12432],{"class":112},[102,74756,74758],{"class":104,"line":74757},277,[102,74759,74760],{"class":171},"        \u002F\u002F alert(1)\n",[102,74762,74764],{"class":104,"line":74763},278,[102,74765,74766],{"class":171},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[102,74768,74770],{"class":104,"line":74769},279,[102,74771,74772],{"class":171},"        \u002F\u002F console.log(e.target)\n",[102,74774,74776],{"class":104,"line":74775},280,[102,74777,74778],{"class":171},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[102,74780,74782],{"class":104,"line":74781},281,[102,74783,2389],{"emptyLinePlaceholder":30},[102,74785,74787],{"class":104,"line":74786},282,[102,74788,74789],{"class":171},"        \u002F\u002F 确认框，确然是否真的要删除\n",[102,74791,74793],{"class":104,"line":74792},283,[102,74794,74795],{"class":171},"        \u002F\u002F confirm()为确认框\n",[102,74797,74799],{"class":104,"line":74798},284,[102,74800,74801],{"class":171},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[102,74803,74805,74807,74809,74812,74814,74817],{"class":104,"line":74804},285,[102,74806,2486],{"class":108},[102,74808,1647],{"class":112},[102,74810,74811],{"class":1952},"confirm",[102,74813,113],{"class":112},[102,74815,74816],{"class":217},"'您确定要删除这条数据吗？'",[102,74818,74819],{"class":112},")) {\n",[102,74821,74823,74826,74828,74830,74832],{"class":104,"line":74822},286,[102,74824,74825],{"class":112},"          arr.",[102,74827,58001],{"class":1952},[102,74829,70385],{"class":112},[102,74831,330],{"class":161},[102,74833,119],{"class":112},[102,74835,74837],{"class":104,"line":74836},287,[102,74838,74839],{"class":171},"          \u002F\u002F 3.4 重新渲染页面\n",[102,74841,74843,74846],{"class":104,"line":74842},288,[102,74844,74845],{"class":1952},"          render",[102,74847,1965],{"class":112},[102,74849,74851],{"class":104,"line":74850},289,[102,74852,74853],{"class":171},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[102,74855,74857,74860,74862,74864,74866,74868,74870,74872,74874],{"class":104,"line":74856},290,[102,74858,74859],{"class":112},"          localStorage.",[102,74861,71645],{"class":1952},[102,74863,113],{"class":112},[102,74865,74681],{"class":217},[102,74867,12425],{"class":112},[102,74869,71655],{"class":161},[102,74871,671],{"class":112},[102,74873,71660],{"class":1952},[102,74875,74692],{"class":112},[102,74877,74879],{"class":104,"line":74878},291,[102,74880,2518],{"class":112},[102,74882,74884],{"class":104,"line":74883},292,[102,74885,52389],{"class":112},[102,74887,74889],{"class":104,"line":74888},293,[102,74890,2389],{"emptyLinePlaceholder":30},[102,74892,74894],{"class":104,"line":74893},294,[102,74895,33452],{"class":112},[102,74897,74899],{"class":104,"line":74898},295,[102,74900,2389],{"emptyLinePlaceholder":30},[102,74902,74904,74906,74908],{"class":104,"line":74903},296,[102,74905,52408],{"class":112},[102,74907,51804],{"class":51291},[102,74909,51298],{"class":112},[102,74911,74913,74915,74917],{"class":104,"line":74912},297,[102,74914,51776],{"class":112},[102,74916,51791],{"class":51291},[102,74918,51298],{"class":112},[102,74920,74922],{"class":104,"line":74921},298,[102,74923,2389],{"emptyLinePlaceholder":30},[102,74925,74927,74929,74931],{"class":104,"line":74926},299,[102,74928,51776],{"class":112},[102,74930,50626],{"class":51291},[102,74932,51298],{"class":112},[14,74934,74936],{"id":74935},"_36-正则表达式","3.6 正则表达式",[19,74938,74939],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,74941,74942],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,74944,74945],{},"正则表达式的作用：",[1120,74947,74948,74955,74961],{},[59,74949,74950,74951,74954],{},"表单验证（ ",[262,74952,74953],{},"匹配"," ）",[59,74956,74957,74958,74954],{},"过滤敏感词（ ",[262,74959,74960],{},"替换",[59,74962,74963,74964,74954],{},"字符串中提取我们想要的部分（ ",[262,74965,74966],{},"提取",[73,74968,74970],{"id":74969},"_361-语法","3.6.1 语法",[19,74972,74973],{},"正则表达式使用步骤：",[56,74975,74976,74979],{},[59,74977,74978],{},"定义规则",[59,74980,74981],{},"查找是否匹配",[19,74983,74984],{},"正则表达式里边不需要写引号",[19,74986,74987],{},[1451,74988],{"alt":23,"src":74989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,74991,74992],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,74994,74995],{},"reg.test(str)",[19,74997,74998],{},[1451,74999],{"alt":23,"src":75000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75002,75003],{},[1451,75004],{"alt":23,"src":75005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[73,75007,75009],{"id":75008},"_362-元字符","3.6.2 元字符",[56,75011,75012,75015,75018,75021,75028],{},[59,75013,75014],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[59,75016,75017],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[59,75019,75020],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[59,75022,75023,75024],{},"正则验证工具：",[351,75025,75026],{"href":75026,"rel":75027},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23855],[59,75029,75030],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21988,75032,75034],{"id":75033},"_3621-边界符","3.6.2.1 边界符",[19,75036,75037],{},[1451,75038],{"alt":23,"src":75039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75041,75042],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75044,75045],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75047,75048],{},"只匹配一次",[19,75050,75051],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21988,75053,75055],{"id":75054},"_3622-量词","3.6.2.2 量词",[19,75057,75058],{},[1451,75059],{"alt":23,"src":75060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75062,75063],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21988,75065,75067],{"id":75066},"_3623-元字符","3.6.2.3 元字符",[19,75069,75070],{},[1451,75071],{"alt":23,"src":75072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75074,75075],{},"匹配的是a或b或c []只选一个",[19,75077,75078],{},[1451,75079],{"alt":23,"src":75080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75082,75083],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75085,75086],{},[1451,75087],{"alt":23,"src":75088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75090,75091],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75093,75094],{},[1451,75095],{"alt":23,"src":75096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[93,75098,75100],{"className":50624,"code":75099,"language":50626,"meta":23,"style":23},"\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",[99,75101,75102,75112,75126,75130,75138,75152,75172,75184,75192,75196,75204,75212,75217,75248,75275,75303,75307,75312,75340,75371,75376,75381,75412,75444,75476,75480,75485,75516,75546,75576,75580,75585,75616,75647,75677,75707,75711,75716,75749,75753,75758,75789,75820,75824,75829,75860,75890,75921,75925,75930,75962,75993,76024,76051,76082,76114,76147,76178,76209,76241,76272,76280,76288,76292],{"__ignoreMap":23},[102,75103,75104,75106,75108,75110],{"class":104,"line":105},[102,75105,51288],{"class":112},[102,75107,51292],{"class":51291},[102,75109,51295],{"class":1952},[102,75111,51298],{"class":112},[102,75113,75114,75116,75118,75120,75122,75124],{"class":104,"line":24},[102,75115,1023],{"class":112},[102,75117,50626],{"class":51291},[102,75119,51307],{"class":1952},[102,75121,158],{"class":112},[102,75123,51312],{"class":217},[102,75125,51298],{"class":112},[102,75127,75128],{"class":104,"line":1168},[102,75129,2389],{"emptyLinePlaceholder":30},[102,75131,75132,75134,75136],{"class":104,"line":1183},[102,75133,1023],{"class":112},[102,75135,51325],{"class":51291},[102,75137,51298],{"class":112},[102,75139,75140,75142,75144,75146,75148,75150],{"class":104,"line":1189},[102,75141,52135],{"class":112},[102,75143,51335],{"class":51291},[102,75145,51338],{"class":1952},[102,75147,158],{"class":112},[102,75149,51343],{"class":217},[102,75151,51298],{"class":112},[102,75153,75154,75156,75158,75160,75162,75164,75166,75168,75170],{"class":104,"line":1203},[102,75155,52135],{"class":112},[102,75157,51335],{"class":51291},[102,75159,14910],{"class":1952},[102,75161,158],{"class":112},[102,75163,51382],{"class":217},[102,75165,51362],{"class":1952},[102,75167,158],{"class":112},[102,75169,51389],{"class":217},[102,75171,51298],{"class":112},[102,75173,75174,75176,75178,75180,75182],{"class":104,"line":1209},[102,75175,52135],{"class":112},[102,75177,51398],{"class":51291},[102,75179,51401],{"class":112},[102,75181,51398],{"class":51291},[102,75183,51298],{"class":112},[102,75185,75186,75188,75190],{"class":104,"line":1300},[102,75187,51776],{"class":112},[102,75189,51325],{"class":51291},[102,75191,51298],{"class":112},[102,75193,75194],{"class":104,"line":1306},[102,75195,2389],{"emptyLinePlaceholder":30},[102,75197,75198,75200,75202],{"class":104,"line":1318},[102,75199,1023],{"class":112},[102,75201,51791],{"class":51291},[102,75203,51298],{"class":112},[102,75205,75206,75208,75210],{"class":104,"line":1601},[102,75207,52135],{"class":112},[102,75209,51804],{"class":51291},[102,75211,51298],{"class":112},[102,75213,75214],{"class":104,"line":1606},[102,75215,75216],{"class":171},"    \u002F\u002F 元字符中\n",[102,75218,75219,75221,75223,75225,75227,75230,75232,75234,75237,75239,75242,75245],{"class":104,"line":1612},[102,75220,73744],{"class":112},[102,75222,58238],{"class":1952},[102,75224,113],{"class":112},[102,75226,697],{"class":217},[102,75228,75229],{"class":47968},"哈",[102,75231,697],{"class":217},[102,75233,671],{"class":112},[102,75235,75236],{"class":1952},"test",[102,75238,113],{"class":112},[102,75240,75241],{"class":217},"'哈'",[102,75243,75244],{"class":112},"))  ",[102,75246,75247],{"class":171},"\u002F\u002Ftrue\n",[102,75249,75250,75252,75254,75256,75258,75260,75262,75264,75266,75268,75271,75273],{"class":104,"line":1617},[102,75251,73744],{"class":112},[102,75253,58238],{"class":1952},[102,75255,113],{"class":112},[102,75257,697],{"class":217},[102,75259,75229],{"class":47968},[102,75261,697],{"class":217},[102,75263,671],{"class":112},[102,75265,75236],{"class":1952},[102,75267,113],{"class":112},[102,75269,75270],{"class":217},"'哈哈'",[102,75272,75244],{"class":112},[102,75274,75247],{"class":171},[102,75276,75277,75279,75281,75283,75285,75287,75289,75291,75293,75295,75298,75301],{"class":104,"line":1631},[102,75278,73744],{"class":112},[102,75280,58238],{"class":1952},[102,75282,113],{"class":112},[102,75284,697],{"class":217},[102,75286,75229],{"class":47968},[102,75288,697],{"class":217},[102,75290,671],{"class":112},[102,75292,75236],{"class":1952},[102,75294,113],{"class":112},[102,75296,75297],{"class":217},"'二哈'",[102,75299,75300],{"class":112},"))   ",[102,75302,75247],{"class":171},[102,75304,75305],{"class":104,"line":1636},[102,75306,2389],{"emptyLinePlaceholder":30},[102,75308,75309],{"class":104,"line":1642},[102,75310,75311],{"class":171},"    \u002F\u002F 1.边界符\n",[102,75313,75314,75316,75318,75320,75322,75324,75326,75328,75330,75332,75334,75336,75338],{"class":104,"line":1663},[102,75315,73744],{"class":112},[102,75317,58238],{"class":1952},[102,75319,113],{"class":112},[102,75321,697],{"class":217},[102,75323,1079],{"class":108},[102,75325,75229],{"class":47968},[102,75327,697],{"class":217},[102,75329,671],{"class":112},[102,75331,75236],{"class":1952},[102,75333,113],{"class":112},[102,75335,75241],{"class":217},[102,75337,75244],{"class":112},[102,75339,75247],{"class":171},[102,75341,75342,75344,75346,75348,75350,75352,75354,75356,75358,75360,75362,75364,75366,75368],{"class":104,"line":1668},[102,75343,73744],{"class":112},[102,75345,58238],{"class":1952},[102,75347,113],{"class":112},[102,75349,697],{"class":217},[102,75351,1079],{"class":108},[102,75353,75229],{"class":47968},[102,75355,415],{"class":108},[102,75357,697],{"class":217},[102,75359,671],{"class":112},[102,75361,75236],{"class":1952},[102,75363,113],{"class":112},[102,75365,75270],{"class":217},[102,75367,75244],{"class":112},[102,75369,75370],{"class":171},"\u002F\u002Ffalse\n",[102,75372,75373],{"class":104,"line":1682},[102,75374,75375],{"class":171},"    \u002F\u002F 2.量词\n",[102,75377,75378],{"class":104,"line":1687},[102,75379,75380],{"class":171},"    \u002F\u002F 量词 * 类似于 >= 0\n",[102,75382,75383,75385,75387,75389,75391,75393,75395,75398,75400,75402,75404,75406,75408,75410],{"class":104,"line":1716},[102,75384,73744],{"class":112},[102,75386,58238],{"class":1952},[102,75388,113],{"class":112},[102,75390,697],{"class":217},[102,75392,1079],{"class":108},[102,75394,75229],{"class":47968},[102,75396,75397],{"class":108},"*$",[102,75399,697],{"class":217},[102,75401,671],{"class":112},[102,75403,75236],{"class":1952},[102,75405,113],{"class":112},[102,75407,75270],{"class":217},[102,75409,75244],{"class":112},[102,75411,75247],{"class":171},[102,75413,75414,75416,75418,75420,75422,75424,75426,75428,75430,75432,75434,75436,75439,75441],{"class":104,"line":1721},[102,75415,73744],{"class":112},[102,75417,58238],{"class":1952},[102,75419,113],{"class":112},[102,75421,697],{"class":217},[102,75423,1079],{"class":108},[102,75425,75229],{"class":47968},[102,75427,75397],{"class":108},[102,75429,697],{"class":217},[102,75431,671],{"class":112},[102,75433,75236],{"class":1952},[102,75435,113],{"class":112},[102,75437,75438],{"class":217},"'二哈好傻'",[102,75440,75244],{"class":112},[102,75442,75443],{"class":171},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[102,75445,75446,75448,75450,75452,75454,75456,75458,75460,75462,75464,75466,75468,75471,75473],{"class":104,"line":1738},[102,75447,73744],{"class":112},[102,75449,58238],{"class":1952},[102,75451,113],{"class":112},[102,75453,697],{"class":217},[102,75455,1079],{"class":108},[102,75457,75229],{"class":47968},[102,75459,75397],{"class":108},[102,75461,697],{"class":217},[102,75463,671],{"class":112},[102,75465,75236],{"class":1952},[102,75467,113],{"class":112},[102,75469,75470],{"class":217},"'哈好哈'",[102,75472,75300],{"class":112},[102,75474,75475],{"class":171},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[102,75477,75478],{"class":104,"line":1743},[102,75479,2389],{"emptyLinePlaceholder":30},[102,75481,75482],{"class":104,"line":1748},[102,75483,75484],{"class":171},"    \u002F\u002F +类似于>=1\n",[102,75486,75487,75489,75491,75493,75495,75497,75499,75502,75504,75506,75508,75510,75512,75514],{"class":104,"line":1753},[102,75488,73744],{"class":112},[102,75490,58238],{"class":1952},[102,75492,113],{"class":112},[102,75494,697],{"class":217},[102,75496,1079],{"class":108},[102,75498,75229],{"class":47968},[102,75500,75501],{"class":108},"+$",[102,75503,697],{"class":217},[102,75505,671],{"class":112},[102,75507,75236],{"class":1952},[102,75509,113],{"class":112},[102,75511,75270],{"class":217},[102,75513,75244],{"class":112},[102,75515,75247],{"class":171},[102,75517,75518,75520,75522,75524,75526,75528,75530,75532,75534,75536,75538,75540,75542,75544],{"class":104,"line":1767},[102,75519,73744],{"class":112},[102,75521,58238],{"class":1952},[102,75523,113],{"class":112},[102,75525,697],{"class":217},[102,75527,1079],{"class":108},[102,75529,75229],{"class":47968},[102,75531,75501],{"class":108},[102,75533,697],{"class":217},[102,75535,671],{"class":112},[102,75537,75236],{"class":1952},[102,75539,113],{"class":112},[102,75541,75438],{"class":217},[102,75543,75244],{"class":112},[102,75545,75443],{"class":171},[102,75547,75548,75550,75552,75554,75556,75558,75560,75562,75564,75566,75568,75570,75572,75574],{"class":104,"line":1772},[102,75549,73744],{"class":112},[102,75551,58238],{"class":1952},[102,75553,113],{"class":112},[102,75555,697],{"class":217},[102,75557,1079],{"class":108},[102,75559,75229],{"class":47968},[102,75561,75501],{"class":108},[102,75563,697],{"class":217},[102,75565,671],{"class":112},[102,75567,75236],{"class":1952},[102,75569,113],{"class":112},[102,75571,75470],{"class":217},[102,75573,75300],{"class":112},[102,75575,75370],{"class":171},[102,75577,75578],{"class":104,"line":2566},[102,75579,2389],{"emptyLinePlaceholder":30},[102,75581,75582],{"class":104,"line":2580},[102,75583,75584],{"class":171},"    \u002F\u002F ?类似于0次或一次\n",[102,75586,75587,75589,75591,75593,75595,75597,75600,75602,75604,75606,75608,75610,75612,75614],{"class":104,"line":2588},[102,75588,73744],{"class":112},[102,75590,58238],{"class":1952},[102,75592,113],{"class":112},[102,75594,697],{"class":217},[102,75596,1079],{"class":108},[102,75598,75599],{"class":47968},"哈？",[102,75601,415],{"class":108},[102,75603,697],{"class":217},[102,75605,671],{"class":112},[102,75607,75236],{"class":1952},[102,75609,113],{"class":112},[102,75611,74219],{"class":217},[102,75613,75300],{"class":112},[102,75615,75247],{"class":171},[102,75617,75618,75620,75622,75624,75626,75628,75630,75633,75635,75637,75639,75641,75643,75645],{"class":104,"line":2593},[102,75619,73744],{"class":112},[102,75621,58238],{"class":1952},[102,75623,113],{"class":112},[102,75625,697],{"class":217},[102,75627,1079],{"class":108},[102,75629,75229],{"class":47968},[102,75631,75632],{"class":108},"?$",[102,75634,697],{"class":217},[102,75636,671],{"class":112},[102,75638,75236],{"class":1952},[102,75640,113],{"class":112},[102,75642,75270],{"class":217},[102,75644,75244],{"class":112},[102,75646,75370],{"class":171},[102,75648,75649,75651,75653,75655,75657,75659,75661,75663,75665,75667,75669,75671,75673,75675],{"class":104,"line":2599},[102,75650,73744],{"class":112},[102,75652,58238],{"class":1952},[102,75654,113],{"class":112},[102,75656,697],{"class":217},[102,75658,1079],{"class":108},[102,75660,75229],{"class":47968},[102,75662,75632],{"class":108},[102,75664,697],{"class":217},[102,75666,671],{"class":112},[102,75668,75236],{"class":1952},[102,75670,113],{"class":112},[102,75672,75438],{"class":217},[102,75674,75244],{"class":112},[102,75676,75443],{"class":171},[102,75678,75679,75681,75683,75685,75687,75689,75691,75693,75695,75697,75699,75701,75703,75705],{"class":104,"line":2605},[102,75680,73744],{"class":112},[102,75682,58238],{"class":1952},[102,75684,113],{"class":112},[102,75686,697],{"class":217},[102,75688,1079],{"class":108},[102,75690,75229],{"class":47968},[102,75692,75632],{"class":108},[102,75694,697],{"class":217},[102,75696,671],{"class":112},[102,75698,75236],{"class":1952},[102,75700,113],{"class":112},[102,75702,75470],{"class":217},[102,75704,75244],{"class":112},[102,75706,75370],{"class":171},[102,75708,75709],{"class":104,"line":2610},[102,75710,2389],{"emptyLinePlaceholder":30},[102,75712,75713],{"class":104,"line":7938},[102,75714,75715],{"class":171},"    \u002F\u002F {n}写几，就必须出现几次\n",[102,75717,75718,75720,75722,75724,75726,75728,75730,75733,75735,75737,75739,75741,75744,75747],{"class":104,"line":7962},[102,75719,73744],{"class":112},[102,75721,58238],{"class":1952},[102,75723,113],{"class":112},[102,75725,697],{"class":217},[102,75727,1079],{"class":108},[102,75729,75229],{"class":47968},[102,75731,75732],{"class":108},"{4}$",[102,75734,697],{"class":217},[102,75736,671],{"class":112},[102,75738,75236],{"class":1952},[102,75740,113],{"class":112},[102,75742,75743],{"class":217},"'哈哈哈哈'",[102,75745,75746],{"class":112},")) ",[102,75748,75247],{"class":171},[102,75750,75751],{"class":104,"line":7967},[102,75752,2389],{"emptyLinePlaceholder":30},[102,75754,75755],{"class":104,"line":7973},[102,75756,75757],{"class":171},"    \u002F\u002F {n,}大于等于n次\n",[102,75759,75760,75762,75764,75766,75768,75770,75772,75775,75777,75779,75781,75783,75785,75787],{"class":104,"line":8000},[102,75761,73744],{"class":112},[102,75763,58238],{"class":1952},[102,75765,113],{"class":112},[102,75767,697],{"class":217},[102,75769,1079],{"class":108},[102,75771,75229],{"class":47968},[102,75773,75774],{"class":108},"{4,}$",[102,75776,697],{"class":217},[102,75778,671],{"class":112},[102,75780,75236],{"class":1952},[102,75782,113],{"class":112},[102,75784,75743],{"class":217},[102,75786,75746],{"class":112},[102,75788,75247],{"class":171},[102,75790,75791,75793,75795,75797,75799,75801,75803,75805,75807,75809,75811,75813,75816,75818],{"class":104,"line":8005},[102,75792,73744],{"class":112},[102,75794,58238],{"class":1952},[102,75796,113],{"class":112},[102,75798,697],{"class":217},[102,75800,1079],{"class":108},[102,75802,75229],{"class":47968},[102,75804,75774],{"class":108},[102,75806,697],{"class":217},[102,75808,671],{"class":112},[102,75810,75236],{"class":1952},[102,75812,113],{"class":112},[102,75814,75815],{"class":217},"'哈哈哈哈哈'",[102,75817,75746],{"class":112},[102,75819,75247],{"class":171},[102,75821,75822],{"class":104,"line":8011},[102,75823,2389],{"emptyLinePlaceholder":30},[102,75825,75826],{"class":104,"line":8023},[102,75827,75828],{"class":171},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[102,75830,75831,75833,75835,75837,75839,75841,75843,75846,75848,75850,75852,75854,75856,75858],{"class":104,"line":8035},[102,75832,73744],{"class":112},[102,75834,58238],{"class":1952},[102,75836,113],{"class":112},[102,75838,697],{"class":217},[102,75840,1079],{"class":108},[102,75842,75229],{"class":47968},[102,75844,75845],{"class":108},"{4,6}$",[102,75847,697],{"class":217},[102,75849,671],{"class":112},[102,75851,75236],{"class":1952},[102,75853,113],{"class":112},[102,75855,75743],{"class":217},[102,75857,75746],{"class":112},[102,75859,75247],{"class":171},[102,75861,75862,75864,75866,75868,75870,75872,75874,75876,75878,75880,75882,75884,75886,75888],{"class":104,"line":8047},[102,75863,73744],{"class":112},[102,75865,58238],{"class":1952},[102,75867,113],{"class":112},[102,75869,697],{"class":217},[102,75871,1079],{"class":108},[102,75873,75229],{"class":47968},[102,75875,75845],{"class":108},[102,75877,697],{"class":217},[102,75879,671],{"class":112},[102,75881,75236],{"class":1952},[102,75883,113],{"class":112},[102,75885,75815],{"class":217},[102,75887,75746],{"class":112},[102,75889,75247],{"class":171},[102,75891,75892,75894,75896,75898,75900,75902,75904,75906,75908,75910,75912,75914,75917,75919],{"class":104,"line":9706},[102,75893,73744],{"class":112},[102,75895,58238],{"class":1952},[102,75897,113],{"class":112},[102,75899,697],{"class":217},[102,75901,1079],{"class":108},[102,75903,75229],{"class":47968},[102,75905,75845],{"class":108},[102,75907,697],{"class":217},[102,75909,671],{"class":112},[102,75911,75236],{"class":1952},[102,75913,113],{"class":112},[102,75915,75916],{"class":217},"'哈哈哈哈哈哈哈'",[102,75918,75746],{"class":112},[102,75920,75370],{"class":171},[102,75922,75923],{"class":104,"line":9731},[102,75924,2389],{"emptyLinePlaceholder":30},[102,75926,75927],{"class":104,"line":9754},[102,75928,75929],{"class":171},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[102,75931,75932,75934,75936,75938,75940,75942,75945,75947,75949,75951,75953,75955,75958,75960],{"class":104,"line":9778},[102,75933,73744],{"class":112},[102,75935,58238],{"class":1952},[102,75937,113],{"class":112},[102,75939,697],{"class":217},[102,75941,1079],{"class":108},[102,75943,75944],{"class":161},"[abc]",[102,75946,415],{"class":108},[102,75948,697],{"class":217},[102,75950,671],{"class":112},[102,75952,75236],{"class":1952},[102,75954,113],{"class":112},[102,75956,75957],{"class":217},"'a'",[102,75959,75244],{"class":112},[102,75961,75247],{"class":171},[102,75963,75964,75966,75968,75970,75972,75974,75976,75978,75980,75982,75984,75986,75989,75991],{"class":104,"line":9783},[102,75965,73744],{"class":112},[102,75967,58238],{"class":1952},[102,75969,113],{"class":112},[102,75971,697],{"class":217},[102,75973,1079],{"class":108},[102,75975,75944],{"class":161},[102,75977,415],{"class":108},[102,75979,697],{"class":217},[102,75981,671],{"class":112},[102,75983,75236],{"class":1952},[102,75985,113],{"class":112},[102,75987,75988],{"class":217},"'b'",[102,75990,75244],{"class":112},[102,75992,75247],{"class":171},[102,75994,75995,75997,75999,76001,76003,76005,76007,76009,76011,76013,76015,76017,76020,76022],{"class":104,"line":9788},[102,75996,73744],{"class":112},[102,75998,58238],{"class":1952},[102,76000,113],{"class":112},[102,76002,697],{"class":217},[102,76004,1079],{"class":108},[102,76006,75944],{"class":161},[102,76008,415],{"class":108},[102,76010,697],{"class":217},[102,76012,671],{"class":112},[102,76014,75236],{"class":1952},[102,76016,113],{"class":112},[102,76018,76019],{"class":217},"'c'",[102,76021,75244],{"class":112},[102,76023,75247],{"class":171},[102,76025,76026,76028,76030,76032,76034,76036,76038,76040,76042,76044,76047,76049],{"class":104,"line":9793},[102,76027,73744],{"class":112},[102,76029,58238],{"class":1952},[102,76031,113],{"class":112},[102,76033,697],{"class":217},[102,76035,75944],{"class":161},[102,76037,697],{"class":217},[102,76039,671],{"class":112},[102,76041,75236],{"class":1952},[102,76043,113],{"class":112},[102,76045,76046],{"class":217},"'ab'",[102,76048,75244],{"class":112},[102,76050,75247],{"class":171},[102,76052,76053,76055,76057,76059,76061,76063,76065,76067,76069,76071,76073,76075,76077,76079],{"class":104,"line":9802},[102,76054,73744],{"class":112},[102,76056,58238],{"class":1952},[102,76058,113],{"class":112},[102,76060,697],{"class":217},[102,76062,1079],{"class":108},[102,76064,75944],{"class":161},[102,76066,415],{"class":108},[102,76068,697],{"class":217},[102,76070,671],{"class":112},[102,76072,75236],{"class":1952},[102,76074,113],{"class":112},[102,76076,76046],{"class":217},[102,76078,75244],{"class":112},[102,76080,76081],{"class":171},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[102,76083,76084,76086,76088,76090,76092,76094,76096,76099,76101,76103,76105,76107,76109,76111],{"class":104,"line":9807},[102,76085,73744],{"class":112},[102,76087,58238],{"class":1952},[102,76089,113],{"class":112},[102,76091,697],{"class":217},[102,76093,1079],{"class":108},[102,76095,75944],{"class":161},[102,76097,76098],{"class":108},"{2}$",[102,76100,697],{"class":217},[102,76102,671],{"class":112},[102,76104,75236],{"class":1952},[102,76106,113],{"class":112},[102,76108,76046],{"class":217},[102,76110,75244],{"class":112},[102,76112,76113],{"class":171},"\u002F\u002Ftrue   可以选两个\n",[102,76115,76116,76118,76120,76122,76124,76126,76129,76131,76133,76135,76137,76139,76142,76144],{"class":104,"line":9813},[102,76117,73744],{"class":112},[102,76119,58238],{"class":1952},[102,76121,113],{"class":112},[102,76123,697],{"class":217},[102,76125,1079],{"class":108},[102,76127,76128],{"class":161},"[a-z]",[102,76130,415],{"class":108},[102,76132,697],{"class":217},[102,76134,671],{"class":112},[102,76136,75236],{"class":1952},[102,76138,113],{"class":112},[102,76140,76141],{"class":217},"'p'",[102,76143,75300],{"class":112},[102,76145,76146],{"class":171},"\u002F\u002Ftrue   依然只能选一个\n",[102,76148,76149,76151,76153,76155,76157,76159,76162,76164,76166,76168,76170,76172,76174,76176],{"class":104,"line":9834},[102,76150,73744],{"class":112},[102,76152,58238],{"class":1952},[102,76154,113],{"class":112},[102,76156,697],{"class":217},[102,76158,1079],{"class":108},[102,76160,76161],{"class":161},"[A-Z]",[102,76163,415],{"class":108},[102,76165,697],{"class":217},[102,76167,671],{"class":112},[102,76169,75236],{"class":1952},[102,76171,113],{"class":112},[102,76173,76141],{"class":217},[102,76175,75300],{"class":112},[102,76177,75370],{"class":171},[102,76179,76180,76182,76184,76186,76188,76190,76192,76194,76196,76198,76200,76202,76205,76207],{"class":104,"line":9840},[102,76181,73744],{"class":112},[102,76183,58238],{"class":1952},[102,76185,113],{"class":112},[102,76187,697],{"class":217},[102,76189,1079],{"class":108},[102,76191,76161],{"class":161},[102,76193,415],{"class":108},[102,76195,697],{"class":217},[102,76197,671],{"class":112},[102,76199,75236],{"class":1952},[102,76201,113],{"class":112},[102,76203,76204],{"class":217},"'P'",[102,76206,75300],{"class":112},[102,76208,75247],{"class":171},[102,76210,76211,76213,76215,76217,76219,76221,76224,76226,76228,76230,76232,76234,76237,76239],{"class":104,"line":9854},[102,76212,73744],{"class":112},[102,76214,58238],{"class":1952},[102,76216,113],{"class":112},[102,76218,697],{"class":217},[102,76220,1079],{"class":108},[102,76222,76223],{"class":161},"[0-9]",[102,76225,415],{"class":108},[102,76227,697],{"class":217},[102,76229,671],{"class":112},[102,76231,75236],{"class":1952},[102,76233,113],{"class":112},[102,76235,76236],{"class":217},"'0'",[102,76238,75300],{"class":112},[102,76240,75247],{"class":171},[102,76242,76243,76245,76247,76249,76251,76253,76256,76258,76260,76262,76264,76266,76268,76270],{"class":104,"line":9860},[102,76244,73744],{"class":112},[102,76246,58238],{"class":1952},[102,76248,113],{"class":112},[102,76250,697],{"class":217},[102,76252,1079],{"class":108},[102,76254,76255],{"class":161},"[a-zA-Z0-9]",[102,76257,415],{"class":108},[102,76259,697],{"class":217},[102,76261,671],{"class":112},[102,76263,75236],{"class":1952},[102,76265,113],{"class":112},[102,76267,76141],{"class":217},[102,76269,75244],{"class":112},[102,76271,75247],{"class":171},[102,76273,76274,76276,76278],{"class":104,"line":9887},[102,76275,52408],{"class":112},[102,76277,51804],{"class":51291},[102,76279,51298],{"class":112},[102,76281,76282,76284,76286],{"class":104,"line":9896},[102,76283,51776],{"class":112},[102,76285,51791],{"class":51291},[102,76287,51298],{"class":112},[102,76289,76290],{"class":104,"line":9902},[102,76291,2389],{"emptyLinePlaceholder":30},[102,76293,76294,76296,76298],{"class":104,"line":9910},[102,76295,51776],{"class":112},[102,76297,50626],{"class":51291},[102,76299,51298],{"class":112},[21988,76301,76303],{"id":76302},"_3624-修饰符","3.6.2.4 修饰符",[19,76305,76306],{},[1451,76307],{"alt":23,"src":76308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76310,76311],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76313,76314],{},[1451,76315],{"alt":23,"src":76316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[93,76318,76320],{"className":50624,"code":76319,"language":50626,"meta":23,"style":23},"\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",[99,76321,76322,76332,76346,76354,76368,76388,76400,76408,76416,76424,76456,76487,76492,76524,76535,76568,76577,76585,76593],{"__ignoreMap":23},[102,76323,76324,76326,76328,76330],{"class":104,"line":105},[102,76325,51288],{"class":112},[102,76327,51292],{"class":51291},[102,76329,51295],{"class":1952},[102,76331,51298],{"class":112},[102,76333,76334,76336,76338,76340,76342,76344],{"class":104,"line":24},[102,76335,1023],{"class":112},[102,76337,50626],{"class":51291},[102,76339,51307],{"class":1952},[102,76341,158],{"class":112},[102,76343,51312],{"class":217},[102,76345,51298],{"class":112},[102,76347,76348,76350,76352],{"class":104,"line":1168},[102,76349,1023],{"class":112},[102,76351,51325],{"class":51291},[102,76353,51298],{"class":112},[102,76355,76356,76358,76360,76362,76364,76366],{"class":104,"line":1183},[102,76357,52135],{"class":112},[102,76359,51335],{"class":51291},[102,76361,51338],{"class":1952},[102,76363,158],{"class":112},[102,76365,51343],{"class":217},[102,76367,51298],{"class":112},[102,76369,76370,76372,76374,76376,76378,76380,76382,76384,76386],{"class":104,"line":1189},[102,76371,52135],{"class":112},[102,76373,51335],{"class":51291},[102,76375,14910],{"class":1952},[102,76377,158],{"class":112},[102,76379,51382],{"class":217},[102,76381,51362],{"class":1952},[102,76383,158],{"class":112},[102,76385,51389],{"class":217},[102,76387,51298],{"class":112},[102,76389,76390,76392,76394,76396,76398],{"class":104,"line":1203},[102,76391,52135],{"class":112},[102,76393,51398],{"class":51291},[102,76395,51401],{"class":112},[102,76397,51398],{"class":51291},[102,76399,51298],{"class":112},[102,76401,76402,76404,76406],{"class":104,"line":1209},[102,76403,51776],{"class":112},[102,76405,51325],{"class":51291},[102,76407,51298],{"class":112},[102,76409,76410,76412,76414],{"class":104,"line":1300},[102,76411,1023],{"class":112},[102,76413,51791],{"class":51291},[102,76415,51298],{"class":112},[102,76417,76418,76420,76422],{"class":104,"line":1306},[102,76419,52135],{"class":112},[102,76421,51804],{"class":51291},[102,76423,51298],{"class":112},[102,76425,76426,76428,76430,76432,76434,76436,76439,76441,76443,76445,76447,76449,76452,76454],{"class":104,"line":1318},[102,76427,73744],{"class":112},[102,76429,58238],{"class":1952},[102,76431,113],{"class":112},[102,76433,697],{"class":217},[102,76435,1079],{"class":108},[102,76437,76438],{"class":47968},"java",[102,76440,415],{"class":108},[102,76442,697],{"class":217},[102,76444,671],{"class":112},[102,76446,75236],{"class":1952},[102,76448,113],{"class":112},[102,76450,76451],{"class":217},"'java'",[102,76453,75746],{"class":112},[102,76455,75247],{"class":171},[102,76457,76458,76460,76462,76464,76466,76468,76470,76472,76474,76476,76478,76480,76483,76485],{"class":104,"line":1601},[102,76459,73744],{"class":112},[102,76461,58238],{"class":1952},[102,76463,113],{"class":112},[102,76465,697],{"class":217},[102,76467,1079],{"class":108},[102,76469,76438],{"class":47968},[102,76471,415],{"class":108},[102,76473,697],{"class":217},[102,76475,671],{"class":112},[102,76477,75236],{"class":1952},[102,76479,113],{"class":112},[102,76481,76482],{"class":217},"'Java'",[102,76484,75746],{"class":112},[102,76486,75370],{"class":171},[102,76488,76489],{"class":104,"line":1606},[102,76490,76491],{"class":171},"    \u002F\u002F 不区分大小写、\n",[102,76493,76494,76496,76498,76500,76502,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522],{"class":104,"line":1612},[102,76495,73744],{"class":112},[102,76497,58238],{"class":1952},[102,76499,113],{"class":112},[102,76501,697],{"class":217},[102,76503,1079],{"class":108},[102,76505,76438],{"class":47968},[102,76507,415],{"class":108},[102,76509,697],{"class":217},[102,76511,554],{"class":108},[102,76513,671],{"class":112},[102,76515,75236],{"class":1952},[102,76517,113],{"class":112},[102,76519,76482],{"class":217},[102,76521,75746],{"class":112},[102,76523,75247],{"class":171},[102,76525,76526,76528,76530,76532],{"class":104,"line":1617},[102,76527,11211],{"class":108},[102,76529,73910],{"class":161},[102,76531,13554],{"class":108},[102,76533,76534],{"class":217}," 'java是一门编程语言，学完java工资很高'\n",[102,76536,76537,76539,76542,76544,76547,76550,76552,76554,76556,76558,76561,76563,76566],{"class":104,"line":1631},[102,76538,11211],{"class":108},[102,76540,76541],{"class":161}," result",[102,76543,13554],{"class":108},[102,76545,76546],{"class":112}," str.",[102,76548,76549],{"class":1952},"replace",[102,76551,113],{"class":112},[102,76553,697],{"class":217},[102,76555,76438],{"class":47968},[102,76557,697],{"class":217},[102,76559,76560],{"class":108},"ig",[102,76562,12425],{"class":112},[102,76564,76565],{"class":217},"'前端'",[102,76567,119],{"class":112},[102,76569,76570,76572,76574],{"class":104,"line":1636},[102,76571,73744],{"class":112},[102,76573,58238],{"class":1952},[102,76575,76576],{"class":112},"(result)\n",[102,76578,76579,76581,76583],{"class":104,"line":1642},[102,76580,52408],{"class":112},[102,76582,51804],{"class":51291},[102,76584,51298],{"class":112},[102,76586,76587,76589,76591],{"class":104,"line":1663},[102,76588,51776],{"class":112},[102,76590,51791],{"class":51291},[102,76592,51298],{"class":112},[102,76594,76595,76597,76599],{"class":104,"line":1668},[102,76596,51776],{"class":112},[102,76598,50626],{"class":51291},[102,76600,51298],{"class":112},[5116,76602,76603],{},"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":23,"searchDepth":24,"depth":24,"links":76605},[76606,76616,76628,76645,76652,76660],{"id":53351,"depth":24,"text":53352,"children":76607},[76608,76609,76610,76611,76612,76613,76614,76615],{"id":53355,"depth":1168,"text":53356},{"id":53388,"depth":1168,"text":53389},{"id":53427,"depth":1168,"text":53428},{"id":53585,"depth":1168,"text":53586},{"id":53633,"depth":1168,"text":53634},{"id":53770,"depth":1168,"text":53771},{"id":54092,"depth":1168,"text":54093},{"id":57080,"depth":1168,"text":57081},{"id":57108,"depth":24,"text":57109,"children":76617},[76618,76619,76620,76621,76622,76623,76624,76625,76626,76627],{"id":57112,"depth":1168,"text":57113},{"id":57135,"depth":1168,"text":57136},{"id":58050,"depth":1168,"text":58051},{"id":58740,"depth":1168,"text":58741},{"id":59022,"depth":1168,"text":59023},{"id":63183,"depth":1168,"text":63184},{"id":63353,"depth":1168,"text":63354},{"id":63481,"depth":1168,"text":63482},{"id":63506,"depth":1168,"text":63507},{"id":64895,"depth":1168,"text":64896},{"id":66048,"depth":24,"text":66049,"children":76629},[76630,76631,76632,76633,76634,76635,76636,76637,76638,76639,76640,76641,76642,76643,76644],{"id":66052,"depth":1168,"text":66053},{"id":66706,"depth":1168,"text":66707},{"id":68401,"depth":1168,"text":68402},{"id":68442,"depth":1168,"text":68443},{"id":68484,"depth":1168,"text":68485},{"id":68498,"depth":1168,"text":68499},{"id":68547,"depth":1168,"text":68548},{"id":68559,"depth":1168,"text":68560},{"id":68574,"depth":1168,"text":68575},{"id":68610,"depth":1168,"text":68611},{"id":68691,"depth":1168,"text":68692},{"id":68819,"depth":1168,"text":68820},{"id":68831,"depth":1168,"text":68832},{"id":68850,"depth":1168,"text":68851},{"id":70961,"depth":1168,"text":70962},{"id":70980,"depth":24,"text":70981,"children":76646},[76647,76648,76649,76650,76651],{"id":71001,"depth":1168,"text":71002},{"id":71021,"depth":1168,"text":71022},{"id":71070,"depth":1168,"text":71071},{"id":71195,"depth":1168,"text":71196},{"id":71376,"depth":1168,"text":71377},{"id":71394,"depth":24,"text":71395,"children":76653},[76654,76655,76656,76657,76658,76659],{"id":71409,"depth":1168,"text":71410},{"id":71468,"depth":1168,"text":71469},{"id":71492,"depth":1168,"text":71493},{"id":71812,"depth":1168,"text":71813},{"id":71844,"depth":1168,"text":71845},{"id":71867,"depth":1168,"text":71868},{"id":74935,"depth":24,"text":74936,"children":76661},[76662,76663],{"id":74969,"depth":1168,"text":74970},{"id":75008,"depth":1168,"text":75009},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53323,"description":27},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76670,"title":76671,"body":76672,"description":27,"extension":28,"meta":92809,"navigation":30,"path":92810,"seo":92811,"stem":92812,"__hash__":92813},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76673,"toc":92745},[76674,76677,76680,76684,76688,76693,76698,76709,76713,76718,76721,76725,76728,76733,76737,76741,76744,76749,76752,76756,76759,76767,76770,76774,76779,76784,76787,76791,76796,76801,76804,76808,76813,76816,76821,76824,76829,76832,76837,76842,76845,76848,76852,76857,76862,76865,76869,76873,76876,76879,76882,76886,76890,76895,76900,76903,76907,76912,76917,76920,76923,76926,76929,76932,76935,76938,76941,76944,76949,76953,76958,76963,76966,76969,76972,76975,76978,76981,76984,76987,76991,76995,76998,77001,77004,77009,77011,77014,77017,77020,77023,77026,77029,77032,77035,77038,77041,77044,77047,77050,77055,77060,77065,77068,77072,77075,77080,77084,77086,77097,77102,77203,77206,77209,77212,77215,77218,77221,77224,77227,77229,77232,77235,77238,77241,77244,77246,77249,77252,77255,77258,77261,77264,77266,77269,77271,77273,77276,77280,77284,77287,77290,77293,77296,77299,77302,77305,77308,77311,77316,77436,77439,77442,77447,77450,77453,77456,77459,77464,77467,77470,77473,77476,77481,77484,77584,77649,77723,77727,77730,77733,77737,77740,77754,77783,77786,77789,77792,77795,77798,77801,77804,77806,77809,77812,77815,77818,77822,77827,77831,77836,77911,77914,78097,78100,78103,78106,78109,78112,78114,78117,78120,78123,78126,78129,78132,78134,78138,78141,78146,78149,78152,78155,78158,78160,78165,78168,78171,78174,78177,78179,78184,78187,78190,78192,78194,78197,78201,78204,78207,78212,78215,78218,78221,78271,78276,78280,78285,78288,78357,78360,78369,78373,78378,78381,78384,78392,78395,78412,80214,80218,80222,80227,80230,80234,80240,80246,80398,80403,80408,80411,80414,80417,80420,80423,80426,80429,80432,80435,80438,80441,80444,80449,80453,80456,80467,80471,80476,80479,80482,80485,80488,80491,80493,80496,80499,80502,80505,80507,80524,80527,80531,80534,80539,80544,80547,80550,80554,80557,80560,80569,80572,80576,80579,80584,80589,80656,80660,80663,80666,80671,80676,80762,80767,80771,80774,80777,80792,80795,80800,80804,80809,80918,80921,80932,81082,81086,81091,81200,81204,81209,81214,81219,81222,81229,81249,81285,81449,81454,81457,81462,81469,81472,81475,81478,81537,81593,81649,81653,81658,81973,81976,81980,81983,81988,82097,82102,82106,82111,82115,82186,82190,82192,82195,82198,82236,82512,82516,82533,82599,82633,82637,82640,82645,82674,82681,82690,82695,82710,82715,82724,82727,82864,82868,82930,82934,82939,83184,83188,83193,83196,83199,83202,83205,83209,83214,84795,84799,84803,84809,84812,84817,84821,84824,84829,84832,84843,84847,84852,84856,84861,84866,84869,84874,84878,84882,84885,84890,84895,84898,84901,84904,85026,85031,85133,85136,85139,85143,85148,85320,85325,85329,85332,85337,85403,85408,85411,85542,85545,85550,85553,85556,85647,85652,85655,85658,85661,85664,85669,85674,85677,85682,85687,85692,85696,85699,85702,85707,85712,85717,85722,85776,85779,85782,85787,85790,85793,85798,85803,85808,85812,85817,85831,85836,85839,85844,85848,85853,85858,85863,85868,85873,85878,85883,85888,85891,85895,85900,85903,85906,85909,85914,85919,85922,85925,85929,85932,85935,85940,85945,85950,85955,85958,85963,85968,86029,86034,86037,86042,87283,87288,87292,87296,87301,87304,87309,87314,87317,87322,87324,87329,87333,87336,87339,87350,87354,87359,87364,87419,87424,87429,87434,87645,87650,87654,87659,87662,87664,87667,87670,88117,88122,88129,88135,88138,88141,88405,88410,88414,88679,88684,88688,88693,88698,88703,88708,89039,89042,89047,89052,89055,89059,89063,89068,89073,89078,89083,89088,89093,89097,89100,89105,89110,89113,89187,89192,89197,89202,89204,89207,89577,89582,89587,89592,89595,89598,89700,89705,89710,89813,89817,89822,89826,89830,89835,89840,89843,89848,89851,89854,90247,90252,90255,90258,90261,90264,90784,90788,90793,90798,90803,90806,90811,90814,90817,91199,91204,91206,91208,91211,91214,91726,91730,91791,91794,91797,91800,91804,91807,91812,91817,92742],[10,76675,76671],{"id":76676},"_4js进阶",[19,76678,76679],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76681,76683],{"id":76682},"_41-作用域","4.1 作用域",[73,76685,76687],{"id":76686},"_411-局部作用域","4.1.1 局部作用域",[19,76689,76690],{},[1451,76691],{"alt":23,"src":76692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76694,76695],{},[1451,76696],{"alt":23,"src":76697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1120,76699,76700,76703,76706],{},[59,76701,76702],{},"函数作用域在函数内部",[59,76704,76705],{},"块级作用域在{}",[59,76707,76708],{},"对象的那个{}不是作用域，不是块作用域",[73,76710,76712],{"id":76711},"_412-全局作用域","4.1.2 全局作用域",[19,76714,76715],{},[1451,76716],{"alt":23,"src":76717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,76719,76720],{},"window.a=10不要这样写",[73,76722,76724],{"id":76723},"_413-作用域链","4.1.3 作用域链",[19,76726,76727],{},"变量查找机制",[19,76729,76730],{},[1451,76731],{"alt":23,"src":76732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76734,76736],{"id":76735},"_42-垃圾回收机制","4.2 垃圾回收机制",[73,76738,76740],{"id":76739},"_421-大体介绍","4.2.1 大体介绍",[19,76742,76743],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,76745,76746],{},[1451,76747],{"alt":23,"src":76748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,76750,76751],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[73,76753,76755],{"id":76754},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,76757,76758],{},"堆栈空间分配区别：",[56,76760,76761,76764],{},[59,76762,76763],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[59,76765,76766],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,76768,76769],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21988,76771,76773],{"id":76772},"_4221-引用计数","4.2.2.1 引用计数",[19,76775,76776],{},[1451,76777],{"alt":23,"src":76778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,76780,76781],{},[1451,76782],{"alt":23,"src":76783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,76785,76786],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21988,76788,76790],{"id":76789},"_4222-标记清除法","4.2.2.2 标记清除法",[19,76792,76793],{},[1451,76794],{"alt":23,"src":76795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,76797,76798],{},[1451,76799],{"alt":23,"src":76800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,76802,76803],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,76805,76807],{"id":76806},"_43-闭包","4.3 闭包",[19,76809,76810],{},[1451,76811],{"alt":23,"src":76812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,76814,76815],{},"闭包：内层函数+外层函数的变量",[19,76817,76818],{},[1451,76819],{"alt":23,"src":76820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,76822,76823],{},"closure就是闭包",[19,76825,76826],{},[1451,76827],{"alt":23,"src":76828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,76830,76831],{},"内层函数必须包含外层函数的变量才是闭包",[19,76833,76834],{},[1451,76835],{"alt":23,"src":76836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,76838,76839],{},[1451,76840],{"alt":23,"src":76841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,76843,76844],{},"闭包可能会引起内存泄漏",[19,76846,76847],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,76849,76851],{"id":76850},"_44-变量提升","4.4 变量提升",[19,76853,76854],{},[1451,76855],{"alt":23,"src":76856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,76858,76859],{},[1451,76860],{"alt":23,"src":76861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,76863,76864],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,76866,76868],{"id":76867},"_45-函数进阶","4.5 函数进阶",[73,76870,76872],{"id":76871},"_451-函数提升","4.5.1 函数提升",[19,76874,76875],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,76877,76878],{},"只提升函数声明，不提升函数调用",[51804,76880,76881],{},"\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",[73,76883,76885],{"id":76884},"_452-函数参数","4.5.2 函数参数",[21988,76887,76889],{"id":76888},"_4521-动态参数","4.5.2.1 动态参数",[19,76891,76892],{},[1451,76893],{"alt":23,"src":76894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,76896,76897],{},[1451,76898],{"alt":23,"src":76899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,76901,76902],{},"箭头函数里边没有arguments",[21988,76904,76906],{"id":76905},"_4522-剩余参数","4.5.2.2 剩余参数",[19,76908,76909],{},[1451,76910],{"alt":23,"src":76911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,76913,76914],{},[1451,76915],{"alt":23,"src":76916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,76918,76919],{},"剩余参数使用的时候不需要写...",[19,76921,76922],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,76924,76925],{},"  function getSum(a,b,...arr) {",[19,76927,76928],{},"  console.log(11)",[19,76930,76931],{},"  }",[19,76933,76934],{},"  getSum(1,2,3,4)",[19,76936,76937],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,76939,76940],{},"  getSum(1,2)",[19,76942,76943],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,76945,76946],{},[1451,76947],{"alt":23,"src":76948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21988,76950,76952],{"id":76951},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,76954,76955],{},[1451,76956],{"alt":23,"src":76957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,76959,76960],{},[1451,76961],{"alt":23,"src":76962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,76964,76965],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,76967,76968],{},"展开运算符可以用于数组之间的合并：",[19,76970,76971],{},"const arr1 = [1, 2, 3]",[19,76973,76974],{},"const arr2 = [3, 4, 5]",[19,76976,76977],{},"const arr = [...arr1, ...arr2]",[19,76979,76980],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,76982,76983],{},"剩余参数：函数参数使用，得到真数组",[19,76985,76986],{},"展开运算符：数组中使用，数组展开",[73,76988,76990],{"id":76989},"_453-箭头函数","4.5.3 箭头函数",[21988,76992,76994],{"id":76993},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,76996,76997],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,76999,77000],{},"它不是万能的！！！",[19,77002,77003],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77005,77006],{},[1451,77007],{"alt":23,"src":77008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77010,142],{},[19,77012,77013],{},"① 只有一个形参的时候，可以省略小括号：",[19,77015,77016],{},"const fn=x=>{console.log(x)}",[19,77018,77019],{},"② 只有一行代码时可以省略大括号：",[19,77021,77022],{},"const fn=x=>console.log(11)",[19,77024,77025],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77027,77028],{},"const fn=x=>x+x",[19,77030,77031],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77033,77034],{},"⑤ 阻止表单默认提交：",[19,77036,77037],{},"const form = document.querySelector('form')",[19,77039,77040],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77042,77043],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77045,77046],{},"const fn=uname=>({uname:uname})",[19,77048,77049],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77051,77052],{},[1451,77053],{"alt":23,"src":77054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77056,77057],{},[1451,77058],{"alt":23,"src":77059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77061,77062],{},[1451,77063],{"alt":23,"src":77064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77066,77067],{},"一定不要忘记用()，有()就理解为自带return",[21988,77069,77071],{"id":77070},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77073,77074],{},"箭头函数是没有动态参数的arguments",[19,77076,77077],{},[1451,77078],{"alt":23,"src":77079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21988,77081,77083],{"id":77082},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77085,11322],{},[56,77087,77088,77091,77094],{},[59,77089,77090],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[59,77092,77093],{},"事件回调函数使用箭头函数时，this 为全局的 window",[59,77095,77096],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77098,77099],{},[1451,77100],{"alt":23,"src":77101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[93,77103,77105],{"className":53058,"code":77104,"language":53060,"meta":23,"style":23},"  \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",[99,77106,77107,77115,77120,77125,77130,77135,77140,77144,77149,77153,77157,77162,77167,77172,77176,77180,77185,77190,77195],{"__ignoreMap":23},[102,77108,77109,77111,77113],{"class":104,"line":105},[102,77110,52135],{"class":112},[102,77112,51804],{"class":51291},[102,77114,51298],{"class":112},[102,77116,77117],{"class":104,"line":24},[102,77118,77119],{"class":112},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[102,77121,77122],{"class":104,"line":1168},[102,77123,77124],{"class":112},"    console.log(this) \u002F\u002F指向window\n",[102,77126,77127],{"class":104,"line":1183},[102,77128,77129],{"class":112},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[102,77131,77132],{"class":104,"line":1189},[102,77133,77134],{"class":112},"    function fn() {\n",[102,77136,77137],{"class":104,"line":1203},[102,77138,77139],{"class":112},"      console.log(this)  \u002F\u002F指向window\n",[102,77141,77142],{"class":104,"line":1209},[102,77143,2176],{"class":112},[102,77145,77146],{"class":104,"line":1300},[102,77147,77148],{"class":112},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[102,77150,77151],{"class":104,"line":1306},[102,77152,2389],{"emptyLinePlaceholder":30},[102,77154,77155],{"class":104,"line":1318},[102,77156,71514],{"class":112},[102,77158,77159],{"class":104,"line":1601},[102,77160,77161],{"class":112},"      name: 'andy',\n",[102,77163,77164],{"class":104,"line":1606},[102,77165,77166],{"class":112},"      sayHai: function () {\n",[102,77168,77169],{"class":104,"line":1612},[102,77170,77171],{"class":112},"        console.log(this)\n",[102,77173,77174],{"class":104,"line":1617},[102,77175,52389],{"class":112},[102,77177,77178],{"class":104,"line":1631},[102,77179,2176],{"class":112},[102,77181,77182],{"class":104,"line":1636},[102,77183,77184],{"class":112},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[102,77186,77187],{"class":104,"line":1642},[102,77188,77189],{"class":112},"    \u002F\u002F 2.箭头函数的this\n",[102,77191,77192],{"class":104,"line":1663},[102,77193,77194],{"class":112},"    const fn = () => console.log(this)\n",[102,77196,77197,77199,77201],{"class":104,"line":1668},[102,77198,52408],{"class":112},[102,77200,51804],{"class":51291},[102,77202,51298],{"class":112},[19,77204,77205],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77207,77208],{},"const fn = () => console.log(this)",[19,77210,77211],{},"fn() \u002F\u002F指向window",[19,77213,77214],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77216,77217],{},"①",[19,77219,77220],{},"const obj = {",[19,77222,77223],{},"uname: 'pink老师',",[19,77225,77226],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77228,1059],{},[19,77230,77231],{},"调用对象里边的函数",[19,77233,77234],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77236,77237],{},"obj.sayHai()",[19,77239,77240],{},"②",[19,77242,77243],{},"const obj1 = {",[19,77245,77223],{},[19,77247,77248],{},"sayHai: function () {",[19,77250,77251],{},"let i = 10",[19,77253,77254],{},"const count = () => {",[19,77256,77257],{},"console.log(this)",[19,77259,77260],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77262,77263],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77265,1059],{},[19,77267,77268],{},"count()",[19,77270,1059],{},[19,77272,1059],{},[19,77274,77275],{},"obj1.sayHai()",[14,77277,77279],{"id":77278},"_46-解构赋值","4.6 解构赋值",[73,77281,77283],{"id":77282},"_461-数组解构","4.6.1 数组解构",[19,77285,77286],{},"以前要是使用数组中的值的话：",[19,77288,77289],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77291,77292],{},"const arr=[100,60,80]",[19,77294,77295],{},"const max=arr[0]",[19,77297,77298],{},"const min=arr[1]",[19,77300,77301],{},"const avg=arr[2]",[19,77303,77304],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77306,77307],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77309,77310],{},"这个写法就类似于上边的那种用很多const的方法",[19,77312,77313],{},[1451,77314],{"alt":23,"src":77315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[93,77317,77319],{"className":50624,"code":77318,"language":50626,"meta":23,"style":23},"①变量之间交换值:\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",[99,77320,77321,77326,77331,77336,77341,77346,77350,77354,77359,77363,77368,77373,77377,77382,77387,77398,77408,77413,77418,77423,77427,77431],{"__ignoreMap":23},[102,77322,77323],{"class":104,"line":105},[102,77324,77325],{"class":112},"①变量之间交换值:\n",[102,77327,77328],{"class":104,"line":24},[102,77329,77330],{"class":112},"let a=1\n",[102,77332,77333],{"class":104,"line":1168},[102,77334,77335],{"class":112},"let b=2;\n",[102,77337,77338],{"class":104,"line":1183},[102,77339,77340],{"class":112},"必须加这行代码，不然就会报错\n",[102,77342,77343],{"class":104,"line":1189},[102,77344,77345],{"class":112},"[b,a]=[a,b]\n",[102,77347,77348],{"class":104,"line":1203},[102,77349,2389],{"emptyLinePlaceholder":30},[102,77351,77352],{"class":104,"line":1209},[102,77353,2389],{"emptyLinePlaceholder":30},[102,77355,77356],{"class":104,"line":1300},[102,77357,77358],{"class":112},"可以写成下面的方式：\n",[102,77360,77361],{"class":104,"line":1306},[102,77362,77330],{"class":112},[102,77364,77365],{"class":104,"line":1318},[102,77366,77367],{"class":112},"let b=2\n",[102,77369,77370],{"class":104,"line":1601},[102,77371,77372],{"class":112},";[b,a]=[a,b]\n",[102,77374,77375],{"class":104,"line":1606},[102,77376,2389],{"emptyLinePlaceholder":30},[102,77378,77379],{"class":104,"line":1612},[102,77380,77381],{"class":112},"②排序\n",[102,77383,77384],{"class":104,"line":1617},[102,77385,77386],{"class":112},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[102,77388,77389,77392,77395],{"class":104,"line":1631},[102,77390,77391],{"class":112},"for (let i = 0; i ",[102,77393,1023],{"class":77394},"s7hpK",[102,77396,77397],{"class":112}," arr1.length; i++) {\n",[102,77399,77400,77403,77405],{"class":104,"line":1636},[102,77401,77402],{"class":112},"   for (let j = 0; j ",[102,77404,1023],{"class":77394},[102,77406,77407],{"class":112}," arr1.length - 1; j++) {\n",[102,77409,77410],{"class":104,"line":1642},[102,77411,77412],{"class":112},"      if (arr1[j] > arr1[j + 1]) {\n",[102,77414,77415],{"class":104,"line":1663},[102,77416,77417],{"class":112},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[102,77419,77420],{"class":104,"line":1668},[102,77421,77422],{"class":112},"       }\n",[102,77424,77425],{"class":104,"line":1682},[102,77426,4298],{"class":112},[102,77428,77429],{"class":104,"line":1687},[102,77430,1554],{"class":112},[102,77432,77433],{"class":104,"line":1716},[102,77434,77435],{"class":112},"console.log(arr1)\n",[19,77437,77438],{},"数组解构的细节：",[19,77440,77441],{},"①变量多，单元值少",[19,77443,77444],{},[1451,77445],{"alt":23,"src":77446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77448,77449],{},"防止出现undefined的方法：",[19,77451,77452],{},"const [a=0,b=0] =[1]",[19,77454,77455],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77457,77458],{},"②变量少，单元值多",[19,77460,77461],{},[1451,77462],{"alt":23,"src":77463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77465,77466],{},"此时可以使用剩余参数来接收多余的值",[19,77468,77469],{},"const [a,b,...c]=[1,2,3,4]",[19,77471,77472],{},"console.log(c) 输出[3,4]",[19,77474,77475],{},"③可以按需导入，忽略某些返回值",[19,77477,77478],{},[1451,77479],{"alt":23,"src":77480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77482,77483],{},"④支持多维数组的结构",[93,77485,77489],{"className":77486,"code":77487,"language":77488,"meta":23,"style":23},"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",[99,77490,77491,77519,77535,77550,77565],{"__ignoreMap":23},[102,77492,77493,77495,77497,77499,77501,77503,77505,77507,77510,77512,77514,77516],{"class":104,"line":105},[102,77494,6782],{"class":108},[102,77496,51824],{"class":112},[102,77498,158],{"class":108},[102,77500,52217],{"class":112},[102,77502,330],{"class":161},[102,77504,12425],{"class":112},[102,77506,190],{"class":161},[102,77508,77509],{"class":112},", [",[102,77511,184],{"class":161},[102,77513,12425],{"class":112},[102,77515,406],{"class":161},[102,77517,77518],{"class":112},"]]\n",[102,77520,77521,77524,77526,77528,77530,77532],{"class":104,"line":24},[102,77522,77523],{"class":112},"console.",[102,77525,58238],{"class":1952},[102,77527,3840],{"class":112},[102,77529,304],{"class":161},[102,77531,4205],{"class":112},[102,77533,77534],{"class":171},"  \u002F\u002F1\n",[102,77536,77537,77539,77541,77543,77545,77547],{"class":104,"line":1168},[102,77538,77523],{"class":112},[102,77540,58238],{"class":1952},[102,77542,3840],{"class":112},[102,77544,330],{"class":161},[102,77546,4205],{"class":112},[102,77548,77549],{"class":171},"  \u002F\u002F2\n",[102,77551,77552,77554,77556,77558,77560,77562],{"class":104,"line":1183},[102,77553,77523],{"class":112},[102,77555,58238],{"class":1952},[102,77557,3840],{"class":112},[102,77559,190],{"class":161},[102,77561,4205],{"class":112},[102,77563,77564],{"class":171},"  \u002F\u002F[3,4]\n",[102,77566,77567,77569,77571,77573,77575,77577,77579,77581],{"class":104,"line":1189},[102,77568,77523],{"class":112},[102,77570,58238],{"class":1952},[102,77572,3840],{"class":112},[102,77574,190],{"class":161},[102,77576,4890],{"class":112},[102,77578,304],{"class":161},[102,77580,4205],{"class":112},[102,77582,77583],{"class":171},"  \u002F\u002F3\n",[93,77585,77587],{"className":77486,"code":77586,"language":77488,"meta":23,"style":23},"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",[99,77588,77589,77616,77627,77638],{"__ignoreMap":23},[102,77590,77591,77593,77596,77598,77600,77602,77604,77606,77608,77610,77612,77614],{"class":104,"line":105},[102,77592,6782],{"class":108},[102,77594,77595],{"class":112}," [a, b, c] ",[102,77597,158],{"class":108},[102,77599,52217],{"class":112},[102,77601,330],{"class":161},[102,77603,12425],{"class":112},[102,77605,190],{"class":161},[102,77607,77509],{"class":112},[102,77609,184],{"class":161},[102,77611,12425],{"class":112},[102,77613,406],{"class":161},[102,77615,77518],{"class":112},[102,77617,77618,77620,77622,77625],{"class":104,"line":24},[102,77619,77523],{"class":112},[102,77621,58238],{"class":1952},[102,77623,77624],{"class":112},"(a)",[102,77626,77534],{"class":171},[102,77628,77629,77631,77633,77636],{"class":104,"line":1168},[102,77630,77523],{"class":112},[102,77632,58238],{"class":1952},[102,77634,77635],{"class":112},"(b)",[102,77637,77549],{"class":171},[102,77639,77640,77642,77644,77647],{"class":104,"line":1183},[102,77641,77523],{"class":112},[102,77643,58238],{"class":1952},[102,77645,77646],{"class":112},"(c)",[102,77648,77564],{"class":171},[93,77650,77652],{"className":77486,"code":77651,"language":77488,"meta":23,"style":23},"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",[99,77653,77654,77681,77691,77701,77711],{"__ignoreMap":23},[102,77655,77656,77658,77661,77663,77665,77667,77669,77671,77673,77675,77677,77679],{"class":104,"line":105},[102,77657,6782],{"class":108},[102,77659,77660],{"class":112}," [a, b, [c, d]] ",[102,77662,158],{"class":108},[102,77664,52217],{"class":112},[102,77666,330],{"class":161},[102,77668,12425],{"class":112},[102,77670,190],{"class":161},[102,77672,77509],{"class":112},[102,77674,184],{"class":161},[102,77676,12425],{"class":112},[102,77678,406],{"class":161},[102,77680,77518],{"class":112},[102,77682,77683,77685,77687,77689],{"class":104,"line":24},[102,77684,77523],{"class":112},[102,77686,58238],{"class":1952},[102,77688,77624],{"class":112},[102,77690,77534],{"class":171},[102,77692,77693,77695,77697,77699],{"class":104,"line":1168},[102,77694,77523],{"class":112},[102,77696,58238],{"class":1952},[102,77698,77635],{"class":112},[102,77700,77549],{"class":171},[102,77702,77703,77705,77707,77709],{"class":104,"line":1183},[102,77704,77523],{"class":112},[102,77706,58238],{"class":1952},[102,77708,77646],{"class":112},[102,77710,77583],{"class":171},[102,77712,77713,77715,77717,77720],{"class":104,"line":1189},[102,77714,77523],{"class":112},[102,77716,58238],{"class":1952},[102,77718,77719],{"class":112},"(d)",[102,77721,77722],{"class":171},"  \u002F\u002F4\n",[73,77724,77726],{"id":77725},"_462-对象解构","4.6.2 对象解构",[19,77728,77729],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,77731,77732],{},"用的非常非常多！！！！！！",[21988,77734,77736],{"id":77735},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,77738,77739],{},"基本语法：",[56,77741,77742,77745,77748,77751],{},[59,77743,77744],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[59,77746,77747],{},"对象属性的值将被赋值给与属性名相同的变量",[59,77749,77750],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[59,77752,77753],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[93,77755,77757],{"className":50624,"code":77756,"language":50626,"meta":23,"style":23},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[99,77758,77759,77764,77769,77774,77778],{"__ignoreMap":23},[102,77760,77761],{"class":104,"line":105},[102,77762,77763],{"class":112},"const obj = {\n",[102,77765,77766],{"class":104,"line":24},[102,77767,77768],{"class":112},"   uname: 'pink老师',\n",[102,77770,77771],{"class":104,"line":1168},[102,77772,77773],{"class":112},"   age: 18,\n",[102,77775,77776],{"class":104,"line":1183},[102,77777,1554],{"class":112},[102,77779,77780],{"class":104,"line":1189},[102,77781,77782],{"class":112},"const { uname, age } = obj\n",[19,77784,77785],{},"上方代码这样写等价于：",[19,77787,77788],{},"const uname等价于obj.uname",[19,77790,77791],{},"变量名可以重新改名：",[19,77793,77794],{},"const uname='red老师'",[19,77796,77797],{},"const user={",[19,77799,77800],{},"  uname:'pink老师',",[19,77802,77803],{},"  age:18",[19,77805,1059],{},[19,77807,77808],{},"const {uname,age}=user",[19,77810,77811],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,77813,77814],{},"const {旧变量名：新变量名}=对象",[19,77816,77817],{},"const {uname:username,age}=user",[21988,77819,77821],{"id":77820},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,77823,77824],{},[1451,77825],{"alt":23,"src":77826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21988,77828,77830],{"id":77829},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,77832,77833],{},[1451,77834],{"alt":23,"src":77835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[93,77837,77839],{"className":53058,"code":77838,"language":53060,"meta":23,"style":23},"  \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",[99,77840,77841,77849,77854,77859,77864,77869,77874,77879,77884,77889,77893,77898,77903],{"__ignoreMap":23},[102,77842,77843,77845,77847],{"class":104,"line":105},[102,77844,52135],{"class":112},[102,77846,51804],{"class":51291},[102,77848,51298],{"class":112},[102,77850,77851],{"class":104,"line":24},[102,77852,77853],{"class":112},"    const pig = {\n",[102,77855,77856],{"class":104,"line":1168},[102,77857,77858],{"class":112},"      name: '佩奇',\n",[102,77860,77861],{"class":104,"line":1183},[102,77862,77863],{"class":112},"      family: {\n",[102,77865,77866],{"class":104,"line":1189},[102,77867,77868],{"class":112},"        mother: '猪妈妈',\n",[102,77870,77871],{"class":104,"line":1203},[102,77872,77873],{"class":112},"        father: '猪爸爸',\n",[102,77875,77876],{"class":104,"line":1209},[102,77877,77878],{"class":112},"        sister: '乔治'\n",[102,77880,77881],{"class":104,"line":1300},[102,77882,77883],{"class":112},"      },\n",[102,77885,77886],{"class":104,"line":1306},[102,77887,77888],{"class":112},"      age: 6\n",[102,77890,77891],{"class":104,"line":1318},[102,77892,2176],{"class":112},[102,77894,77895],{"class":104,"line":1601},[102,77896,77897],{"class":112},"    \u002F\u002F 多级对象解构\n",[102,77899,77900],{"class":104,"line":1606},[102,77901,77902],{"class":112},"    const { name, family: { mother, father, sister }, age } = pig\n",[102,77904,77905,77907,77909],{"class":104,"line":1612},[102,77906,52408],{"class":112},[102,77908,51804],{"class":51291},[102,77910,51298],{"class":112},[19,77912,77913],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[93,77915,77918],{"className":77916,"code":77917,"language":76438,"meta":23,"style":23},"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",[99,77919,77920,77925,77936,77948,77960,77969,77973,77984,77996,78006,78011,78015,78025,78036,78045,78049,78053,78064,78075,78084,78088,78093],{"__ignoreMap":23},[102,77921,77922],{"class":104,"line":105},[102,77923,77924],{"class":171},"    \u002F\u002F 这是后台传递过来的数据\n",[102,77926,77927,77929,77932,77934],{"class":104,"line":24},[102,77928,11211],{"class":108},[102,77930,77931],{"class":112}," msg ",[102,77933,158],{"class":108},[102,77935,15562],{"class":112},[102,77937,77938,77941,77943,77946],{"class":104,"line":1168},[102,77939,77940],{"class":217},"      \"code\"",[102,77942,972],{"class":108},[102,77944,77945],{"class":161}," 200",[102,77947,31457],{"class":112},[102,77949,77950,77953,77955,77958],{"class":104,"line":1183},[102,77951,77952],{"class":217},"      \"msg\"",[102,77954,972],{"class":108},[102,77956,77957],{"class":217}," \"获取新闻列表成功\"",[102,77959,31457],{"class":112},[102,77961,77962,77965,77967],{"class":104,"line":1189},[102,77963,77964],{"class":217},"      \"data\"",[102,77966,972],{"class":108},[102,77968,55438],{"class":112},[102,77970,77971],{"class":104,"line":1203},[102,77972,2499],{"class":112},[102,77974,77975,77978,77980,77982],{"class":104,"line":1209},[102,77976,77977],{"class":217},"          \"id\"",[102,77979,972],{"class":108},[102,77981,25109],{"class":161},[102,77983,31457],{"class":112},[102,77985,77986,77989,77991,77994],{"class":104,"line":1300},[102,77987,77988],{"class":217},"          \"title\"",[102,77990,972],{"class":108},[102,77992,77993],{"class":217}," \"5G商用自己，三大运用商收入下降\"",[102,77995,31457],{"class":112},[102,77997,77998,78001,78003],{"class":104,"line":1306},[102,77999,78000],{"class":217},"          \"count\"",[102,78002,972],{"class":108},[102,78004,78005],{"class":161}," 58\n",[102,78007,78008],{"class":104,"line":1318},[102,78009,78010],{"class":112},"        },\n",[102,78012,78013],{"class":104,"line":1601},[102,78014,2499],{"class":112},[102,78016,78017,78019,78021,78023],{"class":104,"line":1606},[102,78018,77977],{"class":217},[102,78020,972],{"class":108},[102,78022,14745],{"class":161},[102,78024,31457],{"class":112},[102,78026,78027,78029,78031,78034],{"class":104,"line":1612},[102,78028,77988],{"class":217},[102,78030,972],{"class":108},[102,78032,78033],{"class":217}," \"国际媒体头条速览\"",[102,78035,31457],{"class":112},[102,78037,78038,78040,78042],{"class":104,"line":1617},[102,78039,78000],{"class":217},[102,78041,972],{"class":108},[102,78043,78044],{"class":161}," 56\n",[102,78046,78047],{"class":104,"line":1631},[102,78048,78010],{"class":112},[102,78050,78051],{"class":104,"line":1636},[102,78052,2499],{"class":112},[102,78054,78055,78057,78059,78062],{"class":104,"line":1642},[102,78056,77977],{"class":217},[102,78058,972],{"class":108},[102,78060,78061],{"class":161}," 3",[102,78063,31457],{"class":112},[102,78065,78066,78068,78070,78073],{"class":104,"line":1663},[102,78067,77988],{"class":217},[102,78069,972],{"class":108},[102,78071,78072],{"class":217}," \"乌克兰和俄罗斯持续冲突\"",[102,78074,31457],{"class":112},[102,78076,78077,78079,78081],{"class":104,"line":1668},[102,78078,78000],{"class":217},[102,78080,972],{"class":108},[102,78082,78083],{"class":161}," 1669\n",[102,78085,78086],{"class":104,"line":1682},[102,78087,78010],{"class":112},[102,78089,78090],{"class":104,"line":1687},[102,78091,78092],{"class":112},"      ]\n",[102,78094,78095],{"class":104,"line":1716},[102,78096,2176],{"class":112},[19,78098,78099],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78101,78102],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78104,78105],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78107,78108],{},"function({data}) {",[19,78110,78111],{},"console.log(data)",[19,78113,1059],{},[19,78115,78116],{},"render(msg)",[19,78118,78119],{},"实参传递给形参的时候解构了",[19,78121,78122],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78124,78125],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78127,78128],{},"function render({data:mydata}) {",[19,78130,78131],{},"  console.log(data)",[19,78133,1059],{},[73,78135,78137],{"id":78136},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78139,78140],{},"有两种情况：一个是数组结构，一个是立即执行函数",[56,78142,78143],{},[59,78144,78145],{},"如果对一个数组进行遍历，有两种方式：",[19,78147,78148],{},"①法1",[19,78150,78151],{},"const arr=[1,2,3]",[19,78153,78154],{},"arr.map(function(item,index) {",[19,78156,78157],{},"  console.log(item)",[19,78159,52455],{},[19,78161,78162],{},[1451,78163],{"alt":23,"src":78164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78166,78167],{},"②法2",[19,78169,78170],{},"const str='pink'",[19,78172,78173],{},"[1,2,3].map(function(item,index) {",[19,78175,78176],{},"console.log(item)",[19,78178,52455],{},[19,78180,78181],{},[1451,78182],{"alt":23,"src":78183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78185,78186],{},"此时会报错",[19,78188,78189],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78191,78176],{},[19,78193,52455],{},[19,78195,78196],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78198,78200],{"id":78199},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78202,78203],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78205,78206],{},"可以理解为加强版的for循环",[19,78208,78209],{},[1451,78210],{"alt":23,"src":78211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78213,78214],{},"里边不写return，不返回数组，只遍历不返回",[19,78216,78217],{},"map是返回数组",[19,78219,78220],{},"forEach主要用于遍历数组对象",[93,78222,78224],{"className":53058,"code":78223,"language":53060,"meta":23,"style":23},"  \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",[99,78225,78226,78234,78239,78244,78249,78254,78258,78263],{"__ignoreMap":23},[102,78227,78228,78230,78232],{"class":104,"line":105},[102,78229,52135],{"class":112},[102,78231,51804],{"class":51291},[102,78233,51298],{"class":112},[102,78235,78236],{"class":104,"line":24},[102,78237,78238],{"class":112},"    const arr = ['red', 'green', 'pink']\n",[102,78240,78241],{"class":104,"line":1168},[102,78242,78243],{"class":112},"    const result = arr.forEach(function (item, index) {\n",[102,78245,78246],{"class":104,"line":1183},[102,78247,78248],{"class":112},"      console.log(item)\n",[102,78250,78251],{"class":104,"line":1189},[102,78252,78253],{"class":112},"      console.log(index)\n",[102,78255,78256],{"class":104,"line":1203},[102,78257,33452],{"class":112},[102,78259,78260],{"class":104,"line":1209},[102,78261,78262],{"class":112},"    console.log(result)\n",[102,78264,78265,78267,78269],{"class":104,"line":1300},[102,78266,52408],{"class":112},[102,78268,51804],{"class":51291},[102,78270,51298],{"class":112},[19,78272,78273],{},[1451,78274],{"alt":23,"src":78275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78277,78279],{"id":78278},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78281,78282],{},[1451,78283],{"alt":23,"src":78284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78286,78287],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[93,78289,78291],{"className":53058,"code":78290,"language":53060,"meta":23,"style":23},"\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",[99,78292,78293,78301,78309,78314,78319,78323,78327,78332,78336,78341,78349],{"__ignoreMap":23},[102,78294,78295,78297,78299],{"class":104,"line":105},[102,78296,1023],{"class":112},[102,78298,51791],{"class":51291},[102,78300,51298],{"class":112},[102,78302,78303,78305,78307],{"class":104,"line":24},[102,78304,52135],{"class":112},[102,78306,51804],{"class":51291},[102,78308,51298],{"class":112},[102,78310,78311],{"class":104,"line":1168},[102,78312,78313],{"class":112},"    const arr = [10, 20, 30]\n",[102,78315,78316],{"class":104,"line":1183},[102,78317,78318],{"class":112},"    const newArr = arr.filter(function (item, index) {\n",[102,78320,78321],{"class":104,"line":1189},[102,78322,78248],{"class":112},[102,78324,78325],{"class":104,"line":1203},[102,78326,78253],{"class":112},[102,78328,78329],{"class":104,"line":1209},[102,78330,78331],{"class":112},"      return item >= 20\n",[102,78333,78334],{"class":104,"line":1300},[102,78335,33452],{"class":112},[102,78337,78338],{"class":104,"line":1306},[102,78339,78340],{"class":112},"    console.log(newArr)\n",[102,78342,78343,78345,78347],{"class":104,"line":1318},[102,78344,52408],{"class":112},[102,78346,51804],{"class":51291},[102,78348,51298],{"class":112},[102,78350,78351,78353,78355],{"class":104,"line":1601},[102,78352,51776],{"class":112},[102,78354,51791],{"class":51291},[102,78356,51298],{"class":112},[19,78358,78359],{},"这个也可以写成箭头函数：",[93,78361,78363],{"className":50624,"code":78362,"language":50626,"meta":23,"style":23},"const newArr = arr.filter(item => item >= 20)\n",[99,78364,78365],{"__ignoreMap":23},[102,78366,78367],{"class":104,"line":105},[102,78368,78362],{"class":112},[14,78370,78372],{"id":78371},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78374,78375],{},[1451,78376],{"alt":23,"src":78377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78379,78380],{},"步骤：",[19,78382,78383],{},"①：渲染页面模块",[1120,78385,78386,78389],{},[59,78387,78388],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[59,78390,78391],{},"用forEach+字符串的形式",[19,78393,78394],{},"②：点击不同需求，显示不同页面内容",[1120,78396,78397,78400,78403,78406,78409],{},[59,78398,78399],{},"点击采取事件委托方式 .filter",[59,78401,78402],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[59,78404,78405],{},"筛选条件是根据点击的 data-index 来判断",[59,78407,78408],{},"可以使用对象解构，把事件对象解构",[59,78410,78411],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[93,78413,78415],{"className":50624,"code":78414,"language":50626,"meta":23,"style":23},"\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",[99,78416,78417,78427,78441,78445,78453,78467,78487,78499,78507,78513,78523,78533,78543,78547,78551,78557,78570,78582,78592,78604,78608,78612,78619,78632,78644,78661,78679,78692,78696,78700,78712,78722,78726,78730,78737,78778,78805,78815,78819,78823,78831,78843,78847,78851,78859,78871,78883,78894,78898,78902,78911,78923,78934,78938,78942,78951,78963,78975,78979,78983,78990,79000,79012,79024,79039,79043,79047,79055,79071,79081,79091,79101,79113,79117,79121,79131,79142,79152,79156,79164,79172,79176,79184,79199,79225,79250,79275,79294,79302,79316,79321,79326,79331,79336,79341,79349,79357,79362,79373,79378,79388,79398,79408,79418,79422,79426,79435,79444,79453,79462,79466,79470,79479,79488,79497,79506,79510,79514,79523,79532,79541,79550,79554,79558,79567,79576,79585,79594,79598,79602,79611,79620,79629,79638,79642,79646,79655,79664,79673,79682,79686,79690,79699,79708,79716,79725,79729,79733,79737,79742,79754,79759,79771,79775,79792,79820,79829,79834,79844,79854,79863,79868,79873,79877,79882,79899,79903,79908,79916,79921,79948,79953,79973,79978,79990,79995,80000,80005,80016,80030,80067,80085,80118,80135,80159,80163,80168,80174,80178,80182,80186,80194,80202,80206],{"__ignoreMap":23},[102,78418,78419,78421,78423,78425],{"class":104,"line":105},[102,78420,51288],{"class":112},[102,78422,51292],{"class":51291},[102,78424,51295],{"class":1952},[102,78426,51298],{"class":112},[102,78428,78429,78431,78433,78435,78437,78439],{"class":104,"line":24},[102,78430,1023],{"class":112},[102,78432,50626],{"class":51291},[102,78434,51307],{"class":1952},[102,78436,158],{"class":112},[102,78438,51312],{"class":217},[102,78440,51298],{"class":112},[102,78442,78443],{"class":104,"line":1168},[102,78444,2389],{"emptyLinePlaceholder":30},[102,78446,78447,78449,78451],{"class":104,"line":1183},[102,78448,1023],{"class":112},[102,78450,51325],{"class":51291},[102,78452,51298],{"class":112},[102,78454,78455,78457,78459,78461,78463,78465],{"class":104,"line":1189},[102,78456,52135],{"class":112},[102,78458,51335],{"class":51291},[102,78460,51338],{"class":1952},[102,78462,158],{"class":112},[102,78464,51343],{"class":217},[102,78466,51298],{"class":112},[102,78468,78469,78471,78473,78475,78477,78479,78481,78483,78485],{"class":104,"line":1203},[102,78470,52135],{"class":112},[102,78472,51335],{"class":51291},[102,78474,14910],{"class":1952},[102,78476,158],{"class":112},[102,78478,51382],{"class":217},[102,78480,51362],{"class":1952},[102,78482,158],{"class":112},[102,78484,51389],{"class":217},[102,78486,51298],{"class":112},[102,78488,78489,78491,78493,78495,78497],{"class":104,"line":1209},[102,78490,52135],{"class":112},[102,78492,51398],{"class":51291},[102,78494,51401],{"class":112},[102,78496,51398],{"class":51291},[102,78498,51298],{"class":112},[102,78500,78501,78503,78505],{"class":104,"line":1300},[102,78502,52135],{"class":112},[102,78504,5116],{"class":51291},[102,78506,51298],{"class":112},[102,78508,78509,78511],{"class":104,"line":1306},[102,78510,6393],{"class":51291},[102,78512,15562],{"class":112},[102,78514,78515,78517,78519,78521],{"class":104,"line":1318},[102,78516,54686],{"class":161},[102,78518,51428],{"class":112},[102,78520,304],{"class":161},[102,78522,1279],{"class":112},[102,78524,78525,78527,78529,78531],{"class":104,"line":1601},[102,78526,54697],{"class":161},[102,78528,51428],{"class":112},[102,78530,304],{"class":161},[102,78532,1279],{"class":112},[102,78534,78535,78537,78539,78541],{"class":104,"line":1606},[102,78536,72587],{"class":161},[102,78538,51428],{"class":112},[102,78540,60496],{"class":161},[102,78542,1279],{"class":112},[102,78544,78545],{"class":104,"line":1612},[102,78546,2176],{"class":112},[102,78548,78549],{"class":104,"line":1617},[102,78550,2389],{"emptyLinePlaceholder":30},[102,78552,78553,78555],{"class":104,"line":1631},[102,78554,62114],{"class":1952},[102,78556,15562],{"class":112},[102,78558,78559,78561,78563,78566,78568],{"class":104,"line":1636},[102,78560,54762],{"class":161},[102,78562,51428],{"class":112},[102,78564,78565],{"class":161},"990",[102,78567,51483],{"class":108},[102,78569,1279],{"class":112},[102,78571,78572,78574,78576,78578,78580],{"class":104,"line":1642},[102,78573,54697],{"class":161},[102,78575,51428],{"class":112},[102,78577,304],{"class":161},[102,78579,51547],{"class":161},[102,78581,1279],{"class":112},[102,78583,78584,78586,78588,78590],{"class":104,"line":1663},[102,78585,55000],{"class":161},[102,78587,51428],{"class":112},[102,78589,51468],{"class":161},[102,78591,1279],{"class":112},[102,78593,78594,78597,78599,78602],{"class":104,"line":1668},[102,78595,78596],{"class":161},"      flex-wrap",[102,78598,51428],{"class":112},[102,78600,78601],{"class":161},"wrap",[102,78603,1279],{"class":112},[102,78605,78606],{"class":104,"line":1682},[102,78607,2176],{"class":112},[102,78609,78610],{"class":104,"line":1687},[102,78611,2389],{"emptyLinePlaceholder":30},[102,78613,78614,78617],{"class":104,"line":1716},[102,78615,78616],{"class":1952},"    .item",[102,78618,15562],{"class":112},[102,78620,78621,78623,78625,78628,78630],{"class":104,"line":1721},[102,78622,54762],{"class":161},[102,78624,51428],{"class":112},[102,78626,78627],{"class":161},"240",[102,78629,51483],{"class":108},[102,78631,1279],{"class":112},[102,78633,78634,78636,78638,78640,78642],{"class":104,"line":1738},[102,78635,61991],{"class":161},[102,78637,51428],{"class":112},[102,78639,559],{"class":161},[102,78641,51483],{"class":108},[102,78643,1279],{"class":112},[102,78645,78646,78648,78650,78652,78654,78657,78659],{"class":104,"line":1743},[102,78647,54686],{"class":161},[102,78649,51428],{"class":112},[102,78651,813],{"class":161},[102,78653,51483],{"class":108},[102,78655,78656],{"class":161}," 30",[102,78658,51483],{"class":108},[102,78660,1279],{"class":112},[102,78662,78663,78665,78667,78669,78672,78675,78677],{"class":104,"line":1748},[102,78664,61851],{"class":161},[102,78666,51428],{"class":112},[102,78668,28112],{"class":161},[102,78670,78671],{"class":161}," ease",[102,78673,78674],{"class":161}," .5",[102,78676,808],{"class":108},[102,78678,1279],{"class":112},[102,78680,78681,78684,78686,78688,78690],{"class":104,"line":1753},[102,78682,78683],{"class":161},"      margin-bottom",[102,78685,51428],{"class":112},[102,78687,813],{"class":161},[102,78689,51483],{"class":108},[102,78691,1279],{"class":112},[102,78693,78694],{"class":104,"line":1767},[102,78695,2176],{"class":112},[102,78697,78698],{"class":104,"line":1772},[102,78699,2389],{"emptyLinePlaceholder":30},[102,78701,78702,78705,78707,78710],{"class":104,"line":2566},[102,78703,78704],{"class":1952},"    .item:nth-child",[102,78706,113],{"class":112},[102,78708,78709],{"class":161},"4n",[102,78711,12432],{"class":112},[102,78713,78714,78716,78718,78720],{"class":104,"line":2580},[102,78715,61991],{"class":161},[102,78717,51428],{"class":112},[102,78719,304],{"class":161},[102,78721,1279],{"class":112},[102,78723,78724],{"class":104,"line":2588},[102,78725,2176],{"class":112},[102,78727,78728],{"class":104,"line":2593},[102,78729,2389],{"emptyLinePlaceholder":30},[102,78731,78732,78735],{"class":104,"line":2599},[102,78733,78734],{"class":1952},"    .item:hover",[102,78736,15562],{"class":112},[102,78738,78739,78742,78744,78746,78748,78750,78752,78754,78756,78759,78761,78763,78765,78767,78769,78771,78773,78776],{"class":104,"line":2605},[102,78740,78741],{"class":161},"      box-shadow",[102,78743,51428],{"class":112},[102,78745,304],{"class":161},[102,78747,51483],{"class":108},[102,78749,4082],{"class":161},[102,78751,51483],{"class":108},[102,78753,2137],{"class":161},[102,78755,51483],{"class":108},[102,78757,78758],{"class":161}," rgba",[102,78760,113],{"class":112},[102,78762,304],{"class":161},[102,78764,12425],{"class":112},[102,78766,304],{"class":161},[102,78768,12425],{"class":112},[102,78770,304],{"class":161},[102,78772,12425],{"class":112},[102,78774,78775],{"class":161},".2",[102,78777,2708],{"class":112},[102,78779,78780,78783,78785,78788,78790,78792,78794,78797,78799,78801,78803],{"class":104,"line":2610},[102,78781,78782],{"class":161},"      transform",[102,78784,51428],{"class":112},[102,78786,78787],{"class":161},"translate3d",[102,78789,113],{"class":112},[102,78791,304],{"class":161},[102,78793,12425],{"class":112},[102,78795,78796],{"class":161},"-4",[102,78798,51483],{"class":108},[102,78800,12425],{"class":112},[102,78802,304],{"class":161},[102,78804,2708],{"class":112},[102,78806,78807,78809,78811,78813],{"class":104,"line":7938},[102,78808,62016],{"class":161},[102,78810,51428],{"class":112},[102,78812,62021],{"class":161},[102,78814,1279],{"class":112},[102,78816,78817],{"class":104,"line":7962},[102,78818,2176],{"class":112},[102,78820,78821],{"class":104,"line":7967},[102,78822,2389],{"emptyLinePlaceholder":30},[102,78824,78825,78827,78829],{"class":104,"line":7973},[102,78826,78616],{"class":1952},[102,78828,55606],{"class":51291},[102,78830,15562],{"class":112},[102,78832,78833,78835,78837,78839,78841],{"class":104,"line":8000},[102,78834,54762],{"class":161},[102,78836,51428],{"class":112},[102,78838,424],{"class":161},[102,78840,441],{"class":108},[102,78842,1279],{"class":112},[102,78844,78845],{"class":104,"line":8005},[102,78846,2176],{"class":112},[102,78848,78849],{"class":104,"line":8011},[102,78850,2389],{"emptyLinePlaceholder":30},[102,78852,78853,78855,78857],{"class":104,"line":8023},[102,78854,78616],{"class":1952},[102,78856,62295],{"class":1952},[102,78858,15562],{"class":112},[102,78860,78861,78863,78865,78867,78869],{"class":104,"line":8035},[102,78862,54913],{"class":161},[102,78864,51428],{"class":112},[102,78866,763],{"class":161},[102,78868,51483],{"class":108},[102,78870,1279],{"class":112},[102,78872,78873,78875,78877,78879,78881],{"class":104,"line":8047},[102,78874,78683],{"class":161},[102,78876,51428],{"class":112},[102,78878,559],{"class":161},[102,78880,51483],{"class":108},[102,78882,1279],{"class":112},[102,78884,78885,78887,78889,78892],{"class":104,"line":9706},[102,78886,57407],{"class":161},[102,78888,51428],{"class":112},[102,78890,78891],{"class":161},"#666",[102,78893,1279],{"class":112},[102,78895,78896],{"class":104,"line":9731},[102,78897,2176],{"class":112},[102,78899,78900],{"class":104,"line":9754},[102,78901,2389],{"emptyLinePlaceholder":30},[102,78903,78904,78906,78909],{"class":104,"line":9778},[102,78905,78616],{"class":1952},[102,78907,78908],{"class":1952}," .price",[102,78910,15562],{"class":112},[102,78912,78913,78915,78917,78919,78921],{"class":104,"line":9783},[102,78914,54913],{"class":161},[102,78916,51428],{"class":112},[102,78918,863],{"class":161},[102,78920,51483],{"class":108},[102,78922,1279],{"class":112},[102,78924,78925,78927,78929,78932],{"class":104,"line":9788},[102,78926,57407],{"class":161},[102,78928,51428],{"class":112},[102,78930,78931],{"class":161},"firebrick",[102,78933,1279],{"class":112},[102,78935,78936],{"class":104,"line":9793},[102,78937,2176],{"class":112},[102,78939,78940],{"class":104,"line":9802},[102,78941,2389],{"emptyLinePlaceholder":30},[102,78943,78944,78946,78949],{"class":104,"line":9807},[102,78945,78616],{"class":1952},[102,78947,78948],{"class":1952}," .price::before",[102,78950,15562],{"class":112},[102,78952,78953,78956,78958,78961],{"class":104,"line":9813},[102,78954,78955],{"class":161},"      content",[102,78957,51428],{"class":112},[102,78959,78960],{"class":217},"'￥'",[102,78962,1279],{"class":112},[102,78964,78965,78967,78969,78971,78973],{"class":104,"line":9834},[102,78966,54913],{"class":161},[102,78968,51428],{"class":112},[102,78970,662],{"class":161},[102,78972,51483],{"class":108},[102,78974,1279],{"class":112},[102,78976,78977],{"class":104,"line":9840},[102,78978,2176],{"class":112},[102,78980,78981],{"class":104,"line":9854},[102,78982,2389],{"emptyLinePlaceholder":30},[102,78984,78985,78988],{"class":104,"line":9860},[102,78986,78987],{"class":1952},"    .filter",[102,78989,15562],{"class":112},[102,78991,78992,78994,78996,78998],{"class":104,"line":9887},[102,78993,55000],{"class":161},[102,78995,51428],{"class":112},[102,78997,51468],{"class":161},[102,78999,1279],{"class":112},[102,79001,79002,79004,79006,79008,79010],{"class":104,"line":9896},[102,79003,54762],{"class":161},[102,79005,51428],{"class":112},[102,79007,78565],{"class":161},[102,79009,51483],{"class":108},[102,79011,1279],{"class":112},[102,79013,79014,79016,79018,79020,79022],{"class":104,"line":9902},[102,79015,54697],{"class":161},[102,79017,51428],{"class":112},[102,79019,304],{"class":161},[102,79021,51547],{"class":161},[102,79023,1279],{"class":112},[102,79025,79026,79028,79030,79032,79034,79036],{"class":104,"line":9910},[102,79027,54686],{"class":161},[102,79029,51428],{"class":112},[102,79031,769],{"class":161},[102,79033,51483],{"class":108},[102,79035,78656],{"class":161},[102,79037,79038],{"class":108},"px\n",[102,79040,79041],{"class":104,"line":9915},[102,79042,2176],{"class":112},[102,79044,79045],{"class":104,"line":16594},[102,79046,2389],{"emptyLinePlaceholder":30},[102,79048,79049,79051,79053],{"class":104,"line":16600},[102,79050,78987],{"class":1952},[102,79052,1387],{"class":51291},[102,79054,15562],{"class":112},[102,79056,79057,79059,79061,79063,79065,79067,79069],{"class":104,"line":16623},[102,79058,54686],{"class":161},[102,79060,51428],{"class":112},[102,79062,559],{"class":161},[102,79064,51483],{"class":108},[102,79066,8940],{"class":161},[102,79068,51483],{"class":108},[102,79070,1279],{"class":112},[102,79072,79073,79075,79077,79079],{"class":104,"line":16629},[102,79074,61712],{"class":161},[102,79076,51428],{"class":112},[102,79078,61809],{"class":161},[102,79080,1279],{"class":112},[102,79082,79083,79085,79087,79089],{"class":104,"line":16652},[102,79084,57407],{"class":161},[102,79086,51428],{"class":112},[102,79088,78891],{"class":161},[102,79090,1279],{"class":112},[102,79092,79093,79095,79097,79099],{"class":104,"line":16666},[102,79094,63961],{"class":161},[102,79096,51428],{"class":112},[102,79098,54728],{"class":161},[102,79100,1279],{"class":112},[102,79102,79103,79105,79107,79109,79111],{"class":104,"line":16686},[102,79104,61741],{"class":161},[102,79106,51428],{"class":112},[102,79108,813],{"class":161},[102,79110,51483],{"class":108},[102,79112,1279],{"class":112},[102,79114,79115],{"class":104,"line":16692},[102,79116,2176],{"class":112},[102,79118,79119],{"class":104,"line":16703},[102,79120,2389],{"emptyLinePlaceholder":30},[102,79122,79123,79125,79127,79129],{"class":104,"line":16726},[102,79124,78987],{"class":1952},[102,79126,1387],{"class":51291},[102,79128,61891],{"class":1952},[102,79130,15562],{"class":112},[102,79132,79133,79135,79137,79140],{"class":104,"line":16748},[102,79134,54875],{"class":161},[102,79136,51428],{"class":112},[102,79138,79139],{"class":161},"#05943c",[102,79141,1279],{"class":112},[102,79143,79144,79146,79148,79150],{"class":104,"line":16753},[102,79145,57407],{"class":161},[102,79147,51428],{"class":112},[102,79149,60833],{"class":161},[102,79151,1279],{"class":112},[102,79153,79154],{"class":104,"line":16759},[102,79155,2176],{"class":112},[102,79157,79158,79160,79162],{"class":104,"line":16773},[102,79159,52408],{"class":112},[102,79161,5116],{"class":51291},[102,79163,51298],{"class":112},[102,79165,79166,79168,79170],{"class":104,"line":16786},[102,79167,51776],{"class":112},[102,79169,51325],{"class":51291},[102,79171,51298],{"class":112},[102,79173,79174],{"class":104,"line":16791},[102,79175,2389],{"emptyLinePlaceholder":30},[102,79177,79178,79180,79182],{"class":104,"line":16805},[102,79179,1023],{"class":112},[102,79181,51791],{"class":51291},[102,79183,51298],{"class":112},[102,79185,79186,79188,79190,79192,79194,79197],{"class":104,"line":16810},[102,79187,52135],{"class":112},[102,79189,51602],{"class":51291},[102,79191,53477],{"class":1952},[102,79193,158],{"class":112},[102,79195,79196],{"class":217},"\"filter\"",[102,79198,51298],{"class":112},[102,79200,79201,79203,79205,79207,79209,79211,79214,79216,79218,79221,79223],{"class":104,"line":16816},[102,79202,51332],{"class":112},[102,79204,351],{"class":51291},[102,79206,61048],{"class":1952},[102,79208,158],{"class":112},[102,79210,61053],{"class":217},[102,79212,79213],{"class":1952}," data-index",[102,79215,158],{"class":112},[102,79217,3667],{"class":217},[102,79219,79220],{"class":112},">0-100元\u003C\u002F",[102,79222,351],{"class":51291},[102,79224,51298],{"class":112},[102,79226,79227,79229,79231,79233,79235,79237,79239,79241,79243,79246,79248],{"class":104,"line":16821},[102,79228,51332],{"class":112},[102,79230,351],{"class":51291},[102,79232,61048],{"class":1952},[102,79234,158],{"class":112},[102,79236,61053],{"class":217},[102,79238,79213],{"class":1952},[102,79240,158],{"class":112},[102,79242,3690],{"class":217},[102,79244,79245],{"class":112},">100-300元\u003C\u002F",[102,79247,351],{"class":51291},[102,79249,51298],{"class":112},[102,79251,79252,79254,79256,79258,79260,79262,79264,79266,79268,79271,79273],{"class":104,"line":16835},[102,79253,51332],{"class":112},[102,79255,351],{"class":51291},[102,79257,61048],{"class":1952},[102,79259,158],{"class":112},[102,79261,61053],{"class":217},[102,79263,79213],{"class":1952},[102,79265,158],{"class":112},[102,79267,3703],{"class":217},[102,79269,79270],{"class":112},">300元以上\u003C\u002F",[102,79272,351],{"class":51291},[102,79274,51298],{"class":112},[102,79276,79277,79279,79281,79283,79285,79287,79290,79292],{"class":104,"line":16840},[102,79278,51332],{"class":112},[102,79280,351],{"class":51291},[102,79282,61048],{"class":1952},[102,79284,158],{"class":112},[102,79286,61053],{"class":217},[102,79288,79289],{"class":112},">全部区间\u003C\u002F",[102,79291,351],{"class":51291},[102,79293,51298],{"class":112},[102,79295,79296,79298,79300],{"class":104,"line":16845},[102,79297,52408],{"class":112},[102,79299,51602],{"class":51291},[102,79301,51298],{"class":112},[102,79303,79304,79306,79308,79310,79312,79314],{"class":104,"line":16859},[102,79305,52135],{"class":112},[102,79307,51602],{"class":51291},[102,79309,53477],{"class":1952},[102,79311,158],{"class":112},[102,79313,62599],{"class":217},[102,79315,51298],{"class":112},[102,79317,79318],{"class":104,"line":16871},[102,79319,79320],{"class":171},"    \u003C!-- \u003Cdiv class=\"item\">\n",[102,79322,79323],{"class":104,"line":16876},[102,79324,79325],{"class":171},"      \u003Cimg src=\"\" alt=\"\">\n",[102,79327,79328],{"class":104,"line":16889},[102,79329,79330],{"class":171},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[102,79332,79333],{"class":104,"line":16894},[102,79334,79335],{"class":171},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[102,79337,79338],{"class":104,"line":16899},[102,79339,79340],{"class":171},"    \u003C\u002Fdiv> -->\n",[102,79342,79343,79345,79347],{"class":104,"line":16904},[102,79344,52408],{"class":112},[102,79346,51602],{"class":51291},[102,79348,51298],{"class":112},[102,79350,79351,79353,79355],{"class":104,"line":16917},[102,79352,52135],{"class":112},[102,79354,51804],{"class":51291},[102,79356,51298],{"class":112},[102,79358,79359],{"class":104,"line":16922},[102,79360,79361],{"class":171},"    \u002F\u002F 2. 初始化数据\n",[102,79363,79364,79366,79369,79371],{"class":104,"line":32624},[102,79365,11211],{"class":108},[102,79367,79368],{"class":161}," goodsList",[102,79370,13554],{"class":108},[102,79372,55438],{"class":112},[102,79374,79375],{"class":104,"line":32630},[102,79376,79377],{"class":112},"      {\n",[102,79379,79380,79383,79386],{"class":104,"line":32636},[102,79381,79382],{"class":112},"        id: ",[102,79384,79385],{"class":217},"'4001172'",[102,79387,31457],{"class":112},[102,79389,79390,79393,79396],{"class":104,"line":32642},[102,79391,79392],{"class":112},"        name: ",[102,79394,79395],{"class":217},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[102,79397,31457],{"class":112},[102,79399,79400,79403,79406],{"class":104,"line":32648},[102,79401,79402],{"class":112},"        price: ",[102,79404,79405],{"class":217},"'289.00'",[102,79407,31457],{"class":112},[102,79409,79410,79413,79416],{"class":104,"line":32659},[102,79411,79412],{"class":112},"        picture: ",[102,79414,79415],{"class":217},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[102,79417,31457],{"class":112},[102,79419,79420],{"class":104,"line":32665},[102,79421,77883],{"class":112},[102,79423,79424],{"class":104,"line":32685},[102,79425,79377],{"class":112},[102,79427,79428,79430,79433],{"class":104,"line":32691},[102,79429,79382],{"class":112},[102,79431,79432],{"class":217},"'4001594'",[102,79434,31457],{"class":112},[102,79436,79437,79439,79442],{"class":104,"line":32702},[102,79438,79392],{"class":112},[102,79440,79441],{"class":217},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[102,79443,31457],{"class":112},[102,79445,79446,79448,79451],{"class":104,"line":32708},[102,79447,79402],{"class":112},[102,79449,79450],{"class":217},"'288.00'",[102,79452,31457],{"class":112},[102,79454,79455,79457,79460],{"class":104,"line":32714},[102,79456,79412],{"class":112},[102,79458,79459],{"class":217},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[102,79461,31457],{"class":112},[102,79463,79464],{"class":104,"line":32720},[102,79465,77883],{"class":112},[102,79467,79468],{"class":104,"line":32726},[102,79469,79377],{"class":112},[102,79471,79472,79474,79477],{"class":104,"line":32732},[102,79473,79382],{"class":112},[102,79475,79476],{"class":217},"'4001009'",[102,79478,31457],{"class":112},[102,79480,79481,79483,79486],{"class":104,"line":32738},[102,79482,79392],{"class":112},[102,79484,79485],{"class":217},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[102,79487,31457],{"class":112},[102,79489,79490,79492,79495],{"class":104,"line":32744},[102,79491,79402],{"class":112},[102,79493,79494],{"class":217},"'109.00'",[102,79496,31457],{"class":112},[102,79498,79499,79501,79504],{"class":104,"line":32764},[102,79500,79412],{"class":112},[102,79502,79503],{"class":217},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[102,79505,31457],{"class":112},[102,79507,79508],{"class":104,"line":32770},[102,79509,77883],{"class":112},[102,79511,79512],{"class":104,"line":32786},[102,79513,79377],{"class":112},[102,79515,79516,79518,79521],{"class":104,"line":32792},[102,79517,79382],{"class":112},[102,79519,79520],{"class":217},"'4001874'",[102,79522,31457],{"class":112},[102,79524,79525,79527,79530],{"class":104,"line":32806},[102,79526,79392],{"class":112},[102,79528,79529],{"class":217},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[102,79531,31457],{"class":112},[102,79533,79534,79536,79539],{"class":104,"line":32812},[102,79535,79402],{"class":112},[102,79537,79538],{"class":217},"'488.00'",[102,79540,31457],{"class":112},[102,79542,79543,79545,79548],{"class":104,"line":32827},[102,79544,79412],{"class":112},[102,79546,79547],{"class":217},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[102,79549,31457],{"class":112},[102,79551,79552],{"class":104,"line":32833},[102,79553,77883],{"class":112},[102,79555,79556],{"class":104,"line":32842},[102,79557,79377],{"class":112},[102,79559,79560,79562,79565],{"class":104,"line":32848},[102,79561,79382],{"class":112},[102,79563,79564],{"class":217},"'4001649'",[102,79566,31457],{"class":112},[102,79568,79569,79571,79574],{"class":104,"line":32857},[102,79570,79392],{"class":112},[102,79572,79573],{"class":217},"'大师监制龙泉青瓷茶叶罐'",[102,79575,31457],{"class":112},[102,79577,79578,79580,79583],{"class":104,"line":32863},[102,79579,79402],{"class":112},[102,79581,79582],{"class":217},"'139.00'",[102,79584,31457],{"class":112},[102,79586,79587,79589,79592],{"class":104,"line":32869},[102,79588,79412],{"class":112},[102,79590,79591],{"class":217},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[102,79593,31457],{"class":112},[102,79595,79596],{"class":104,"line":32878},[102,79597,77883],{"class":112},[102,79599,79600],{"class":104,"line":32884},[102,79601,79377],{"class":112},[102,79603,79604,79606,79609],{"class":104,"line":32895},[102,79605,79382],{"class":112},[102,79607,79608],{"class":217},"'3997185'",[102,79610,31457],{"class":112},[102,79612,79613,79615,79618],{"class":104,"line":32901},[102,79614,79392],{"class":112},[102,79616,79617],{"class":217},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[102,79619,31457],{"class":112},[102,79621,79622,79624,79627],{"class":104,"line":32920},[102,79623,79402],{"class":112},[102,79625,79626],{"class":217},"'108.00'",[102,79628,31457],{"class":112},[102,79630,79631,79633,79636],{"class":104,"line":32926},[102,79632,79412],{"class":112},[102,79634,79635],{"class":217},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[102,79637,31457],{"class":112},[102,79639,79640],{"class":104,"line":32937},[102,79641,77883],{"class":112},[102,79643,79644],{"class":104,"line":32943},[102,79645,79377],{"class":112},[102,79647,79648,79650,79653],{"class":104,"line":32963},[102,79649,79382],{"class":112},[102,79651,79652],{"class":217},"'3997403'",[102,79654,31457],{"class":112},[102,79656,79657,79659,79662],{"class":104,"line":32979},[102,79658,79392],{"class":112},[102,79660,79661],{"class":217},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[102,79663,31457],{"class":112},[102,79665,79666,79668,79671],{"class":104,"line":32985},[102,79667,79402],{"class":112},[102,79669,79670],{"class":217},"'100.00'",[102,79672,31457],{"class":112},[102,79674,79675,79677,79680],{"class":104,"line":32999},[102,79676,79412],{"class":112},[102,79678,79679],{"class":217},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[102,79681,31457],{"class":112},[102,79683,79684],{"class":104,"line":33005},[102,79685,77883],{"class":112},[102,79687,79688],{"class":104,"line":33011},[102,79689,79377],{"class":112},[102,79691,79692,79694,79697],{"class":104,"line":33022},[102,79693,79382],{"class":112},[102,79695,79696],{"class":217},"'3998274'",[102,79698,31457],{"class":112},[102,79700,79701,79703,79706],{"class":104,"line":33028},[102,79702,79392],{"class":112},[102,79704,79705],{"class":217},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[102,79707,31457],{"class":112},[102,79709,79710,79712,79714],{"class":104,"line":33034},[102,79711,79402],{"class":112},[102,79713,79582],{"class":217},[102,79715,31457],{"class":112},[102,79717,79718,79720,79723],{"class":104,"line":33044},[102,79719,79412],{"class":112},[102,79721,79722],{"class":217},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[102,79724,31457],{"class":112},[102,79726,79727],{"class":104,"line":33050},[102,79728,77883],{"class":112},[102,79730,79731],{"class":104,"line":33061},[102,79732,53100],{"class":112},[102,79734,79735],{"class":104,"line":33067},[102,79736,2389],{"emptyLinePlaceholder":30},[102,79738,79739],{"class":104,"line":33077},[102,79740,79741],{"class":171},"    \u002F\u002F 1.渲染函数\n",[102,79743,79744,79746,79748,79750,79752],{"class":104,"line":33082},[102,79745,70075],{"class":108},[102,79747,70078],{"class":1952},[102,79749,113],{"class":112},[102,79751,3869],{"class":5206},[102,79753,12432],{"class":112},[102,79755,79756],{"class":104,"line":33088},[102,79757,79758],{"class":171},"      \u002F\u002F 声明空字符串\n",[102,79760,79761,79764,79767,79769],{"class":104,"line":33137},[102,79762,79763],{"class":108},"      let",[102,79765,79766],{"class":112}," str ",[102,79768,158],{"class":108},[102,79770,70095],{"class":217},[102,79772,79773],{"class":104,"line":33184},[102,79774,70100],{"class":171},[102,79776,79777,79779,79782,79784,79787,79790],{"class":104,"line":33189},[102,79778,57998],{"class":112},[102,79780,79781],{"class":1952},"forEach",[102,79783,113],{"class":112},[102,79785,79786],{"class":5206},"item",[102,79788,79789],{"class":108}," =>",[102,79791,15562],{"class":112},[102,79793,79794,79796,79799,79802,79804,79807,79809,79812,79815,79817],{"class":104,"line":33195},[102,79795,61261],{"class":108},[102,79797,79798],{"class":112}," { ",[102,79800,79801],{"class":161},"name",[102,79803,12425],{"class":112},[102,79805,79806],{"class":161},"price",[102,79808,12425],{"class":112},[102,79810,79811],{"class":161},"picture",[102,79813,79814],{"class":112}," } ",[102,79816,158],{"class":108},[102,79818,79819],{"class":112}," item\n",[102,79821,79822,79825,79827],{"class":104,"line":33214},[102,79823,79824],{"class":112},"        str ",[102,79826,9467],{"class":108},[102,79828,70159],{"class":217},[102,79830,79831],{"class":104,"line":33220},[102,79832,79833],{"class":217},"          \u003Cdiv class=\"item\">\n",[102,79835,79836,79839,79841],{"class":104,"line":33240},[102,79837,79838],{"class":217},"            \u003Cimg src=\"${",[102,79840,79811],{"class":112},[102,79842,79843],{"class":217},"}\" alt=\"\">\n",[102,79845,79846,79849,79851],{"class":104,"line":33246},[102,79847,79848],{"class":217},"            \u003Cp class=\"name\">${",[102,79850,79801],{"class":112},[102,79852,79853],{"class":217},"}\u003C\u002Fp>\n",[102,79855,79856,79859,79861],{"class":104,"line":33252},[102,79857,79858],{"class":217},"            \u003Cp class=\"price\">${",[102,79860,79806],{"class":112},[102,79862,79853],{"class":217},[102,79864,79865],{"class":104,"line":33262},[102,79866,79867],{"class":217},"          \u003C\u002Fdiv>\n",[102,79869,79870],{"class":104,"line":33267},[102,79871,79872],{"class":217},"        `\n",[102,79874,79875],{"class":104,"line":33273},[102,79876,64806],{"class":112},[102,79878,79879],{"class":104,"line":33289},[102,79880,79881],{"class":171},"      \u002F\u002F 追加给List\n",[102,79883,79884,79886,79888,79890,79893,79895,79897],{"class":104,"line":33334},[102,79885,55762],{"class":112},[102,79887,54390],{"class":1952},[102,79889,113],{"class":112},[102,79891,79892],{"class":217},"'.list'",[102,79894,74240],{"class":112},[102,79896,158],{"class":108},[102,79898,73976],{"class":112},[102,79900,79901],{"class":104,"line":33340},[102,79902,2176],{"class":112},[102,79904,79905],{"class":104,"line":33346},[102,79906,79907],{"class":171},"    \u002F\u002F 页面一打开就需要渲染\n",[102,79909,79910,79913],{"class":104,"line":33352},[102,79911,79912],{"class":1952},"    render",[102,79914,79915],{"class":112},"(goodsList)\n",[102,79917,79918],{"class":104,"line":33363},[102,79919,79920],{"class":171},"    \u002F\u002F 2.过滤筛选\n",[102,79922,79923,79925,79927,79929,79932,79934,79936,79938,79940,79942,79944,79946],{"class":104,"line":33369},[102,79924,52398],{"class":112},[102,79926,54390],{"class":1952},[102,79928,113],{"class":112},[102,79930,79931],{"class":217},"'.filter'",[102,79933,30817],{"class":112},[102,79935,57804],{"class":1952},[102,79937,113],{"class":112},[102,79939,57809],{"class":217},[102,79941,12425],{"class":112},[102,79943,187],{"class":5206},[102,79945,79789],{"class":108},[102,79947,15562],{"class":112},[102,79949,79950],{"class":104,"line":33375},[102,79951,79952],{"class":171},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[102,79954,79955,79957,79959,79962,79964,79966,79968,79970],{"class":104,"line":33381},[102,79956,58219],{"class":108},[102,79958,79798],{"class":112},[102,79960,79961],{"class":161},"tagName",[102,79963,12425],{"class":112},[102,79965,31528],{"class":161},[102,79967,79814],{"class":112},[102,79969,158],{"class":108},[102,79971,79972],{"class":112}," e.target\n",[102,79974,79975],{"class":104,"line":33399},[102,79976,79977],{"class":171},"      \u002F\u002F 判断\n",[102,79979,79980,79982,79984,79986,79988],{"class":104,"line":33413},[102,79981,54471],{"class":108},[102,79983,67025],{"class":112},[102,79985,54477],{"class":108},[102,79987,68247],{"class":217},[102,79989,12432],{"class":112},[102,79991,79992],{"class":104,"line":33422},[102,79993,79994],{"class":171},"        \u002F\u002F console.log(11)\n",[102,79996,79997],{"class":104,"line":33431},[102,79998,79999],{"class":171},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[102,80001,80002],{"class":104,"line":33440},[102,80003,80004],{"class":171},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[102,80006,80007,80009,80011,80013],{"class":104,"line":33449},[102,80008,51821],{"class":108},[102,80010,51824],{"class":112},[102,80012,158],{"class":108},[102,80014,80015],{"class":112}," goodsList\n",[102,80017,80018,80020,80023,80025,80028],{"class":104,"line":33455},[102,80019,2486],{"class":108},[102,80021,80022],{"class":112}," (dataset.index ",[102,80024,54477],{"class":108},[102,80026,80027],{"class":217}," '1'",[102,80029,12432],{"class":112},[102,80031,80032,80035,80037,80040,80043,80045,80047,80049,80052,80054,80056,80059,80061,80063,80065],{"class":104,"line":33461},[102,80033,80034],{"class":112},"          arr ",[102,80036,158],{"class":108},[102,80038,80039],{"class":112}," goodsList.",[102,80041,80042],{"class":1952},"filter",[102,80044,113],{"class":112},[102,80046,79786],{"class":5206},[102,80048,79789],{"class":108},[102,80050,80051],{"class":112}," item.price ",[102,80053,1699],{"class":108},[102,80055,4082],{"class":161},[102,80057,80058],{"class":108}," &&",[102,80060,80051],{"class":112},[102,80062,1577],{"class":108},[102,80064,5744],{"class":161},[102,80066,119],{"class":112},[102,80068,80069,80072,80074,80076,80078,80080,80083],{"class":104,"line":33469},[102,80070,80071],{"class":112},"        } ",[102,80073,1690],{"class":108},[102,80075,1693],{"class":108},[102,80077,80022],{"class":112},[102,80079,54477],{"class":108},[102,80081,80082],{"class":217}," '2'",[102,80084,12432],{"class":112},[102,80086,80087,80089,80091,80093,80095,80097,80099,80101,80103,80105,80107,80109,80111,80113,80116],{"class":104,"line":33474},[102,80088,80034],{"class":112},[102,80090,158],{"class":108},[102,80092,80039],{"class":112},[102,80094,80042],{"class":1952},[102,80096,113],{"class":112},[102,80098,79786],{"class":5206},[102,80100,79789],{"class":108},[102,80102,80051],{"class":112},[102,80104,1699],{"class":108},[102,80106,5744],{"class":161},[102,80108,80058],{"class":108},[102,80110,80051],{"class":112},[102,80112,1577],{"class":108},[102,80114,80115],{"class":161}," 300",[102,80117,119],{"class":112},[102,80119,80120,80122,80124,80126,80128,80130,80133],{"class":104,"line":33480},[102,80121,80071],{"class":112},[102,80123,1690],{"class":108},[102,80125,1693],{"class":108},[102,80127,80022],{"class":112},[102,80129,54477],{"class":108},[102,80131,80132],{"class":217}," '3'",[102,80134,12432],{"class":112},[102,80136,80137,80139,80141,80143,80145,80147,80149,80151,80153,80155,80157],{"class":104,"line":33491},[102,80138,80034],{"class":112},[102,80140,158],{"class":108},[102,80142,80039],{"class":112},[102,80144,80042],{"class":1952},[102,80146,113],{"class":112},[102,80148,79786],{"class":5206},[102,80150,79789],{"class":108},[102,80152,80051],{"class":112},[102,80154,1699],{"class":108},[102,80156,80115],{"class":161},[102,80158,119],{"class":112},[102,80160,80161],{"class":104,"line":33497},[102,80162,2518],{"class":112},[102,80164,80165],{"class":104,"line":33517},[102,80166,80167],{"class":171},"        \u002F\u002F 渲染函数\n",[102,80169,80170,80172],{"class":104,"line":33523},[102,80171,70399],{"class":1952},[102,80173,52403],{"class":112},[102,80175,80176],{"class":104,"line":33529},[102,80177,52389],{"class":112},[102,80179,80180],{"class":104,"line":33535},[102,80181,2389],{"emptyLinePlaceholder":30},[102,80183,80184],{"class":104,"line":33552},[102,80185,33452],{"class":112},[102,80187,80188,80190,80192],{"class":104,"line":33558},[102,80189,52408],{"class":112},[102,80191,51804],{"class":51291},[102,80193,51298],{"class":112},[102,80195,80196,80198,80200],{"class":104,"line":33564},[102,80197,51776],{"class":112},[102,80199,51791],{"class":51291},[102,80201,51298],{"class":112},[102,80203,80204],{"class":104,"line":33570},[102,80205,2389],{"emptyLinePlaceholder":30},[102,80207,80208,80210,80212],{"class":104,"line":33576},[102,80209,51776],{"class":112},[102,80211,50626],{"class":51291},[102,80213,51298],{"class":112},[14,80215,80217],{"id":80216},"_410-深入了解对象","4.10 深入了解对象",[73,80219,80221],{"id":80220},"_4101-创建对象","4.10.1 创建对象",[19,80223,80224],{},[1451,80225],{"alt":23,"src":80226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80228,80229],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[73,80231,80233],{"id":80232},"_4102-构造函数","4.10.2 构造函数",[19,80235,80236,80239],{},[262,80237,80238],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80241,80242,80245],{},[262,80243,80244],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[93,80247,80249],{"className":50624,"code":80248,"language":50626,"meta":23,"style":23},"\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",[99,80250,80251,80259,80264,80285,80298,80310,80322,80326,80331,80358,80363,80390],{"__ignoreMap":23},[102,80252,80253,80255,80257],{"class":104,"line":105},[102,80254,1023],{"class":112},[102,80256,51804],{"class":51291},[102,80258,51298],{"class":112},[102,80260,80261],{"class":104,"line":24},[102,80262,80263],{"class":171},"\u002F\u002F例：\n",[102,80265,80266,80268,80271,80273,80275,80277,80279,80281,80283],{"class":104,"line":1168},[102,80267,54440],{"class":108},[102,80269,80270],{"class":1952}," Pig",[102,80272,113],{"class":112},[102,80274,79801],{"class":5206},[102,80276,491],{"class":112},[102,80278,70212],{"class":5206},[102,80280,491],{"class":112},[102,80282,70229],{"class":5206},[102,80284,12432],{"class":112},[102,80286,80287,80290,80293,80295],{"class":104,"line":1183},[102,80288,80289],{"class":161},"    this",[102,80291,80292],{"class":112},".name",[102,80294,158],{"class":108},[102,80296,80297],{"class":112},"name\n",[102,80299,80300,80302,80305,80307],{"class":104,"line":1189},[102,80301,80289],{"class":161},[102,80303,80304],{"class":112},".age",[102,80306,158],{"class":108},[102,80308,80309],{"class":112},"age\n",[102,80311,80312,80314,80317,80319],{"class":104,"line":1203},[102,80313,80289],{"class":161},[102,80315,80316],{"class":112},".gender",[102,80318,158],{"class":108},[102,80320,80321],{"class":112},"gender    \n",[102,80323,80324],{"class":104,"line":1209},[102,80325,1554],{"class":112},[102,80327,80328],{"class":104,"line":1300},[102,80329,80330],{"class":171},"\u002F\u002F创建佩奇对象\n",[102,80332,80333,80335,80338,80340,80342,80344,80347,80349,80351,80353,80356],{"class":104,"line":1306},[102,80334,6782],{"class":108},[102,80336,80337],{"class":161}," Peppa",[102,80339,11707],{"class":108},[102,80341,80270],{"class":1952},[102,80343,113],{"class":112},[102,80345,80346],{"class":217},"'佩奇'",[102,80348,491],{"class":112},[102,80350,457],{"class":161},[102,80352,491],{"class":112},[102,80354,80355],{"class":217},"'女'",[102,80357,119],{"class":112},[102,80359,80360],{"class":104,"line":1318},[102,80361,80362],{"class":171},"\u002F\u002F创建乔治对象\n",[102,80364,80365,80367,80370,80372,80374,80376,80379,80381,80383,80385,80388],{"class":104,"line":1601},[102,80366,6782],{"class":108},[102,80368,80369],{"class":161}," George",[102,80371,11707],{"class":108},[102,80373,80270],{"class":1952},[102,80375,113],{"class":112},[102,80377,80378],{"class":217},"'乔治'",[102,80380,491],{"class":112},[102,80382,184],{"class":161},[102,80384,491],{"class":112},[102,80386,80387],{"class":217},"'男'",[102,80389,119],{"class":112},[102,80391,80392,80394,80396],{"class":104,"line":1606},[102,80393,51776],{"class":112},[102,80395,51804],{"class":51291},[102,80397,51298],{"class":112},[19,80399,80400],{},[1451,80401],{"alt":23,"src":80402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80404,80405],{},[1451,80406],{"alt":23,"src":80407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80409,80410],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80412,80413],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80415,80416],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80418,80419],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80421,80422],{},"这里用等号是因为：对象.属性=值",[19,80424,80425],{},"①利用对象字面量创建对象",[19,80427,80428],{},"const o={",[19,80430,80431],{},"name:'pink'",[19,80433,80434],{},"} ②利用new Object创建对象",[19,80436,80437],{},"const o=new Object({name:'pink'})",[19,80439,80440],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80442,80443],{},"构造函数创建对象的执行过程：",[19,80445,80446],{},[1451,80447],{"alt":23,"src":80448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[73,80450,80452],{"id":80451},"_4103-实例成员","4.10.3 实例成员",[19,80454,80455],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[56,80457,80458,80461,80464],{},[59,80459,80460],{},"实例对象的属性和方法即为实例成员",[59,80462,80463],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[59,80465,80466],{},"构造函数创建的实例对象彼此独立互不影响",[73,80468,80470],{"id":80469},"_4104-静态成员","4.10.4 静态成员",[19,80472,80473],{},[1451,80474],{"alt":23,"src":80475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80477,80478],{},"静态成员有Date.now() Math.PI Math.random()",[19,80480,80481],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80483,80484],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80486,80487],{},"function Pig(name) n {",[19,80489,80490],{},"this.name=name",[19,80492,1059],{},[19,80494,80495],{},"Pig.eyes=2",[19,80497,80498],{},"Pig.sayHai=function () { console.log(this) }",[19,80500,80501],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80503,80504],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80506,11322],{},[56,80508,80509,80512,80515,80518,80521],{},[59,80510,80511],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[59,80513,80514],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[59,80516,80517],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[59,80519,80520],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[59,80522,80523],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80525,80526],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[73,80528,80530],{"id":80529},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80532,80533],{},"内置构造函数包含：",[19,80535,80536],{},[1451,80537],{"alt":23,"src":80538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80540,80541],{},[1451,80542],{"alt":23,"src":80543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80545,80546],{},"这些基本数据类型，js对他们进行了包装",[51804,80548,80549],{},"\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",[21988,80551,80553],{"id":80552},"_41051-object","4.10.5.1 Object",[19,80555,80556],{},"Object 是内置的构造函数，用于创建普通对象",[19,80558,80559],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[93,80561,80563],{"className":50624,"code":80562,"language":50626,"meta":23,"style":23},"const user=new Object({name:'小明',age:15})\n",[99,80564,80565],{"__ignoreMap":23},[102,80566,80567],{"class":104,"line":105},[102,80568,80562],{"class":112},[19,80570,80571],{},"三个常用的静态方法：",[22900,80573,80575],{"id":80574},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80577,80578],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80580,80581],{},[1451,80582],{"alt":23,"src":80583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80585,80586],{},[1451,80587],{"alt":23,"src":80588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[93,80590,80592],{"className":53058,"code":80591,"language":53060,"meta":23,"style":23},"\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",[99,80593,80594,80602,80610,80615,80620,80625,80630,80635,80640,80648],{"__ignoreMap":23},[102,80595,80596,80598,80600],{"class":104,"line":105},[102,80597,1023],{"class":112},[102,80599,51791],{"class":51291},[102,80601,51298],{"class":112},[102,80603,80604,80606,80608],{"class":104,"line":24},[102,80605,52135],{"class":112},[102,80607,51804],{"class":51291},[102,80609,51298],{"class":112},[102,80611,80612],{"class":104,"line":1168},[102,80613,80614],{"class":112},"    const o = { name: 'pink', age: 6 }\n",[102,80616,80617],{"class":104,"line":1183},[102,80618,80619],{"class":112},"    \u002F\u002F 获得所有属性名\n",[102,80621,80622],{"class":104,"line":1189},[102,80623,80624],{"class":112},"    const arr = Object.keys(o)\n",[102,80626,80627],{"class":104,"line":1203},[102,80628,80629],{"class":112},"    console.log(arr)\n",[102,80631,80632],{"class":104,"line":1209},[102,80633,80634],{"class":112},"    \u002F\u002F 获得所有属性值\n",[102,80636,80637],{"class":104,"line":1300},[102,80638,80639],{"class":112},"    console.log(Object.values(o))\n",[102,80641,80642,80644,80646],{"class":104,"line":1306},[102,80643,52408],{"class":112},[102,80645,51804],{"class":51291},[102,80647,51298],{"class":112},[102,80649,80650,80652,80654],{"class":104,"line":1318},[102,80651,51776],{"class":112},[102,80653,51791],{"class":51291},[102,80655,51298],{"class":112},[22900,80657,80659],{"id":80658},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80661,80662],{},"Object.assign(oo,o)",[19,80664,80665],{},"后的东西添加给前 是追加",[19,80667,80668],{},[1451,80669],{"alt":23,"src":80670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80672,80673],{},[1451,80674],{"alt":23,"src":80675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[93,80677,80679],{"className":53058,"code":80678,"language":53060,"meta":23,"style":23},"\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",[99,80680,80681,80689,80697,80701,80705,80709,80713,80717,80721,80726,80731,80736,80741,80746,80754],{"__ignoreMap":23},[102,80682,80683,80685,80687],{"class":104,"line":105},[102,80684,1023],{"class":112},[102,80686,51791],{"class":51291},[102,80688,51298],{"class":112},[102,80690,80691,80693,80695],{"class":104,"line":24},[102,80692,52135],{"class":112},[102,80694,51804],{"class":51291},[102,80696,51298],{"class":112},[102,80698,80699],{"class":104,"line":1168},[102,80700,80614],{"class":112},[102,80702,80703],{"class":104,"line":1183},[102,80704,80619],{"class":112},[102,80706,80707],{"class":104,"line":1189},[102,80708,80624],{"class":112},[102,80710,80711],{"class":104,"line":1203},[102,80712,80629],{"class":112},[102,80714,80715],{"class":104,"line":1209},[102,80716,80634],{"class":112},[102,80718,80719],{"class":104,"line":1300},[102,80720,80639],{"class":112},[102,80722,80723],{"class":104,"line":1306},[102,80724,80725],{"class":112},"    const oo = {}\n",[102,80727,80728],{"class":104,"line":1318},[102,80729,80730],{"class":112},"    Object.assign(oo, o)\n",[102,80732,80733],{"class":104,"line":1601},[102,80734,80735],{"class":112},"    console.log(oo)\n",[102,80737,80738],{"class":104,"line":1606},[102,80739,80740],{"class":112},"    Object.assign(o, { gender: '女' })\n",[102,80742,80743],{"class":104,"line":1612},[102,80744,80745],{"class":112},"    console.log(o)\n",[102,80747,80748,80750,80752],{"class":104,"line":1617},[102,80749,52408],{"class":112},[102,80751,51804],{"class":51291},[102,80753,51298],{"class":112},[102,80755,80756,80758,80760],{"class":104,"line":1631},[102,80757,51776],{"class":112},[102,80759,51791],{"class":51291},[102,80761,51298],{"class":112},[19,80763,80764],{},[1451,80765],{"alt":23,"src":80766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21988,80768,80770],{"id":80769},"_41052-array","4.10.5.2 Array",[19,80772,80773],{},"Array 是内置的构造函数，用于创建数组",[19,80775,80776],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[93,80778,80780],{"className":50624,"code":80779,"language":50626,"meta":23,"style":23},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[99,80781,80782,80787],{"__ignoreMap":23},[102,80783,80784],{"class":104,"line":105},[102,80785,80786],{"class":112},"const arr=new Array(3,5)\n",[102,80788,80789],{"class":104,"line":24},[102,80790,80791],{"class":112},"console.log(arr)  \u002F\u002F[3,5]\n",[19,80793,80794],{},"Array的实例方法，这个方法是实例成员",[19,80796,80797],{},[1451,80798],{"alt":23,"src":80799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22900,80801,80803],{"id":80802},"_410521-reduce","4.10.5.2.1 reduce",[19,80805,80806],{},[1451,80807],{"alt":23,"src":80808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[93,80810,80812],{"className":53058,"code":80811,"language":53060,"meta":23,"style":23},"\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",[99,80813,80814,80822,80830,80835,80840,80845,80850,80854,80859,80864,80869,80873,80878,80883,80887,80892,80897,80902,80910],{"__ignoreMap":23},[102,80815,80816,80818,80820],{"class":104,"line":105},[102,80817,1023],{"class":112},[102,80819,51791],{"class":51291},[102,80821,51298],{"class":112},[102,80823,80824,80826,80828],{"class":104,"line":24},[102,80825,52135],{"class":112},[102,80827,51804],{"class":51291},[102,80829,51298],{"class":112},[102,80831,80832],{"class":104,"line":1168},[102,80833,80834],{"class":112},"    const arr = [1, 5, 8]\n",[102,80836,80837],{"class":104,"line":1183},[102,80838,80839],{"class":112},"    \u002F\u002F 1.没有初始值\n",[102,80841,80842],{"class":104,"line":1189},[102,80843,80844],{"class":112},"    const total = arr.reduce(function (prev, current) {\n",[102,80846,80847],{"class":104,"line":1203},[102,80848,80849],{"class":112},"      return prev + current\n",[102,80851,80852],{"class":104,"line":1209},[102,80853,33452],{"class":112},[102,80855,80856],{"class":104,"line":1300},[102,80857,80858],{"class":112},"    console.log(total)   \u002F\u002F14\n",[102,80860,80861],{"class":104,"line":1306},[102,80862,80863],{"class":112},"    \u002F\u002F 2.有初始值\n",[102,80865,80866],{"class":104,"line":1318},[102,80867,80868],{"class":112},"    const total1 = arr.reduce(function (prev, current) {\n",[102,80870,80871],{"class":104,"line":1601},[102,80872,80849],{"class":112},[102,80874,80875],{"class":104,"line":1606},[102,80876,80877],{"class":112},"    }, 10)\n",[102,80879,80880],{"class":104,"line":1612},[102,80881,80882],{"class":112},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[102,80884,80885],{"class":104,"line":1617},[102,80886,2389],{"emptyLinePlaceholder":30},[102,80888,80889],{"class":104,"line":1631},[102,80890,80891],{"class":112},"    \u002F\u002F 3.箭头函数写法\n",[102,80893,80894],{"class":104,"line":1636},[102,80895,80896],{"class":112},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[102,80898,80899],{"class":104,"line":1642},[102,80900,80901],{"class":112},"    console.log(total2)   \u002F\u002F24\n",[102,80903,80904,80906,80908],{"class":104,"line":1663},[102,80905,52408],{"class":112},[102,80907,51804],{"class":51291},[102,80909,51298],{"class":112},[102,80911,80912,80914,80916],{"class":104,"line":1668},[102,80913,51776],{"class":112},[102,80915,51791],{"class":51291},[102,80917,51298],{"class":112},[19,80919,80920],{},"执行过程：",[56,80922,80923,80926,80929],{},[59,80924,80925],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[59,80927,80928],{},"每一次循环，把返回值给作为下一次循环的上一次值",[59,80930,80931],{},"如果有起始值，则起始值作为上一次值",[93,80933,80935],{"className":53058,"code":80934,"language":53060,"meta":23,"style":23},"\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",[99,80936,80937,80945,80953,80957,80961,80965,80969,80973,80977,80982,80987,80992,80997,81002,81006,81010,81014,81018,81022,81026,81031,81035,81040,81044,81049,81054,81058,81062,81066,81074],{"__ignoreMap":23},[102,80938,80939,80941,80943],{"class":104,"line":105},[102,80940,1023],{"class":112},[102,80942,51791],{"class":51291},[102,80944,51298],{"class":112},[102,80946,80947,80949,80951],{"class":104,"line":24},[102,80948,52135],{"class":112},[102,80950,51804],{"class":51291},[102,80952,51298],{"class":112},[102,80954,80955],{"class":104,"line":1168},[102,80956,80834],{"class":112},[102,80958,80959],{"class":104,"line":1183},[102,80960,80839],{"class":112},[102,80962,80963],{"class":104,"line":1189},[102,80964,80844],{"class":112},[102,80966,80967],{"class":104,"line":1203},[102,80968,80849],{"class":112},[102,80970,80971],{"class":104,"line":1209},[102,80972,33452],{"class":112},[102,80974,80975],{"class":104,"line":1300},[102,80976,80858],{"class":112},[102,80978,80979],{"class":104,"line":1306},[102,80980,80981],{"class":112},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[102,80983,80984],{"class":104,"line":1318},[102,80985,80986],{"class":112},"    \u002F\u002F     1              5                    6\n",[102,80988,80989],{"class":104,"line":1601},[102,80990,80991],{"class":112},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[102,80993,80994],{"class":104,"line":1606},[102,80995,80996],{"class":112},"    \u002F\u002F     6              8                    14\n",[102,80998,80999],{"class":104,"line":1612},[102,81000,81001],{"class":112},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[102,81003,81004],{"class":104,"line":1617},[102,81005,80863],{"class":112},[102,81007,81008],{"class":104,"line":1631},[102,81009,80868],{"class":112},[102,81011,81012],{"class":104,"line":1636},[102,81013,80849],{"class":112},[102,81015,81016],{"class":104,"line":1642},[102,81017,80877],{"class":112},[102,81019,81020],{"class":104,"line":1663},[102,81021,80882],{"class":112},[102,81023,81024],{"class":104,"line":1668},[102,81025,80981],{"class":112},[102,81027,81028],{"class":104,"line":1682},[102,81029,81030],{"class":112},"    \u002F\u002F     10             1                     11\n",[102,81032,81033],{"class":104,"line":1687},[102,81034,80991],{"class":112},[102,81036,81037],{"class":104,"line":1716},[102,81038,81039],{"class":112},"    \u002F\u002F     11             5                    16\n",[102,81041,81042],{"class":104,"line":1721},[102,81043,80991],{"class":112},[102,81045,81046],{"class":104,"line":1738},[102,81047,81048],{"class":112},"    \u002F\u002F     16             8                    24\n",[102,81050,81051],{"class":104,"line":1743},[102,81052,81053],{"class":112},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[102,81055,81056],{"class":104,"line":1748},[102,81057,80891],{"class":112},[102,81059,81060],{"class":104,"line":1753},[102,81061,80896],{"class":112},[102,81063,81064],{"class":104,"line":1767},[102,81065,80901],{"class":112},[102,81067,81068,81070,81072],{"class":104,"line":1772},[102,81069,52408],{"class":112},[102,81071,51804],{"class":51291},[102,81073,51298],{"class":112},[102,81075,81076,81078,81080],{"class":104,"line":2566},[102,81077,51776],{"class":112},[102,81079,51791],{"class":51291},[102,81081,51298],{"class":112},[22900,81083,81085],{"id":81084},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81087,81088],{},[1451,81089],{"alt":23,"src":81090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[93,81092,81094],{"className":53058,"code":81093,"language":53060,"meta":23,"style":23},"\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",[99,81095,81096,81104,81112,81117,81122,81127,81132,81136,81141,81146,81151,81156,81161,81166,81170,81175,81179,81184,81192],{"__ignoreMap":23},[102,81097,81098,81100,81102],{"class":104,"line":105},[102,81099,1023],{"class":112},[102,81101,51791],{"class":51291},[102,81103,51298],{"class":112},[102,81105,81106,81108,81110],{"class":104,"line":24},[102,81107,52135],{"class":112},[102,81109,51804],{"class":51291},[102,81111,51298],{"class":112},[102,81113,81114],{"class":104,"line":1168},[102,81115,81116],{"class":112},"    const arr = [\n",[102,81118,81119],{"class":104,"line":1183},[102,81120,81121],{"class":112},"      { name: '张三', salary: 10000 },\n",[102,81123,81124],{"class":104,"line":1189},[102,81125,81126],{"class":112},"      { name: '李四', salary: 10000 },\n",[102,81128,81129],{"class":104,"line":1203},[102,81130,81131],{"class":112},"      { name: '王五', salary: 10000 }\n",[102,81133,81134],{"class":104,"line":1209},[102,81135,53100],{"class":112},[102,81137,81138],{"class":104,"line":1300},[102,81139,81140],{"class":112},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[102,81142,81143],{"class":104,"line":1306},[102,81144,81145],{"class":112},"    \u002F\u002F prev是累计值\n",[102,81147,81148],{"class":104,"line":1318},[102,81149,81150],{"class":112},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[102,81152,81153],{"class":104,"line":1601},[102,81154,81155],{"class":112},"    console.log(total)\n",[102,81157,81158],{"class":104,"line":1606},[102,81159,81160],{"class":112},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[102,81162,81163],{"class":104,"line":1612},[102,81164,81165],{"class":112},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[102,81167,81168],{"class":104,"line":1617},[102,81169,81160],{"class":112},[102,81171,81172],{"class":104,"line":1631},[102,81173,81174],{"class":112},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[102,81176,81177],{"class":104,"line":1636},[102,81178,81160],{"class":112},[102,81180,81181],{"class":104,"line":1642},[102,81182,81183],{"class":112},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[102,81185,81186,81188,81190],{"class":104,"line":1663},[102,81187,52408],{"class":112},[102,81189,51804],{"class":51291},[102,81191,51298],{"class":112},[102,81193,81194,81196,81198],{"class":104,"line":1668},[102,81195,51776],{"class":112},[102,81197,51791],{"class":51291},[102,81199,51298],{"class":112},[22900,81201,81203],{"id":81202},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81205,81206],{},[1451,81207],{"alt":23,"src":81208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81210,81211],{},[1451,81212],{"alt":23,"src":81213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[56,81215,81216],{},[59,81217,81218],{},"find()",[19,81220,81221],{},"循环查找，找到第一个就ok",[19,81223,81224],{},[351,81225,81228],{"href":81226,"rel":81227},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23855],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[93,81230,81232],{"className":50624,"code":81231,"language":50626,"meta":23,"style":23},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[99,81233,81234,81239,81244],{"__ignoreMap":23},[102,81235,81236],{"class":104,"line":105},[102,81237,81238],{"class":112},"const array1 = [5, 12, 8, 130, 44]\n",[102,81240,81241],{"class":104,"line":24},[102,81242,81243],{"class":112},"const found = array1.find((element) => element > 10)\n",[102,81245,81246],{"class":104,"line":1168},[102,81247,81248],{"class":112},"console.log(found)  \u002F\u002F12\n",[19,81250,81251,81253,81254,81259,81260,81263,81264,81266,81267,81272,81273,81275,81276,81278,81279,81281,81282],{},[99,81252,81218],{}," 方法是一个",[351,81255,81258],{"href":81256,"rel":81257},"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",[23855],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[99,81261,81262],{},"callbackFn"," 函数，直到 ",[99,81265,81262],{}," 返回一个",[351,81268,81271],{"href":81269,"rel":81270},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23855],"真值","。然后 ",[99,81274,81218],{}," 返回该元素并停止迭代数组。如果 ",[99,81277,81262],{}," 从未返回真值，则 ",[99,81280,81218],{}," 返回 ",[99,81283,81284],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[93,81286,81288],{"className":53058,"code":81287,"language":53060,"meta":23,"style":23},"\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",[99,81289,81290,81298,81306,81311,81316,81321,81325,81330,81335,81339,81344,81349,81353,81357,81362,81367,81371,81375,81380,81385,81390,81395,81400,81404,81409,81414,81419,81424,81428,81433,81441],{"__ignoreMap":23},[102,81291,81292,81294,81296],{"class":104,"line":105},[102,81293,1023],{"class":112},[102,81295,51791],{"class":51291},[102,81297,51298],{"class":112},[102,81299,81300,81302,81304],{"class":104,"line":24},[102,81301,52135],{"class":112},[102,81303,51804],{"class":51291},[102,81305,51298],{"class":112},[102,81307,81308],{"class":104,"line":1168},[102,81309,81310],{"class":112},"    const arr = ['red', 'blue', 'green']\n",[102,81312,81313],{"class":104,"line":1183},[102,81314,81315],{"class":112},"    const found = arr.find(item => item === 'pink')\n",[102,81317,81318],{"class":104,"line":1189},[102,81319,81320],{"class":112},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[102,81322,81323],{"class":104,"line":1203},[102,81324,2389],{"emptyLinePlaceholder":30},[102,81326,81327],{"class":104,"line":1209},[102,81328,81329],{"class":112},"    \u002F\u002F 使用场景，用于查找数据\n",[102,81331,81332],{"class":104,"line":1300},[102,81333,81334],{"class":112},"    const arr1 = [\n",[102,81336,81337],{"class":104,"line":1306},[102,81338,79377],{"class":112},[102,81340,81341],{"class":104,"line":1318},[102,81342,81343],{"class":112},"        name: '小米',\n",[102,81345,81346],{"class":104,"line":1601},[102,81347,81348],{"class":112},"        price: 1999\n",[102,81350,81351],{"class":104,"line":1606},[102,81352,77883],{"class":112},[102,81354,81355],{"class":104,"line":1612},[102,81356,79377],{"class":112},[102,81358,81359],{"class":104,"line":1617},[102,81360,81361],{"class":112},"        name: '华为',\n",[102,81363,81364],{"class":104,"line":1631},[102,81365,81366],{"class":112},"        price: 3999\n",[102,81368,81369],{"class":104,"line":1636},[102,81370,52389],{"class":112},[102,81372,81373],{"class":104,"line":1642},[102,81374,53100],{"class":112},[102,81376,81377],{"class":104,"line":1663},[102,81378,81379],{"class":112},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[102,81381,81382],{"class":104,"line":1668},[102,81383,81384],{"class":112},"    \u002F\u002F const found1 = arr1.find(item => {\n",[102,81386,81387],{"class":104,"line":1682},[102,81388,81389],{"class":112},"    \u002F\u002F   if (item.name === '小米') {\n",[102,81391,81392],{"class":104,"line":1687},[102,81393,81394],{"class":112},"    \u002F\u002F     return item\n",[102,81396,81397],{"class":104,"line":1716},[102,81398,81399],{"class":112},"    \u002F\u002F   }\n",[102,81401,81402],{"class":104,"line":1721},[102,81403,63281],{"class":112},[102,81405,81406],{"class":104,"line":1738},[102,81407,81408],{"class":112},"    \u002F\u002F 另一种写法\n",[102,81410,81411],{"class":104,"line":1743},[102,81412,81413],{"class":112},"    const found1 = arr1.find(item => {\n",[102,81415,81416],{"class":104,"line":1748},[102,81417,81418],{"class":112},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[102,81420,81421],{"class":104,"line":1753},[102,81422,81423],{"class":112},"      return item.name = '小米'\n",[102,81425,81426],{"class":104,"line":1767},[102,81427,33452],{"class":112},[102,81429,81430],{"class":104,"line":1772},[102,81431,81432],{"class":112},"    console.log(found1)\n",[102,81434,81435,81437,81439],{"class":104,"line":2566},[102,81436,52408],{"class":112},[102,81438,51804],{"class":51291},[102,81440,51298],{"class":112},[102,81442,81443,81445,81447],{"class":104,"line":2580},[102,81444,51776],{"class":112},[102,81446,51791],{"class":51291},[102,81448,51298],{"class":112},[19,81450,81451],{},[1451,81452],{"alt":23,"src":81453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81455,81456],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[56,81458,81459],{"start":24},[59,81460,81461],{},"every()返回的是布尔值",[19,81463,81464],{},[351,81465,81468],{"href":81466,"rel":81467},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23855],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81470,81471],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81473,81474],{},"some是只有有一个就没问题",[19,81476,81477],{},"every是必须全是才行",[93,81479,81483],{"className":81480,"code":81481,"language":81482,"meta":23,"style":23},"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",[99,81484,81485,81501,81515,81519,81528],{"__ignoreMap":23},[102,81486,81487,81489,81492,81494,81496,81499],{"class":104,"line":105},[102,81488,54440],{"class":108},[102,81490,81491],{"class":112}," isBigEnough(element, ",[102,81493,74049],{"class":108},[102,81495,12425],{"class":112},[102,81497,81498],{"class":108},"array",[102,81500,12432],{"class":112},[102,81502,81503,81506,81509,81511,81513],{"class":104,"line":24},[102,81504,81505],{"class":108},"  return",[102,81507,81508],{"class":112}," element ",[102,81510,1699],{"class":108},[102,81512,2027],{"class":161},[102,81514,1279],{"class":112},[102,81516,81517],{"class":104,"line":1168},[102,81518,1554],{"class":112},[102,81520,81521,81524,81526],{"class":104,"line":1183},[102,81522,81523],{"class":112},"[12, 5, 8, 130, 44].every(isBigEnough); ",[102,81525,33320],{"class":108},[102,81527,54507],{"class":112},[102,81529,81530,81533,81535],{"class":104,"line":1189},[102,81531,81532],{"class":112},"[12, 54, 18, 130, 44].every(isBigEnough); ",[102,81534,33320],{"class":108},[102,81536,57931],{"class":112},[93,81538,81540],{"className":53058,"code":81539,"language":53060,"meta":23,"style":23},"\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",[99,81541,81542,81550,81558,81563,81567,81572,81577,81585],{"__ignoreMap":23},[102,81543,81544,81546,81548],{"class":104,"line":105},[102,81545,1023],{"class":112},[102,81547,51791],{"class":51291},[102,81549,51298],{"class":112},[102,81551,81552,81554,81556],{"class":104,"line":24},[102,81553,52135],{"class":112},[102,81555,51804],{"class":51291},[102,81557,51298],{"class":112},[102,81559,81560],{"class":104,"line":1168},[102,81561,81562],{"class":112},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[102,81564,81565],{"class":104,"line":1183},[102,81566,78313],{"class":112},[102,81568,81569],{"class":104,"line":1189},[102,81570,81571],{"class":112},"    const flag = arr.every(item => item >= 10)\n",[102,81573,81574],{"class":104,"line":1203},[102,81575,81576],{"class":112},"    console.log(flag)    \u002F\u002Ftrue\n",[102,81578,81579,81581,81583],{"class":104,"line":1209},[102,81580,52408],{"class":112},[102,81582,51804],{"class":51291},[102,81584,51298],{"class":112},[102,81586,81587,81589,81591],{"class":104,"line":1300},[102,81588,51776],{"class":112},[102,81590,51791],{"class":51291},[102,81592,51298],{"class":112},[93,81594,81596],{"className":53058,"code":81595,"language":53060,"meta":23,"style":23},"\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",[99,81597,81598,81606,81614,81618,81623,81628,81633,81641],{"__ignoreMap":23},[102,81599,81600,81602,81604],{"class":104,"line":105},[102,81601,1023],{"class":112},[102,81603,51791],{"class":51291},[102,81605,51298],{"class":112},[102,81607,81608,81610,81612],{"class":104,"line":24},[102,81609,52135],{"class":112},[102,81611,51804],{"class":51291},[102,81613,51298],{"class":112},[102,81615,81616],{"class":104,"line":1168},[102,81617,81562],{"class":112},[102,81619,81620],{"class":104,"line":1183},[102,81621,81622],{"class":112},"    const arr = [10, 0, 5]\n",[102,81624,81625],{"class":104,"line":1189},[102,81626,81627],{"class":112},"    const flag = arr.some(item => item >= 10)\n",[102,81629,81630],{"class":104,"line":1203},[102,81631,81632],{"class":112},"    console.log(flag)   \u002F\u002Ftrue\n",[102,81634,81635,81637,81639],{"class":104,"line":1209},[102,81636,52408],{"class":112},[102,81638,51804],{"class":51291},[102,81640,51298],{"class":112},[102,81642,81643,81645,81647],{"class":104,"line":1300},[102,81644,51776],{"class":112},[102,81646,51791],{"class":51291},[102,81648,51298],{"class":112},[22900,81650,81652],{"id":81651},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81654,81655],{},[1451,81656],{"alt":23,"src":81657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[93,81659,81661],{"className":50624,"code":81660,"language":50626,"meta":23,"style":23},"\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",[99,81662,81663,81673,81687,81691,81699,81713,81733,81745,81753,81760,81772,81784,81796,81808,81818,81828,81832,81840,81848,81852,81860,81872,81880,81902,81907,81912,81945,81953,81961,81965],{"__ignoreMap":23},[102,81664,81665,81667,81669,81671],{"class":104,"line":105},[102,81666,51288],{"class":112},[102,81668,51292],{"class":51291},[102,81670,51295],{"class":1952},[102,81672,51298],{"class":112},[102,81674,81675,81677,81679,81681,81683,81685],{"class":104,"line":24},[102,81676,1023],{"class":112},[102,81678,50626],{"class":51291},[102,81680,51307],{"class":1952},[102,81682,158],{"class":112},[102,81684,51312],{"class":217},[102,81686,51298],{"class":112},[102,81688,81689],{"class":104,"line":1168},[102,81690,2389],{"emptyLinePlaceholder":30},[102,81692,81693,81695,81697],{"class":104,"line":1183},[102,81694,1023],{"class":112},[102,81696,51325],{"class":51291},[102,81698,51298],{"class":112},[102,81700,81701,81703,81705,81707,81709,81711],{"class":104,"line":1189},[102,81702,52135],{"class":112},[102,81704,51335],{"class":51291},[102,81706,51338],{"class":1952},[102,81708,158],{"class":112},[102,81710,51343],{"class":217},[102,81712,51298],{"class":112},[102,81714,81715,81717,81719,81721,81723,81725,81727,81729,81731],{"class":104,"line":1203},[102,81716,52135],{"class":112},[102,81718,51335],{"class":51291},[102,81720,14910],{"class":1952},[102,81722,158],{"class":112},[102,81724,51382],{"class":217},[102,81726,51362],{"class":1952},[102,81728,158],{"class":112},[102,81730,51389],{"class":217},[102,81732,51298],{"class":112},[102,81734,81735,81737,81739,81741,81743],{"class":104,"line":1209},[102,81736,52135],{"class":112},[102,81738,51398],{"class":51291},[102,81740,51401],{"class":112},[102,81742,51398],{"class":51291},[102,81744,51298],{"class":112},[102,81746,81747,81749,81751],{"class":104,"line":1300},[102,81748,52135],{"class":112},[102,81750,5116],{"class":51291},[102,81752,51298],{"class":112},[102,81754,81755,81758],{"class":104,"line":1306},[102,81756,81757],{"class":51291},"    div",[102,81759,15562],{"class":112},[102,81761,81762,81764,81766,81768,81770],{"class":104,"line":1318},[102,81763,54762],{"class":161},[102,81765,51428],{"class":112},[102,81767,1711],{"class":161},[102,81769,51483],{"class":108},[102,81771,1279],{"class":112},[102,81773,81774,81776,81778,81780,81782],{"class":104,"line":1601},[102,81775,54776],{"class":161},[102,81777,51428],{"class":112},[102,81779,514],{"class":161},[102,81781,51483],{"class":108},[102,81783,1279],{"class":112},[102,81785,81786,81788,81790,81792,81794],{"class":104,"line":1606},[102,81787,57350],{"class":161},[102,81789,51428],{"class":112},[102,81791,514],{"class":161},[102,81793,51483],{"class":108},[102,81795,1279],{"class":112},[102,81797,81798,81800,81802,81804,81806],{"class":104,"line":1612},[102,81799,65124],{"class":161},[102,81801,51428],{"class":112},[102,81803,611],{"class":161},[102,81805,51483],{"class":108},[102,81807,1279],{"class":112},[102,81809,81810,81812,81814,81816],{"class":104,"line":1617},[102,81811,57277],{"class":161},[102,81813,51428],{"class":112},[102,81815,51583],{"class":161},[102,81817,1279],{"class":112},[102,81819,81820,81822,81824,81826],{"class":104,"line":1631},[102,81821,54875],{"class":161},[102,81823,51428],{"class":112},[102,81825,51636],{"class":161},[102,81827,1279],{"class":112},[102,81829,81830],{"class":104,"line":1636},[102,81831,2176],{"class":112},[102,81833,81834,81836,81838],{"class":104,"line":1642},[102,81835,52408],{"class":112},[102,81837,5116],{"class":51291},[102,81839,51298],{"class":112},[102,81841,81842,81844,81846],{"class":104,"line":1663},[102,81843,51776],{"class":112},[102,81845,51325],{"class":51291},[102,81847,51298],{"class":112},[102,81849,81850],{"class":104,"line":1668},[102,81851,2389],{"emptyLinePlaceholder":30},[102,81853,81854,81856,81858],{"class":104,"line":1682},[102,81855,1023],{"class":112},[102,81857,51791],{"class":51291},[102,81859,51298],{"class":112},[102,81861,81862,81864,81866,81868,81870],{"class":104,"line":1687},[102,81863,52135],{"class":112},[102,81865,51602],{"class":51291},[102,81867,55305],{"class":112},[102,81869,51602],{"class":51291},[102,81871,51298],{"class":112},[102,81873,81874,81876,81878],{"class":104,"line":1716},[102,81875,52135],{"class":112},[102,81877,51804],{"class":51291},[102,81879,51298],{"class":112},[102,81881,81882,81884,81887,81889,81892,81895,81897,81900],{"class":104,"line":1721},[102,81883,11211],{"class":108},[102,81885,81886],{"class":161}," spec",[102,81888,13554],{"class":108},[102,81890,81891],{"class":112}," { size: ",[102,81893,81894],{"class":217},"'40cm*40cm'",[102,81896,55455],{"class":112},[102,81898,81899],{"class":217},"'黑色'",[102,81901,55595],{"class":112},[102,81903,81904],{"class":104,"line":1738},[102,81905,81906],{"class":171},"    \u002F\u002F const arr = Object.values(spec)\n",[102,81908,81909],{"class":104,"line":1743},[102,81910,81911],{"class":171},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[102,81913,81914,81916,81918,81920,81923,81925,81927,81930,81933,81936,81938,81940,81943],{"class":104,"line":1748},[102,81915,52398],{"class":112},[102,81917,54390],{"class":1952},[102,81919,113],{"class":112},[102,81921,81922],{"class":217},"'div'",[102,81924,74240],{"class":112},[102,81926,158],{"class":108},[102,81928,81929],{"class":112}," Object.",[102,81931,81932],{"class":1952},"values",[102,81934,81935],{"class":112},"(spec).",[102,81937,74214],{"class":1952},[102,81939,113],{"class":112},[102,81941,81942],{"class":217},"'\u002F'",[102,81944,119],{"class":112},[102,81946,81947,81949,81951],{"class":104,"line":1753},[102,81948,52408],{"class":112},[102,81950,51804],{"class":51291},[102,81952,51298],{"class":112},[102,81954,81955,81957,81959],{"class":104,"line":1767},[102,81956,51776],{"class":112},[102,81958,51791],{"class":51291},[102,81960,51298],{"class":112},[102,81962,81963],{"class":104,"line":1772},[102,81964,2389],{"emptyLinePlaceholder":30},[102,81966,81967,81969,81971],{"class":104,"line":2566},[102,81968,51776],{"class":112},[102,81970,50626],{"class":51291},[102,81972,51298],{"class":112},[19,81974,81975],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22900,81977,81979],{"id":81978},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,81981,81982],{},"静态方法，将伪数组转换为真数组",[19,81984,81985],{},[1451,81986],{"alt":23,"src":81987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[93,81989,81991],{"className":53058,"code":81990,"language":53060,"meta":23,"style":23},"\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",[99,81992,81993,82001,82009,82021,82033,82045,82053,82061,82066,82071,82076,82081,82089],{"__ignoreMap":23},[102,81994,81995,81997,81999],{"class":104,"line":105},[102,81996,1023],{"class":112},[102,81998,51791],{"class":51291},[102,82000,51298],{"class":112},[102,82002,82003,82005,82007],{"class":104,"line":24},[102,82004,52135],{"class":112},[102,82006,1120],{"class":51291},[102,82008,51298],{"class":112},[102,82010,82011,82013,82015,82017,82019],{"class":104,"line":1168},[102,82012,51332],{"class":112},[102,82014,59],{"class":51291},[102,82016,55305],{"class":112},[102,82018,59],{"class":51291},[102,82020,51298],{"class":112},[102,82022,82023,82025,82027,82029,82031],{"class":104,"line":1183},[102,82024,51332],{"class":112},[102,82026,59],{"class":51291},[102,82028,55305],{"class":112},[102,82030,59],{"class":51291},[102,82032,51298],{"class":112},[102,82034,82035,82037,82039,82041,82043],{"class":104,"line":1189},[102,82036,51332],{"class":112},[102,82038,59],{"class":51291},[102,82040,55305],{"class":112},[102,82042,59],{"class":51291},[102,82044,51298],{"class":112},[102,82046,82047,82049,82051],{"class":104,"line":1203},[102,82048,52408],{"class":112},[102,82050,1120],{"class":51291},[102,82052,51298],{"class":112},[102,82054,82055,82057,82059],{"class":104,"line":1209},[102,82056,52135],{"class":112},[102,82058,51804],{"class":51291},[102,82060,51298],{"class":112},[102,82062,82063],{"class":104,"line":1300},[102,82064,82065],{"class":112},"    const lis = document.querySelectorAll('li')\n",[102,82067,82068],{"class":104,"line":1306},[102,82069,82070],{"class":112},"    const liss = Array.from(lis)\n",[102,82072,82073],{"class":104,"line":1318},[102,82074,82075],{"class":112},"    liss.pop()\n",[102,82077,82078],{"class":104,"line":1601},[102,82079,82080],{"class":112},"    console.log(liss)\n",[102,82082,82083,82085,82087],{"class":104,"line":1606},[102,82084,52408],{"class":112},[102,82086,51804],{"class":51291},[102,82088,51298],{"class":112},[102,82090,82091,82093,82095],{"class":104,"line":1612},[102,82092,51776],{"class":112},[102,82094,51791],{"class":51291},[102,82096,51298],{"class":112},[19,82098,82099],{},[1451,82100],{"alt":23,"src":82101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21988,82103,82105],{"id":82104},"_41053-string","4.10.5.3 String",[19,82107,82108],{},[1451,82109],{"alt":23,"src":82110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22900,82112,82114],{"id":82113},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[93,82116,82118],{"className":53058,"code":82117,"language":53060,"meta":23,"style":23},"\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",[99,82119,82120,82128,82136,82141,82146,82151,82155,82160,82165,82170,82178],{"__ignoreMap":23},[102,82121,82122,82124,82126],{"class":104,"line":105},[102,82123,1023],{"class":112},[102,82125,51791],{"class":51291},[102,82127,51298],{"class":112},[102,82129,82130,82132,82134],{"class":104,"line":24},[102,82131,52135],{"class":112},[102,82133,51804],{"class":51291},[102,82135,51298],{"class":112},[102,82137,82138],{"class":104,"line":1168},[102,82139,82140],{"class":112},"    \u002F\u002F 把字符串转化为数组\n",[102,82142,82143],{"class":104,"line":1183},[102,82144,82145],{"class":112},"    const str = 'pink,red'\n",[102,82147,82148],{"class":104,"line":1189},[102,82149,82150],{"class":112},"    const arr = str.split(',')\n",[102,82152,82153],{"class":104,"line":1203},[102,82154,80629],{"class":112},[102,82156,82157],{"class":104,"line":1209},[102,82158,82159],{"class":112},"    const str1 = '2025-8-25'\n",[102,82161,82162],{"class":104,"line":1300},[102,82163,82164],{"class":112},"    const arr1 = str1.split('-')\n",[102,82166,82167],{"class":104,"line":1306},[102,82168,82169],{"class":112},"    console.log(arr1)\n",[102,82171,82172,82174,82176],{"class":104,"line":1318},[102,82173,52408],{"class":112},[102,82175,51804],{"class":51291},[102,82177,51298],{"class":112},[102,82179,82180,82182,82184],{"class":104,"line":1601},[102,82181,51776],{"class":112},[102,82183,51791],{"class":51291},[102,82185,51298],{"class":112},[22900,82187,82189],{"id":82188},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82191,5171],{},[19,82193,82194],{},"substring(indexStart)",[19,82196,82197],{},"substring(indexStart, indexEnd)",[1120,82199,82200,82211,82223,82233],{},[59,82201,82202,82203,82206,82207,82210],{},"如果省略了 ",[99,82204,82205],{},"indexEnd","，则 ",[99,82208,82209],{},"substring()"," 提取字符直到字符串的末尾",[59,82212,82213,82214,82217,82218,82206,82220,82222],{},"如果 ",[99,82215,82216],{},"indexStart"," 等于 ",[99,82219,82205],{},[99,82221,82209],{}," 返回一个空字符串",[59,82224,82213,82225,82227,82228,82206,82230,82232],{},[99,82226,82216],{}," 大于 ",[99,82229,82205],{},[99,82231,82209],{}," 的效果就像交换了这两个参数一样",[59,82234,82235],{},"结束的索引号不包含想要截取的部分",[93,82237,82239],{"className":81480,"code":82238,"language":81482,"meta":23,"style":23},"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",[99,82240,82241,82253,82257,82291,82321,82325,82356,82360,82387,82417,82447,82451,82482],{"__ignoreMap":23},[102,82242,82243,82246,82248,82251],{"class":104,"line":105},[102,82244,82245],{"class":112},"const anyString ",[102,82247,158],{"class":108},[102,82249,82250],{"class":217}," \"Mozilla\"",[102,82252,1279],{"class":112},[102,82254,82255],{"class":104,"line":24},[102,82256,2389],{"emptyLinePlaceholder":30},[102,82258,82259,82262,82264,82266,82268,82271,82273,82276,82278,82280,82282,82284,82286,82288],{"class":104,"line":1168},[102,82260,82261],{"class":161},"console",[102,82263,671],{"class":112},[102,82265,58238],{"class":161},[102,82267,113],{"class":112},[102,82269,82270],{"class":161},"anyString",[102,82272,671],{"class":112},[102,82274,82275],{"class":161},"substring",[102,82277,113],{"class":112},[102,82279,304],{"class":161},[102,82281,12425],{"class":112},[102,82283,330],{"class":161},[102,82285,75244],{"class":112},[102,82287,33320],{"class":108},[102,82289,82290],{"class":217}," 'M'\n",[102,82292,82293,82295,82297,82299,82301,82303,82305,82307,82309,82311,82313,82315,82317,82319],{"class":104,"line":1183},[102,82294,82261],{"class":161},[102,82296,671],{"class":112},[102,82298,58238],{"class":161},[102,82300,113],{"class":112},[102,82302,82270],{"class":161},[102,82304,671],{"class":112},[102,82306,82275],{"class":161},[102,82308,113],{"class":112},[102,82310,330],{"class":161},[102,82312,12425],{"class":112},[102,82314,304],{"class":161},[102,82316,75244],{"class":112},[102,82318,33320],{"class":108},[102,82320,82290],{"class":217},[102,82322,82323],{"class":104,"line":1189},[102,82324,2389],{"emptyLinePlaceholder":30},[102,82326,82327,82329,82331,82333,82335,82337,82339,82341,82343,82345,82347,82349,82351,82353],{"class":104,"line":1203},[102,82328,82261],{"class":161},[102,82330,671],{"class":112},[102,82332,58238],{"class":161},[102,82334,113],{"class":112},[102,82336,82270],{"class":161},[102,82338,671],{"class":112},[102,82340,82275],{"class":161},[102,82342,113],{"class":112},[102,82344,304],{"class":161},[102,82346,12425],{"class":112},[102,82348,457],{"class":161},[102,82350,75244],{"class":112},[102,82352,33320],{"class":108},[102,82354,82355],{"class":217}," 'Mozill'\n",[102,82357,82358],{"class":104,"line":1209},[102,82359,2389],{"emptyLinePlaceholder":30},[102,82361,82362,82364,82366,82368,82370,82372,82374,82376,82378,82380,82382,82384],{"class":104,"line":1300},[102,82363,82261],{"class":161},[102,82365,671],{"class":112},[102,82367,58238],{"class":161},[102,82369,113],{"class":112},[102,82371,82270],{"class":161},[102,82373,671],{"class":112},[102,82375,82275],{"class":161},[102,82377,113],{"class":112},[102,82379,406],{"class":161},[102,82381,75244],{"class":112},[102,82383,33320],{"class":108},[102,82385,82386],{"class":217}," 'lla'\n",[102,82388,82389,82391,82393,82395,82397,82399,82401,82403,82405,82407,82409,82411,82413,82415],{"class":104,"line":1306},[102,82390,82261],{"class":161},[102,82392,671],{"class":112},[102,82394,58238],{"class":161},[102,82396,113],{"class":112},[102,82398,82270],{"class":161},[102,82400,671],{"class":112},[102,82402,82275],{"class":161},[102,82404,113],{"class":112},[102,82406,406],{"class":161},[102,82408,12425],{"class":112},[102,82410,482],{"class":161},[102,82412,75300],{"class":112},[102,82414,33320],{"class":108},[102,82416,82386],{"class":217},[102,82418,82419,82421,82423,82425,82427,82429,82431,82433,82435,82437,82439,82441,82443,82445],{"class":104,"line":1318},[102,82420,82261],{"class":161},[102,82422,671],{"class":112},[102,82424,58238],{"class":161},[102,82426,113],{"class":112},[102,82428,82270],{"class":161},[102,82430,671],{"class":112},[102,82432,82275],{"class":161},[102,82434,113],{"class":112},[102,82436,482],{"class":161},[102,82438,12425],{"class":112},[102,82440,406],{"class":161},[102,82442,75244],{"class":112},[102,82444,33320],{"class":108},[102,82446,82386],{"class":217},[102,82448,82449],{"class":104,"line":1601},[102,82450,2389],{"emptyLinePlaceholder":30},[102,82452,82453,82455,82457,82459,82461,82463,82465,82467,82469,82471,82473,82475,82477,82479],{"class":104,"line":1606},[102,82454,82261],{"class":161},[102,82456,671],{"class":112},[102,82458,58238],{"class":161},[102,82460,113],{"class":112},[102,82462,82270],{"class":161},[102,82464,671],{"class":112},[102,82466,82275],{"class":161},[102,82468,113],{"class":112},[102,82470,304],{"class":161},[102,82472,12425],{"class":112},[102,82474,482],{"class":161},[102,82476,75244],{"class":112},[102,82478,33320],{"class":108},[102,82480,82481],{"class":217}," 'Mozilla'\n",[102,82483,82484,82486,82488,82490,82492,82494,82496,82498,82500,82502,82504,82506,82508,82510],{"class":104,"line":1612},[102,82485,82261],{"class":161},[102,82487,671],{"class":112},[102,82489,58238],{"class":161},[102,82491,113],{"class":112},[102,82493,82270],{"class":161},[102,82495,671],{"class":112},[102,82497,82275],{"class":161},[102,82499,113],{"class":112},[102,82501,304],{"class":161},[102,82503,12425],{"class":112},[102,82505,559],{"class":161},[102,82507,75244],{"class":112},[102,82509,33320],{"class":108},[102,82511,82481],{"class":217},[22900,82513,82515],{"id":82514},"_410533-startswith","4.10.5.3.3 startsWith",[19,82517,82518,82521,82522,82527,82528,82530,82531],{},[99,82519,82520],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[262,82523,82524],{},[99,82525,82526],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[99,82529,1351],{}," 或 ",[99,82532,66011],{},[93,82534,82536],{"className":77486,"code":82535,"language":77488,"meta":23,"style":23},"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",[99,82537,82538,82550,82569,82574,82594],{"__ignoreMap":23},[102,82539,82540,82542,82545,82547],{"class":104,"line":105},[102,82541,6782],{"class":108},[102,82543,82544],{"class":112}," str1 ",[102,82546,158],{"class":108},[102,82548,82549],{"class":217}," \"Saturday night plans\"\n",[102,82551,82552,82554,82556,82559,82562,82564,82567],{"class":104,"line":24},[102,82553,77523],{"class":112},[102,82555,58238],{"class":1952},[102,82557,82558],{"class":112},"(str1.",[102,82560,82561],{"class":1952},"startsWith",[102,82563,113],{"class":112},[102,82565,82566],{"class":217},"\"Sat\"",[102,82568,30488],{"class":112},[102,82570,82571],{"class":104,"line":1168},[102,82572,82573],{"class":171},"\u002F\u002F Expected output: true\n",[102,82575,82576,82578,82580,82582,82584,82586,82588,82590,82592],{"class":104,"line":1183},[102,82577,77523],{"class":112},[102,82579,58238],{"class":1952},[102,82581,82558],{"class":112},[102,82583,82561],{"class":1952},[102,82585,113],{"class":112},[102,82587,82566],{"class":217},[102,82589,12425],{"class":112},[102,82591,184],{"class":161},[102,82593,30488],{"class":112},[102,82595,82596],{"class":104,"line":1189},[102,82597,82598],{"class":171},"\u002F\u002F Expected output: false\n",[93,82600,82602],{"className":50624,"code":82601,"language":50626,"meta":23,"style":23},"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",[99,82603,82604,82609,82614,82618,82623,82628],{"__ignoreMap":23},[102,82605,82606],{"class":104,"line":105},[102,82607,82608],{"class":112},"startsWith(searchString)\n",[102,82610,82611],{"class":104,"line":24},[102,82612,82613],{"class":112},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[102,82615,82616],{"class":104,"line":1168},[102,82617,2389],{"emptyLinePlaceholder":30},[102,82619,82620],{"class":104,"line":1183},[102,82621,82622],{"class":112},"const str3 = 'pink老师上课中'\n",[102,82624,82625],{"class":104,"line":1189},[102,82626,82627],{"class":112},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[102,82629,82630],{"class":104,"line":1203},[102,82631,82632],{"class":112},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22900,82634,82636],{"id":82635},"_410534-includes","4.10.5.3.4 includes",[19,82638,82639],{},"includes(searchString) includes(searchString, position)",[56,82641,82642],{},[59,82643,82644],{},"searchString:",[19,82646,82647,82648,82650,82651,82656,82657,82662,82663,21490,82666,82669,82670,82673],{},"一个要在 ",[99,82649,1288],{}," 中查找的字符串。",[351,82652,82655],{"href":82653,"rel":82654},"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",[23855],"不能是正则表达式","。所有非正则表达式的值都会被",[351,82658,82661],{"href":82659,"rel":82660},"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",[23855],"强制转换为字符串","，因此如果该参数被省略或传入 ",[99,82664,82665],{},"undefined",[99,82667,82668],{},"includes()"," 方法会在字符串中搜索 ",[99,82671,82672],{},"\"undefined\"","，这通常不是你想要的",[56,82675,82676],{"start":24},[59,82677,82678,972],{},[99,82679,82680],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82682,82683,82684,82687,82688],{},"在字符串中开始搜索 ",[99,82685,82686],{},"searchString"," 的位置。默认值为 ",[99,82689,304],{},[56,82691,82692],{"start":1168},[59,82693,82694],{},"返回值：",[19,82696,82697,82698,82700,82701,82705,82706],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[99,82699,82686],{}," 为空字符串的情况），则返回 ",[262,82702,82703],{},[99,82704,1351],{}," ，否则返回 ",[262,82707,82708],{},[99,82709,66011],{},[56,82711,82712],{"start":1183},[59,82713,82714],{},"异常：",[19,82716,82213,82717,13785,82719,82723],{},[99,82718,82686],{},[351,82720,82722],{"href":82653,"rel":82721},[23855],"是一个正则表达式","，则会抛出",[19,82725,82726],{},"只要是有就是true，不需要非得以谁开头结尾",[93,82728,82730],{"className":77486,"code":82729,"language":77488,"meta":23,"style":23},"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",[99,82731,82732,82743,82766,82785,82805,82827,82846],{"__ignoreMap":23},[102,82733,82734,82736,82738,82740],{"class":104,"line":105},[102,82735,6782],{"class":108},[102,82737,79766],{"class":112},[102,82739,158],{"class":108},[102,82741,82742],{"class":217}," \"To be, or not to be, that is the question.\"\n",[102,82744,82745,82747,82749,82752,82755,82757,82760,82763],{"class":104,"line":24},[102,82746,77523],{"class":112},[102,82748,58238],{"class":1952},[102,82750,82751],{"class":112},"(str.",[102,82753,82754],{"class":1952},"includes",[102,82756,113],{"class":112},[102,82758,82759],{"class":217},"\"To be\"",[102,82761,82762],{"class":112},"))",[102,82764,82765],{"class":171},"  \u002F\u002F true\n",[102,82767,82768,82770,82772,82774,82776,82778,82781,82783],{"class":104,"line":1168},[102,82769,77523],{"class":112},[102,82771,58238],{"class":1952},[102,82773,82751],{"class":112},[102,82775,82754],{"class":1952},[102,82777,113],{"class":112},[102,82779,82780],{"class":217},"\"question\"",[102,82782,82762],{"class":112},[102,82784,82765],{"class":171},[102,82786,82787,82789,82791,82793,82795,82797,82800,82802],{"class":104,"line":1183},[102,82788,77523],{"class":112},[102,82790,58238],{"class":1952},[102,82792,82751],{"class":112},[102,82794,82754],{"class":1952},[102,82796,113],{"class":112},[102,82798,82799],{"class":217},"\"nonexistent\"",[102,82801,82762],{"class":112},[102,82803,82804],{"class":171},"  \u002F\u002F false\n",[102,82806,82807,82809,82811,82813,82815,82817,82819,82821,82823,82825],{"class":104,"line":1189},[102,82808,77523],{"class":112},[102,82810,58238],{"class":1952},[102,82812,82751],{"class":112},[102,82814,82754],{"class":1952},[102,82816,113],{"class":112},[102,82818,82759],{"class":217},[102,82820,12425],{"class":112},[102,82822,330],{"class":161},[102,82824,82762],{"class":112},[102,82826,82804],{"class":171},[102,82828,82829,82831,82833,82835,82837,82839,82842,82844],{"class":104,"line":1203},[102,82830,77523],{"class":112},[102,82832,58238],{"class":1952},[102,82834,82751],{"class":112},[102,82836,82754],{"class":1952},[102,82838,113],{"class":112},[102,82840,82841],{"class":217},"\"TO BE\"",[102,82843,82762],{"class":112},[102,82845,82804],{"class":171},[102,82847,82848,82850,82852,82854,82856,82858,82860,82862],{"class":104,"line":1209},[102,82849,77523],{"class":112},[102,82851,58238],{"class":1952},[102,82853,82751],{"class":112},[102,82855,82754],{"class":1952},[102,82857,113],{"class":112},[102,82859,7642],{"class":217},[102,82861,82762],{"class":112},[102,82863,82765],{"class":171},[22900,82865,82867],{"id":82866},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[93,82869,82871],{"className":53058,"code":82870,"language":53060,"meta":23,"style":23},"\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",[99,82872,82873,82881,82889,82894,82899,82904,82909,82914,82922],{"__ignoreMap":23},[102,82874,82875,82877,82879],{"class":104,"line":105},[102,82876,1023],{"class":112},[102,82878,51791],{"class":51291},[102,82880,51298],{"class":112},[102,82882,82883,82885,82887],{"class":104,"line":24},[102,82884,52135],{"class":112},[102,82886,51804],{"class":51291},[102,82888,51298],{"class":112},[102,82890,82891],{"class":104,"line":1168},[102,82892,82893],{"class":112},"    const num = 10\n",[102,82895,82896],{"class":104,"line":1183},[102,82897,82898],{"class":112},"    \u002F\u002F 强制转换\n",[102,82900,82901],{"class":104,"line":1189},[102,82902,82903],{"class":112},"    console.log(String(num))\n",[102,82905,82906],{"class":104,"line":1203},[102,82907,82908],{"class":112},"    \u002F\u002F toString()方法转换\n",[102,82910,82911],{"class":104,"line":1209},[102,82912,82913],{"class":112},"    console.log(num.toString())\n",[102,82915,82916,82918,82920],{"class":104,"line":1300},[102,82917,52408],{"class":112},[102,82919,51804],{"class":51291},[102,82921,51298],{"class":112},[102,82923,82924,82926,82928],{"class":104,"line":1306},[102,82925,51776],{"class":112},[102,82927,51791],{"class":51291},[102,82929,51298],{"class":112},[22900,82931,82933],{"id":82932},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,82935,82936],{},[1451,82937],{"alt":23,"src":82938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[93,82940,82942],{"className":50624,"code":82941,"language":50626,"meta":23,"style":23},"\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",[99,82943,82944,82954,82968,82972,82980,82994,83014,83026,83034,83038,83046,83058,83066,83078,83083,83088,83093,83140,83156,83164,83172,83176],{"__ignoreMap":23},[102,82945,82946,82948,82950,82952],{"class":104,"line":105},[102,82947,51288],{"class":112},[102,82949,51292],{"class":51291},[102,82951,51295],{"class":1952},[102,82953,51298],{"class":112},[102,82955,82956,82958,82960,82962,82964,82966],{"class":104,"line":24},[102,82957,1023],{"class":112},[102,82959,50626],{"class":51291},[102,82961,51307],{"class":1952},[102,82963,158],{"class":112},[102,82965,51312],{"class":217},[102,82967,51298],{"class":112},[102,82969,82970],{"class":104,"line":1168},[102,82971,2389],{"emptyLinePlaceholder":30},[102,82973,82974,82976,82978],{"class":104,"line":1183},[102,82975,1023],{"class":112},[102,82977,51325],{"class":51291},[102,82979,51298],{"class":112},[102,82981,82982,82984,82986,82988,82990,82992],{"class":104,"line":1189},[102,82983,52135],{"class":112},[102,82985,51335],{"class":51291},[102,82987,51338],{"class":1952},[102,82989,158],{"class":112},[102,82991,51343],{"class":217},[102,82993,51298],{"class":112},[102,82995,82996,82998,83000,83002,83004,83006,83008,83010,83012],{"class":104,"line":1203},[102,82997,52135],{"class":112},[102,82999,51335],{"class":51291},[102,83001,14910],{"class":1952},[102,83003,158],{"class":112},[102,83005,51382],{"class":217},[102,83007,51362],{"class":1952},[102,83009,158],{"class":112},[102,83011,51389],{"class":217},[102,83013,51298],{"class":112},[102,83015,83016,83018,83020,83022,83024],{"class":104,"line":1209},[102,83017,52135],{"class":112},[102,83019,51398],{"class":51291},[102,83021,51401],{"class":112},[102,83023,51398],{"class":51291},[102,83025,51298],{"class":112},[102,83027,83028,83030,83032],{"class":104,"line":1300},[102,83029,51776],{"class":112},[102,83031,51325],{"class":51291},[102,83033,51298],{"class":112},[102,83035,83036],{"class":104,"line":1306},[102,83037,2389],{"emptyLinePlaceholder":30},[102,83039,83040,83042,83044],{"class":104,"line":1318},[102,83041,1023],{"class":112},[102,83043,51791],{"class":51291},[102,83045,51298],{"class":112},[102,83047,83048,83050,83052,83054,83056],{"class":104,"line":1601},[102,83049,52135],{"class":112},[102,83051,51602],{"class":51291},[102,83053,55305],{"class":112},[102,83055,51602],{"class":51291},[102,83057,51298],{"class":112},[102,83059,83060,83062,83064],{"class":104,"line":1606},[102,83061,52135],{"class":112},[102,83063,51804],{"class":51291},[102,83065,51298],{"class":112},[102,83067,83068,83070,83073,83075],{"class":104,"line":1612},[102,83069,11211],{"class":108},[102,83071,83072],{"class":161}," gift",[102,83074,13554],{"class":108},[102,83076,83077],{"class":217}," '50g的茶叶，清洗球'\n",[102,83079,83080],{"class":104,"line":1617},[102,83081,83082],{"class":171},"    \u002F\u002F 1.把字符串拆分为数组\n",[102,83084,83085],{"class":104,"line":1631},[102,83086,83087],{"class":171},"    \u002F\u002F console.log(gift.split(','))\n",[102,83089,83090],{"class":104,"line":1636},[102,83091,83092],{"class":171},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[102,83094,83095,83097,83099,83101,83104,83107,83109,83112,83114,83116,83118,83120,83122,83125,83127,83130,83132,83134,83136,83138],{"class":104,"line":1642},[102,83096,11211],{"class":108},[102,83098,73910],{"class":161},[102,83100,13554],{"class":108},[102,83102,83103],{"class":112}," gift.",[102,83105,83106],{"class":1952},"split",[102,83108,113],{"class":112},[102,83110,83111],{"class":217},"'，'",[102,83113,30817],{"class":112},[102,83115,74035],{"class":1952},[102,83117,113],{"class":112},[102,83119,79786],{"class":5206},[102,83121,79789],{"class":108},[102,83123,83124],{"class":217}," `\u003Cspan>【赠品】${",[102,83126,79786],{"class":112},[102,83128,83129],{"class":217},"}\u003C\u002Fspan>\u003Cbr>`",[102,83131,30817],{"class":112},[102,83133,74214],{"class":1952},[102,83135,113],{"class":112},[102,83137,74219],{"class":217},[102,83139,119],{"class":112},[102,83141,83142,83144,83146,83148,83150,83152,83154],{"class":104,"line":1663},[102,83143,52398],{"class":112},[102,83145,54390],{"class":1952},[102,83147,113],{"class":112},[102,83149,81922],{"class":217},[102,83151,74240],{"class":112},[102,83153,158],{"class":108},[102,83155,73976],{"class":112},[102,83157,83158,83160,83162],{"class":104,"line":1668},[102,83159,52408],{"class":112},[102,83161,51804],{"class":51291},[102,83163,51298],{"class":112},[102,83165,83166,83168,83170],{"class":104,"line":1682},[102,83167,51776],{"class":112},[102,83169,51791],{"class":51291},[102,83171,51298],{"class":112},[102,83173,83174],{"class":104,"line":1687},[102,83175,2389],{"emptyLinePlaceholder":30},[102,83177,83178,83180,83182],{"class":104,"line":1716},[102,83179,51776],{"class":112},[102,83181,50626],{"class":51291},[102,83183,51298],{"class":112},[21988,83185,83187],{"id":83186},"_41054-number","4.10.5.4 Number",[19,83189,83190],{},[1451,83191],{"alt":23,"src":83192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83194,83195],{},"整数也可以进行toFixed来保留小数",[19,83197,83198],{},"比如：",[19,83200,83201],{},"const price=10",[19,83203,83204],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21988,83206,83208],{"id":83207},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83210,83211],{},[1451,83212],{"alt":23,"src":83213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[93,83215,83217],{"className":50624,"code":83216,"language":50626,"meta":23,"style":23},"\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",[99,83218,83219,83229,83243,83247,83255,83269,83289,83301,83309,83315,83325,83335,83345,83349,83353,83359,83371,83385,83389,83393,83399,83411,83427,83437,83453,83457,83461,83467,83477,83487,83491,83495,83503,83515,83527,83539,83543,83547,83555,83567,83571,83575,83586,83596,83608,83620,83630,83634,83638,83646,83655,83667,83677,83687,83691,83695,83703,83712,83719,83729,83741,83745,83749,83758,83768,83779,83791,83803,83807,83811,83820,83830,83841,83845,83849,83855,83867,83879,83889,83899,83917,83929,83933,83937,83946,83958,83968,83978,83990,83994,84002,84010,84014,84022,84036,84044,84058,84086,84094,84102,84112,84116,84124,84132,84141,84149,84158,84168,84172,84176,84184,84192,84201,84209,84217,84230,84234,84238,84246,84254,84263,84271,84279,84294,84298,84302,84310,84318,84327,84335,84343,84357,84365,84369,84373,84378,84404,84409,84446,84451,84474,84479,84533,84538,84574,84578,84584,84589,84598,84612,84621,84640,84649,84659,84664,84669,84682,84687,84741,84767,84775,84783,84787],{"__ignoreMap":23},[102,83220,83221,83223,83225,83227],{"class":104,"line":105},[102,83222,51288],{"class":112},[102,83224,51292],{"class":51291},[102,83226,51295],{"class":1952},[102,83228,51298],{"class":112},[102,83230,83231,83233,83235,83237,83239,83241],{"class":104,"line":24},[102,83232,1023],{"class":112},[102,83234,50626],{"class":51291},[102,83236,51307],{"class":1952},[102,83238,158],{"class":112},[102,83240,51312],{"class":217},[102,83242,51298],{"class":112},[102,83244,83245],{"class":104,"line":1168},[102,83246,2389],{"emptyLinePlaceholder":30},[102,83248,83249,83251,83253],{"class":104,"line":1183},[102,83250,1023],{"class":112},[102,83252,51325],{"class":51291},[102,83254,51298],{"class":112},[102,83256,83257,83259,83261,83263,83265,83267],{"class":104,"line":1189},[102,83258,52135],{"class":112},[102,83260,51335],{"class":51291},[102,83262,51338],{"class":1952},[102,83264,158],{"class":112},[102,83266,51343],{"class":217},[102,83268,51298],{"class":112},[102,83270,83271,83273,83275,83277,83279,83281,83283,83285,83287],{"class":104,"line":1203},[102,83272,52135],{"class":112},[102,83274,51335],{"class":51291},[102,83276,14910],{"class":1952},[102,83278,158],{"class":112},[102,83280,51382],{"class":217},[102,83282,51362],{"class":1952},[102,83284,158],{"class":112},[102,83286,51389],{"class":217},[102,83288,51298],{"class":112},[102,83290,83291,83293,83295,83297,83299],{"class":104,"line":1209},[102,83292,52135],{"class":112},[102,83294,51398],{"class":51291},[102,83296,51401],{"class":112},[102,83298,51398],{"class":51291},[102,83300,51298],{"class":112},[102,83302,83303,83305,83307],{"class":104,"line":1300},[102,83304,52135],{"class":112},[102,83306,5116],{"class":51291},[102,83308,51298],{"class":112},[102,83310,83311,83313],{"class":104,"line":1306},[102,83312,6393],{"class":51291},[102,83314,15562],{"class":112},[102,83316,83317,83319,83321,83323],{"class":104,"line":1318},[102,83318,54686],{"class":161},[102,83320,51428],{"class":112},[102,83322,304],{"class":161},[102,83324,1279],{"class":112},[102,83326,83327,83329,83331,83333],{"class":104,"line":1601},[102,83328,54697],{"class":161},[102,83330,51428],{"class":112},[102,83332,304],{"class":161},[102,83334,1279],{"class":112},[102,83336,83337,83339,83341,83343],{"class":104,"line":1606},[102,83338,72587],{"class":161},[102,83340,51428],{"class":112},[102,83342,60496],{"class":161},[102,83344,1279],{"class":112},[102,83346,83347],{"class":104,"line":1612},[102,83348,2176],{"class":112},[102,83350,83351],{"class":104,"line":1617},[102,83352,2389],{"emptyLinePlaceholder":30},[102,83354,83355,83357],{"class":104,"line":1631},[102,83356,62114],{"class":1952},[102,83358,15562],{"class":112},[102,83360,83361,83363,83365,83367,83369],{"class":104,"line":1636},[102,83362,54762],{"class":161},[102,83364,51428],{"class":112},[102,83366,78565],{"class":161},[102,83368,51483],{"class":108},[102,83370,1279],{"class":112},[102,83372,83373,83375,83377,83379,83381,83383],{"class":104,"line":1642},[102,83374,54697],{"class":161},[102,83376,51428],{"class":112},[102,83378,424],{"class":161},[102,83380,51483],{"class":108},[102,83382,51547],{"class":161},[102,83384,1279],{"class":112},[102,83386,83387],{"class":104,"line":1663},[102,83388,2176],{"class":112},[102,83390,83391],{"class":104,"line":1668},[102,83392,2389],{"emptyLinePlaceholder":30},[102,83394,83395,83397],{"class":104,"line":1682},[102,83396,78616],{"class":1952},[102,83398,15562],{"class":112},[102,83400,83401,83403,83405,83407,83409],{"class":104,"line":1687},[102,83402,54686],{"class":161},[102,83404,51428],{"class":112},[102,83406,688],{"class":161},[102,83408,51483],{"class":108},[102,83410,1279],{"class":112},[102,83412,83413,83415,83417,83419,83421,83423,83425],{"class":104,"line":1716},[102,83414,61851],{"class":161},[102,83416,51428],{"class":112},[102,83418,28112],{"class":161},[102,83420,78671],{"class":161},[102,83422,78674],{"class":161},[102,83424,808],{"class":108},[102,83426,1279],{"class":112},[102,83428,83429,83431,83433,83435],{"class":104,"line":1721},[102,83430,55000],{"class":161},[102,83432,51428],{"class":112},[102,83434,51468],{"class":161},[102,83436,1279],{"class":112},[102,83438,83439,83441,83443,83445,83447,83449,83451],{"class":104,"line":1738},[102,83440,61968],{"class":161},[102,83442,51428],{"class":112},[102,83444,330],{"class":161},[102,83446,51483],{"class":108},[102,83448,51512],{"class":161},[102,83450,62235],{"class":161},[102,83452,1279],{"class":112},[102,83454,83455],{"class":104,"line":1743},[102,83456,2176],{"class":112},[102,83458,83459],{"class":104,"line":1748},[102,83460,2389],{"emptyLinePlaceholder":30},[102,83462,83463,83465],{"class":104,"line":1753},[102,83464,78734],{"class":1952},[102,83466,15562],{"class":112},[102,83468,83469,83471,83473,83475],{"class":104,"line":1767},[102,83470,62016],{"class":161},[102,83472,51428],{"class":112},[102,83474,62021],{"class":161},[102,83476,1279],{"class":112},[102,83478,83479,83481,83483,83485],{"class":104,"line":1772},[102,83480,54875],{"class":161},[102,83482,51428],{"class":112},[102,83484,61809],{"class":161},[102,83486,1279],{"class":112},[102,83488,83489],{"class":104,"line":2566},[102,83490,2176],{"class":112},[102,83492,83493],{"class":104,"line":2580},[102,83494,2389],{"emptyLinePlaceholder":30},[102,83496,83497,83499,83501],{"class":104,"line":2588},[102,83498,78616],{"class":1952},[102,83500,55606],{"class":51291},[102,83502,15562],{"class":112},[102,83504,83505,83507,83509,83511,83513],{"class":104,"line":2593},[102,83506,54762],{"class":161},[102,83508,51428],{"class":112},[102,83510,725],{"class":161},[102,83512,51483],{"class":108},[102,83514,1279],{"class":112},[102,83516,83517,83519,83521,83523,83525],{"class":104,"line":2599},[102,83518,54776],{"class":161},[102,83520,51428],{"class":112},[102,83522,725],{"class":161},[102,83524,51483],{"class":108},[102,83526,1279],{"class":112},[102,83528,83529,83531,83533,83535,83537],{"class":104,"line":2605},[102,83530,61741],{"class":161},[102,83532,51428],{"class":112},[102,83534,432],{"class":161},[102,83536,51483],{"class":108},[102,83538,1279],{"class":112},[102,83540,83541],{"class":104,"line":2610},[102,83542,2176],{"class":112},[102,83544,83545],{"class":104,"line":7938},[102,83546,2389],{"emptyLinePlaceholder":30},[102,83548,83549,83551,83553],{"class":104,"line":7962},[102,83550,78616],{"class":1952},[102,83552,62295],{"class":1952},[102,83554,15562],{"class":112},[102,83556,83557,83559,83561,83563,83565],{"class":104,"line":7967},[102,83558,54762],{"class":161},[102,83560,51428],{"class":112},[102,83562,1711],{"class":161},[102,83564,51483],{"class":108},[102,83566,1279],{"class":112},[102,83568,83569],{"class":104,"line":7973},[102,83570,2176],{"class":112},[102,83572,83573],{"class":104,"line":8000},[102,83574,2389],{"emptyLinePlaceholder":30},[102,83576,83577,83579,83581,83584],{"class":104,"line":8005},[102,83578,78616],{"class":1952},[102,83580,62295],{"class":1952},[102,83582,83583],{"class":1952}," .tag",[102,83585,15562],{"class":112},[102,83587,83588,83590,83592,83594],{"class":104,"line":8011},[102,83589,55000],{"class":161},[102,83591,51428],{"class":112},[102,83593,60860],{"class":161},[102,83595,1279],{"class":112},[102,83597,83598,83600,83602,83604,83606],{"class":104,"line":8023},[102,83599,54686],{"class":161},[102,83601,51428],{"class":112},[102,83603,190],{"class":161},[102,83605,51483],{"class":108},[102,83607,1279],{"class":112},[102,83609,83610,83612,83614,83616,83618],{"class":104,"line":8035},[102,83611,54913],{"class":161},[102,83613,51428],{"class":112},[102,83615,611],{"class":161},[102,83617,51483],{"class":108},[102,83619,1279],{"class":112},[102,83621,83622,83624,83626,83628],{"class":104,"line":8047},[102,83623,57407],{"class":161},[102,83625,51428],{"class":112},[102,83627,62061],{"class":161},[102,83629,1279],{"class":112},[102,83631,83632],{"class":104,"line":9706},[102,83633,2176],{"class":112},[102,83635,83636],{"class":104,"line":9731},[102,83637,2389],{"emptyLinePlaceholder":30},[102,83639,83640,83642,83644],{"class":104,"line":9754},[102,83641,78616],{"class":1952},[102,83643,78908],{"class":1952},[102,83645,31457],{"class":112},[102,83647,83648,83650,83653],{"class":104,"line":9778},[102,83649,78616],{"class":1952},[102,83651,83652],{"class":1952}," .sub-total",[102,83654,15562],{"class":112},[102,83656,83657,83659,83661,83663,83665],{"class":104,"line":9783},[102,83658,54913],{"class":161},[102,83660,51428],{"class":112},[102,83662,763],{"class":161},[102,83664,51483],{"class":108},[102,83666,1279],{"class":112},[102,83668,83669,83671,83673,83675],{"class":104,"line":9788},[102,83670,57407],{"class":161},[102,83672,51428],{"class":112},[102,83674,78931],{"class":161},[102,83676,1279],{"class":112},[102,83678,83679,83681,83683,83685],{"class":104,"line":9793},[102,83680,61828],{"class":161},[102,83682,51428],{"class":112},[102,83684,330],{"class":161},[102,83686,1279],{"class":112},[102,83688,83689],{"class":104,"line":9802},[102,83690,2176],{"class":112},[102,83692,83693],{"class":104,"line":9807},[102,83694,2389],{"emptyLinePlaceholder":30},[102,83696,83697,83699,83701],{"class":104,"line":9813},[102,83698,78616],{"class":1952},[102,83700,78948],{"class":1952},[102,83702,31457],{"class":112},[102,83704,83705,83707,83710],{"class":104,"line":9834},[102,83706,78616],{"class":1952},[102,83708,83709],{"class":1952}," .sub-total::before",[102,83711,31457],{"class":112},[102,83713,83714,83717],{"class":104,"line":9840},[102,83715,83716],{"class":1952},"    .amount::before",[102,83718,15562],{"class":112},[102,83720,83721,83723,83725,83727],{"class":104,"line":9854},[102,83722,78955],{"class":161},[102,83724,51428],{"class":112},[102,83726,78960],{"class":217},[102,83728,1279],{"class":112},[102,83730,83731,83733,83735,83737,83739],{"class":104,"line":9860},[102,83732,54913],{"class":161},[102,83734,51428],{"class":112},[102,83736,611],{"class":161},[102,83738,51483],{"class":108},[102,83740,1279],{"class":112},[102,83742,83743],{"class":104,"line":9887},[102,83744,2176],{"class":112},[102,83746,83747],{"class":104,"line":9896},[102,83748,2389],{"emptyLinePlaceholder":30},[102,83750,83751,83753,83756],{"class":104,"line":9902},[102,83752,78616],{"class":1952},[102,83754,83755],{"class":1952}," .spec",[102,83757,15562],{"class":112},[102,83759,83760,83762,83764,83766],{"class":104,"line":9910},[102,83761,61828],{"class":161},[102,83763,51428],{"class":112},[102,83765,190],{"class":161},[102,83767,1279],{"class":112},[102,83769,83770,83772,83774,83777],{"class":104,"line":9915},[102,83771,57407],{"class":161},[102,83773,51428],{"class":112},[102,83775,83776],{"class":161},"#888",[102,83778,1279],{"class":112},[102,83780,83781,83783,83785,83787,83789],{"class":104,"line":16594},[102,83782,54913],{"class":161},[102,83784,51428],{"class":112},[102,83786,662],{"class":161},[102,83788,51483],{"class":108},[102,83790,1279],{"class":112},[102,83792,83793,83795,83797,83799,83801],{"class":104,"line":16600},[102,83794,61991],{"class":161},[102,83796,51428],{"class":112},[102,83798,813],{"class":161},[102,83800,51483],{"class":108},[102,83802,1279],{"class":112},[102,83804,83805],{"class":104,"line":16623},[102,83806,2176],{"class":112},[102,83808,83809],{"class":104,"line":16629},[102,83810,2389],{"emptyLinePlaceholder":30},[102,83812,83813,83815,83818],{"class":104,"line":16652},[102,83814,78616],{"class":1952},[102,83816,83817],{"class":1952}," .count",[102,83819,15562],{"class":112},[102,83821,83822,83824,83826,83828],{"class":104,"line":16666},[102,83823,61828],{"class":161},[102,83825,51428],{"class":112},[102,83827,330],{"class":161},[102,83829,1279],{"class":112},[102,83831,83832,83834,83836,83839],{"class":104,"line":16686},[102,83833,57407],{"class":161},[102,83835,51428],{"class":112},[102,83837,83838],{"class":161},"#aaa",[102,83840,1279],{"class":112},[102,83842,83843],{"class":104,"line":16692},[102,83844,2176],{"class":112},[102,83846,83847],{"class":104,"line":16703},[102,83848,2389],{"emptyLinePlaceholder":30},[102,83850,83851,83853],{"class":104,"line":16726},[102,83852,72466],{"class":1952},[102,83854,15562],{"class":112},[102,83856,83857,83859,83861,83863,83865],{"class":104,"line":16748},[102,83858,54762],{"class":161},[102,83860,51428],{"class":112},[102,83862,78565],{"class":161},[102,83864,51483],{"class":108},[102,83866,1279],{"class":112},[102,83868,83869,83871,83873,83875,83877],{"class":104,"line":16753},[102,83870,54697],{"class":161},[102,83872,51428],{"class":112},[102,83874,304],{"class":161},[102,83876,51547],{"class":161},[102,83878,1279],{"class":112},[102,83880,83881,83883,83885,83887],{"class":104,"line":16759},[102,83882,55000],{"class":161},[102,83884,51428],{"class":112},[102,83886,51468],{"class":161},[102,83888,1279],{"class":112},[102,83890,83891,83893,83895,83897],{"class":104,"line":16773},[102,83892,55011],{"class":161},[102,83894,51428],{"class":112},[102,83896,51571],{"class":161},[102,83898,1279],{"class":112},[102,83900,83901,83904,83906,83908,83910,83912,83915],{"class":104,"line":16786},[102,83902,83903],{"class":161},"      border-top",[102,83905,51428],{"class":112},[102,83907,330],{"class":161},[102,83909,51483],{"class":108},[102,83911,51512],{"class":161},[102,83913,83914],{"class":161}," #4e4e4e",[102,83916,1279],{"class":112},[102,83918,83919,83921,83923,83925,83927],{"class":104,"line":16791},[102,83920,54686],{"class":161},[102,83922,51428],{"class":112},[102,83924,813],{"class":161},[102,83926,51483],{"class":108},[102,83928,1279],{"class":112},[102,83930,83931],{"class":104,"line":16805},[102,83932,2176],{"class":112},[102,83934,83935],{"class":104,"line":16810},[102,83936,2389],{"emptyLinePlaceholder":30},[102,83938,83939,83941,83944],{"class":104,"line":16816},[102,83940,72466],{"class":1952},[102,83942,83943],{"class":1952}," .amount",[102,83945,15562],{"class":112},[102,83947,83948,83950,83952,83954,83956],{"class":104,"line":16821},[102,83949,54913],{"class":161},[102,83951,51428],{"class":112},[102,83953,763],{"class":161},[102,83955,51483],{"class":108},[102,83957,1279],{"class":112},[102,83959,83960,83962,83964,83966],{"class":104,"line":16835},[102,83961,57407],{"class":161},[102,83963,51428],{"class":112},[102,83965,78931],{"class":161},[102,83967,1279],{"class":112},[102,83969,83970,83972,83974,83976],{"class":104,"line":16840},[102,83971,62325],{"class":161},[102,83973,51428],{"class":112},[102,83975,51480],{"class":161},[102,83977,1279],{"class":112},[102,83979,83980,83982,83984,83986,83988],{"class":104,"line":16845},[102,83981,61741],{"class":161},[102,83983,51428],{"class":112},[102,83985,769],{"class":161},[102,83987,51483],{"class":108},[102,83989,1279],{"class":112},[102,83991,83992],{"class":104,"line":16859},[102,83993,2176],{"class":112},[102,83995,83996,83998,84000],{"class":104,"line":16871},[102,83997,52408],{"class":112},[102,83999,5116],{"class":51291},[102,84001,51298],{"class":112},[102,84003,84004,84006,84008],{"class":104,"line":16876},[102,84005,51776],{"class":112},[102,84007,51325],{"class":51291},[102,84009,51298],{"class":112},[102,84011,84012],{"class":104,"line":16889},[102,84013,2389],{"emptyLinePlaceholder":30},[102,84015,84016,84018,84020],{"class":104,"line":16894},[102,84017,1023],{"class":112},[102,84019,51791],{"class":51291},[102,84021,51298],{"class":112},[102,84023,84024,84026,84028,84030,84032,84034],{"class":104,"line":16899},[102,84025,52135],{"class":112},[102,84027,51602],{"class":51291},[102,84029,53477],{"class":1952},[102,84031,158],{"class":112},[102,84033,62599],{"class":217},[102,84035,51298],{"class":112},[102,84037,84038,84040,84042],{"class":104,"line":16904},[102,84039,52408],{"class":112},[102,84041,51602],{"class":51291},[102,84043,51298],{"class":112},[102,84045,84046,84048,84050,84052,84054,84056],{"class":104,"line":16917},[102,84047,52135],{"class":112},[102,84049,51602],{"class":51291},[102,84051,53477],{"class":1952},[102,84053,158],{"class":112},[102,84055,62571],{"class":217},[102,84057,51298],{"class":112},[102,84059,84060,84062,84064,84067,84069,84071,84073,84076,84078,84080,84082,84084],{"class":104,"line":16922},[102,84061,51332],{"class":112},[102,84063,51602],{"class":51291},[102,84065,84066],{"class":112},">合计：\u003C",[102,84068,102],{"class":51291},[102,84070,53477],{"class":1952},[102,84072,158],{"class":112},[102,84074,84075],{"class":217},"\"amount\"",[102,84077,55305],{"class":112},[102,84079,102],{"class":51291},[102,84081,55305],{"class":112},[102,84083,51602],{"class":51291},[102,84085,51298],{"class":112},[102,84087,84088,84090,84092],{"class":104,"line":32624},[102,84089,52408],{"class":112},[102,84091,51602],{"class":51291},[102,84093,51298],{"class":112},[102,84095,84096,84098,84100],{"class":104,"line":32630},[102,84097,52135],{"class":112},[102,84099,51804],{"class":51291},[102,84101,51298],{"class":112},[102,84103,84104,84106,84108,84110],{"class":104,"line":32636},[102,84105,11211],{"class":108},[102,84107,79368],{"class":161},[102,84109,13554],{"class":108},[102,84111,55438],{"class":112},[102,84113,84114],{"class":104,"line":32642},[102,84115,79377],{"class":112},[102,84117,84118,84120,84122],{"class":104,"line":32648},[102,84119,79382],{"class":112},[102,84121,79385],{"class":217},[102,84123,31457],{"class":112},[102,84125,84126,84128,84130],{"class":104,"line":32659},[102,84127,79392],{"class":112},[102,84129,79395],{"class":217},[102,84131,31457],{"class":112},[102,84133,84134,84136,84139],{"class":104,"line":32665},[102,84135,79402],{"class":112},[102,84137,84138],{"class":161},"289.9",[102,84140,31457],{"class":112},[102,84142,84143,84145,84147],{"class":104,"line":32685},[102,84144,79412],{"class":112},[102,84146,79415],{"class":217},[102,84148,31457],{"class":112},[102,84150,84151,84154,84156],{"class":104,"line":32691},[102,84152,84153],{"class":112},"        count: ",[102,84155,190],{"class":161},[102,84157,31457],{"class":112},[102,84159,84160,84163,84166],{"class":104,"line":32702},[102,84161,84162],{"class":112},"        spec: { color: ",[102,84164,84165],{"class":217},"'白色'",[102,84167,55595],{"class":112},[102,84169,84170],{"class":104,"line":32708},[102,84171,77883],{"class":112},[102,84173,84174],{"class":104,"line":32714},[102,84175,79377],{"class":112},[102,84177,84178,84180,84182],{"class":104,"line":32720},[102,84179,79382],{"class":112},[102,84181,79476],{"class":217},[102,84183,31457],{"class":112},[102,84185,84186,84188,84190],{"class":104,"line":32726},[102,84187,79392],{"class":112},[102,84189,79485],{"class":217},[102,84191,31457],{"class":112},[102,84193,84194,84196,84199],{"class":104,"line":32732},[102,84195,79402],{"class":112},[102,84197,84198],{"class":161},"109.8",[102,84200,31457],{"class":112},[102,84202,84203,84205,84207],{"class":104,"line":32738},[102,84204,79412],{"class":112},[102,84206,79503],{"class":217},[102,84208,31457],{"class":112},[102,84210,84211,84213,84215],{"class":104,"line":32744},[102,84212,84153],{"class":112},[102,84214,184],{"class":161},[102,84216,31457],{"class":112},[102,84218,84219,84222,84224,84226,84228],{"class":104,"line":32764},[102,84220,84221],{"class":112},"        spec: { size: ",[102,84223,81894],{"class":217},[102,84225,55455],{"class":112},[102,84227,81899],{"class":217},[102,84229,55595],{"class":112},[102,84231,84232],{"class":104,"line":32770},[102,84233,77883],{"class":112},[102,84235,84236],{"class":104,"line":32786},[102,84237,79377],{"class":112},[102,84239,84240,84242,84244],{"class":104,"line":32792},[102,84241,79382],{"class":112},[102,84243,79520],{"class":217},[102,84245,31457],{"class":112},[102,84247,84248,84250,84252],{"class":104,"line":32806},[102,84249,79392],{"class":112},[102,84251,79529],{"class":217},[102,84253,31457],{"class":112},[102,84255,84256,84258,84261],{"class":104,"line":32812},[102,84257,79402],{"class":112},[102,84259,84260],{"class":161},"488",[102,84262,31457],{"class":112},[102,84264,84265,84267,84269],{"class":104,"line":32827},[102,84266,79412],{"class":112},[102,84268,79547],{"class":217},[102,84270,31457],{"class":112},[102,84272,84273,84275,84277],{"class":104,"line":32833},[102,84274,84153],{"class":112},[102,84276,330],{"class":161},[102,84278,31457],{"class":112},[102,84280,84281,84283,84286,84289,84292],{"class":104,"line":32842},[102,84282,84162],{"class":112},[102,84284,84285],{"class":217},"'青色'",[102,84287,84288],{"class":112},", sum: ",[102,84290,84291],{"class":217},"'一大四小'",[102,84293,55595],{"class":112},[102,84295,84296],{"class":104,"line":32848},[102,84297,77883],{"class":112},[102,84299,84300],{"class":104,"line":32857},[102,84301,79377],{"class":112},[102,84303,84304,84306,84308],{"class":104,"line":32863},[102,84305,79382],{"class":112},[102,84307,79564],{"class":217},[102,84309,31457],{"class":112},[102,84311,84312,84314,84316],{"class":104,"line":32869},[102,84313,79392],{"class":112},[102,84315,79573],{"class":217},[102,84317,31457],{"class":112},[102,84319,84320,84322,84325],{"class":104,"line":32878},[102,84321,79402],{"class":112},[102,84323,84324],{"class":161},"139",[102,84326,31457],{"class":112},[102,84328,84329,84331,84333],{"class":104,"line":32884},[102,84330,79412],{"class":112},[102,84332,79591],{"class":217},[102,84334,31457],{"class":112},[102,84336,84337,84339,84341],{"class":104,"line":32895},[102,84338,84153],{"class":112},[102,84340,330],{"class":161},[102,84342,31457],{"class":112},[102,84344,84345,84347,84350,84352,84355],{"class":104,"line":32901},[102,84346,84221],{"class":112},[102,84348,84349],{"class":217},"'小号'",[102,84351,55455],{"class":112},[102,84353,84354],{"class":217},"'紫色'",[102,84356,55461],{"class":112},[102,84358,84359,84362],{"class":104,"line":32920},[102,84360,84361],{"class":112},"        gift: ",[102,84363,84364],{"class":217},"'50g茶叶,清洗球'\n",[102,84366,84367],{"class":104,"line":32926},[102,84368,52389],{"class":112},[102,84370,84371],{"class":104,"line":32937},[102,84372,53100],{"class":112},[102,84374,84375],{"class":104,"line":32943},[102,84376,84377],{"class":171},"    \u002F\u002F  1.根据数据渲染页面\n",[102,84379,84380,84382,84384,84386,84388,84390,84392,84394,84396,84398,84400,84402],{"class":104,"line":32963},[102,84381,52398],{"class":112},[102,84383,54390],{"class":1952},[102,84385,113],{"class":112},[102,84387,79892],{"class":217},[102,84389,74240],{"class":112},[102,84391,158],{"class":108},[102,84393,80039],{"class":112},[102,84395,74035],{"class":1952},[102,84397,113],{"class":112},[102,84399,79786],{"class":5206},[102,84401,79789],{"class":108},[102,84403,15562],{"class":112},[102,84405,84406],{"class":104,"line":32979},[102,84407,84408],{"class":171},"      \u002F\u002F 对象解构\n",[102,84410,84411,84413,84415,84417,84419,84421,84423,84426,84428,84430,84432,84435,84437,84440,84442,84444],{"class":104,"line":32985},[102,84412,58219],{"class":108},[102,84414,79798],{"class":112},[102,84416,79811],{"class":161},[102,84418,12425],{"class":112},[102,84420,79801],{"class":161},[102,84422,12425],{"class":112},[102,84424,84425],{"class":161},"count",[102,84427,12425],{"class":112},[102,84429,79806],{"class":161},[102,84431,12425],{"class":112},[102,84433,84434],{"class":161},"spec",[102,84436,12425],{"class":112},[102,84438,84439],{"class":161},"gift",[102,84441,79814],{"class":112},[102,84443,158],{"class":108},[102,84445,79819],{"class":112},[102,84447,84448],{"class":104,"line":32999},[102,84449,84450],{"class":171},"      \u002F\u002F 规格文字模块处理\n",[102,84452,84453,84455,84458,84460,84462,84464,84466,84468,84470,84472],{"class":104,"line":33005},[102,84454,58219],{"class":108},[102,84456,84457],{"class":161}," text",[102,84459,13554],{"class":108},[102,84461,81929],{"class":112},[102,84463,81932],{"class":1952},[102,84465,81935],{"class":112},[102,84467,74214],{"class":1952},[102,84469,113],{"class":112},[102,84471,81942],{"class":217},[102,84473,119],{"class":112},[102,84475,84476],{"class":104,"line":33011},[102,84477,84478],{"class":171},"      \u002F\u002F 处理赠品模块\n",[102,84480,84481,84483,84485,84487,84490,84492,84494,84496,84498,84501,84503,84505,84507,84509,84511,84514,84516,84519,84521,84523,84525,84527,84529,84531],{"class":104,"line":33022},[102,84482,58219],{"class":108},[102,84484,73910],{"class":161},[102,84486,13554],{"class":108},[102,84488,84489],{"class":112}," gift ",[102,84491,1099],{"class":108},[102,84493,83103],{"class":112},[102,84495,83106],{"class":1952},[102,84497,113],{"class":112},[102,84499,84500],{"class":217},"','",[102,84502,30817],{"class":112},[102,84504,74035],{"class":1952},[102,84506,113],{"class":112},[102,84508,79786],{"class":5206},[102,84510,79789],{"class":108},[102,84512,84513],{"class":217}," `\u003Cspan class=\"tag\">【赠品】${",[102,84515,79786],{"class":112},[102,84517,84518],{"class":217},"}\u003C\u002Fspan>`",[102,84520,30817],{"class":112},[102,84522,74214],{"class":1952},[102,84524,113],{"class":112},[102,84526,74219],{"class":217},[102,84528,13704],{"class":112},[102,84530,972],{"class":108},[102,84532,70095],{"class":217},[102,84534,84535],{"class":104,"line":33028},[102,84536,84537],{"class":171},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[102,84539,84540,84542,84545,84547,84550,84552,84554,84556,84559,84561,84563,84565,84568,84570,84572],{"class":104,"line":33034},[102,84541,58219],{"class":108},[102,84543,84544],{"class":161}," subtotal",[102,84546,13554],{"class":108},[102,84548,84549],{"class":112}," ((price ",[102,84551,568],{"class":108},[102,84553,5744],{"class":161},[102,84555,6508],{"class":108},[102,84557,84558],{"class":112}," count) ",[102,84560,697],{"class":108},[102,84562,5744],{"class":161},[102,84564,30817],{"class":112},[102,84566,84567],{"class":1952},"toFixed",[102,84569,113],{"class":112},[102,84571,190],{"class":161},[102,84573,119],{"class":112},[102,84575,84576],{"class":104,"line":33044},[102,84577,2389],{"emptyLinePlaceholder":30},[102,84579,84580,84582],{"class":104,"line":33050},[102,84581,73973],{"class":108},[102,84583,70159],{"class":217},[102,84585,84586],{"class":104,"line":33061},[102,84587,84588],{"class":217},"        \u003Cdiv class=\"item\">\n",[102,84590,84591,84594,84596],{"class":104,"line":33067},[102,84592,84593],{"class":217},"          \u003Cimg src=\"${",[102,84595,79811],{"class":112},[102,84597,79843],{"class":217},[102,84599,84600,84603,84605,84608,84610],{"class":104,"line":33077},[102,84601,84602],{"class":217},"          \u003Cp class=\"name\">${",[102,84604,79801],{"class":112},[102,84606,84607],{"class":217},"}${",[102,84609,1288],{"class":112},[102,84611,79853],{"class":217},[102,84613,84614,84617,84619],{"class":104,"line":33082},[102,84615,84616],{"class":217},"          \u003Cp class=\"spec\">${",[102,84618,5177],{"class":112},[102,84620,79853],{"class":217},[102,84622,84623,84626,84628,84630,84632,84634,84636,84638],{"class":104,"line":33088},[102,84624,84625],{"class":217},"          \u003Cp class=\"price\">${",[102,84627,79806],{"class":112},[102,84629,671],{"class":217},[102,84631,84567],{"class":1952},[102,84633,113],{"class":217},[102,84635,190],{"class":161},[102,84637,542],{"class":217},[102,84639,79853],{"class":217},[102,84641,84642,84645,84647],{"class":104,"line":33137},[102,84643,84644],{"class":217},"          \u003Cp class=\"count\">x${",[102,84646,84425],{"class":112},[102,84648,79853],{"class":217},[102,84650,84651,84654,84657],{"class":104,"line":33184},[102,84652,84653],{"class":217},"          \u003Cp class=\"sub-total\">${",[102,84655,84656],{"class":112},"subtotal",[102,84658,79853],{"class":217},[102,84660,84661],{"class":104,"line":33189},[102,84662,84663],{"class":217},"        \u003C\u002Fdiv> \n",[102,84665,84666],{"class":104,"line":33195},[102,84667,84668],{"class":217},"             `\n",[102,84670,84671,84674,84676,84678,84680],{"class":104,"line":33214},[102,84672,84673],{"class":112},"    }).",[102,84675,74214],{"class":1952},[102,84677,113],{"class":112},[102,84679,74219],{"class":217},[102,84681,119],{"class":112},[102,84683,84684],{"class":104,"line":33220},[102,84685,84686],{"class":171},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[102,84688,84689,84691,84693,84695,84697,84700,84702,84705,84707,84709,84711,84714,84717,84719,84722,84724,84726,84728,84731,84733,84735,84737,84739],{"class":104,"line":33240},[102,84690,11211],{"class":108},[102,84692,62776],{"class":161},[102,84694,13554],{"class":108},[102,84696,80039],{"class":112},[102,84698,84699],{"class":1952},"reduce",[102,84701,2365],{"class":112},[102,84703,84704],{"class":5206},"prev",[102,84706,12425],{"class":112},[102,84708,79786],{"class":5206},[102,84710,13704],{"class":112},[102,84712,84713],{"class":108},"=>",[102,84715,84716],{"class":112}," prev ",[102,84718,594],{"class":108},[102,84720,84721],{"class":112}," (item.price ",[102,84723,568],{"class":108},[102,84725,5744],{"class":161},[102,84727,6508],{"class":108},[102,84729,84730],{"class":112}," item.count) ",[102,84732,697],{"class":108},[102,84734,5744],{"class":161},[102,84736,12425],{"class":112},[102,84738,304],{"class":161},[102,84740,119],{"class":112},[102,84742,84743,84745,84747,84749,84752,84754,84756,84759,84761,84763,84765],{"class":104,"line":33246},[102,84744,52398],{"class":112},[102,84746,54390],{"class":1952},[102,84748,113],{"class":112},[102,84750,84751],{"class":217},"'.amount'",[102,84753,74240],{"class":112},[102,84755,158],{"class":108},[102,84757,84758],{"class":112}," total.",[102,84760,84567],{"class":1952},[102,84762,113],{"class":112},[102,84764,190],{"class":161},[102,84766,119],{"class":112},[102,84768,84769,84771,84773],{"class":104,"line":33252},[102,84770,52408],{"class":112},[102,84772,51804],{"class":51291},[102,84774,51298],{"class":112},[102,84776,84777,84779,84781],{"class":104,"line":33262},[102,84778,51776],{"class":112},[102,84780,51791],{"class":51291},[102,84782,51298],{"class":112},[102,84784,84785],{"class":104,"line":33267},[102,84786,2389],{"emptyLinePlaceholder":30},[102,84788,84789,84791,84793],{"class":104,"line":33273},[102,84790,51776],{"class":112},[102,84792,50626],{"class":51291},[102,84794,51298],{"class":112},[14,84796,84798],{"id":84797},"_411-编程思想","4.11 编程思想",[73,84800,84802],{"id":84801},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,84804,84805,84808],{},[262,84806,84807],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,84810,84811],{},"调用就可以了",[19,84813,84814],{},[1451,84815],{"alt":23,"src":84816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[73,84818,84820],{"id":84819},"_4112-面向对象","4.11.2 面向对象",[19,84822,84823],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,84825,84826],{},[1451,84827],{"alt":23,"src":84828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,84830,84831],{},"面向对象的特性：",[1120,84833,84834,84837,84840],{},[59,84835,84836],{},"封装性",[59,84838,84839],{},"继承性",[59,84841,84842],{},"多态性",[73,84844,84846],{"id":84845},"_4113-两者比较","4.11.3 两者比较",[19,84848,84849],{},[1451,84850],{"alt":23,"src":84851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,84853,84855],{"id":84854},"_412-构造函数回顾","4.12 构造函数回顾",[19,84857,84858],{},[1451,84859],{"alt":23,"src":84860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,84862,84863],{},[1451,84864],{"alt":23,"src":84865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,84867,84868],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,84870,84871],{},[1451,84872],{"alt":23,"src":84873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,84875,84877],{"id":84876},"_413-原型","4.13 原型",[73,84879,84881],{"id":84880},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,84883,84884],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,84886,84887],{},[1451,84888],{"alt":23,"src":84889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,84891,84892],{},[1451,84893],{"alt":23,"src":84894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,84896,84897],{},"原型是构造函数的属性，它也是一个对象",[19,84899,84900],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,84902,84903],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[93,84905,84907],{"className":53058,"code":84906,"language":53060,"meta":23,"style":23},"\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",[99,84908,84909,84917,84922,84930,84935,84940,84945,84950,84955,84959,84963,84967,84972,84977,84981,84986,84991,84996,85001,85006,85010,85018],{"__ignoreMap":23},[102,84910,84911,84913,84915],{"class":104,"line":105},[102,84912,1023],{"class":112},[102,84914,51791],{"class":51291},[102,84916,51298],{"class":112},[102,84918,84919],{"class":104,"line":24},[102,84920,84921],{"class":171},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[102,84923,84924,84926,84928],{"class":104,"line":1168},[102,84925,52135],{"class":112},[102,84927,51804],{"class":51291},[102,84929,51298],{"class":112},[102,84931,84932],{"class":104,"line":1183},[102,84933,84934],{"class":112},"    function Star(uname, age) {\n",[102,84936,84937],{"class":104,"line":1189},[102,84938,84939],{"class":112},"      this.uname = uname,\n",[102,84941,84942],{"class":104,"line":1203},[102,84943,84944],{"class":112},"        this.age = age\n",[102,84946,84947],{"class":104,"line":1209},[102,84948,84949],{"class":112},"      \u002F\u002F this.sing = function () {\n",[102,84951,84952],{"class":104,"line":1300},[102,84953,84954],{"class":112},"      \u002F\u002F   console.log('唱歌')\n",[102,84956,84957],{"class":104,"line":1306},[102,84958,2389],{"emptyLinePlaceholder":30},[102,84960,84961],{"class":104,"line":1318},[102,84962,60028],{"class":112},[102,84964,84965],{"class":104,"line":1601},[102,84966,2176],{"class":112},[102,84968,84969],{"class":104,"line":1606},[102,84970,84971],{"class":112},"    Star.prototype.sing = function () {\n",[102,84973,84974],{"class":104,"line":1612},[102,84975,84976],{"class":112},"      console.log('唱歌')\n",[102,84978,84979],{"class":104,"line":1617},[102,84980,2176],{"class":112},[102,84982,84983],{"class":104,"line":1631},[102,84984,84985],{"class":112},"    \u002F\u002F console.dir(Star.prototype)\n",[102,84987,84988],{"class":104,"line":1636},[102,84989,84990],{"class":112},"    const pink = new Star('pink', 18)\n",[102,84992,84993],{"class":104,"line":1642},[102,84994,84995],{"class":112},"    const red = new Star('red', 20)\n",[102,84997,84998],{"class":104,"line":1663},[102,84999,85000],{"class":112},"    pink.sing()\n",[102,85002,85003],{"class":104,"line":1668},[102,85004,85005],{"class":112},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[102,85007,85008],{"class":104,"line":1682},[102,85009,2389],{"emptyLinePlaceholder":30},[102,85011,85012,85014,85016],{"class":104,"line":1687},[102,85013,52408],{"class":112},[102,85015,51804],{"class":51291},[102,85017,51298],{"class":112},[102,85019,85020,85022,85024],{"class":104,"line":1716},[102,85021,51776],{"class":112},[102,85023,51791],{"class":51291},[102,85025,51298],{"class":112},[19,85027,85028],{},[1451,85029],{"alt":23,"src":85030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[93,85032,85034],{"className":53058,"code":85033,"language":53060,"meta":23,"style":23},"\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",[99,85035,85036,85044,85052,85057,85062,85067,85072,85076,85081,85086,85091,85095,85100,85104,85108,85113,85117,85125],{"__ignoreMap":23},[102,85037,85038,85040,85042],{"class":104,"line":105},[102,85039,1023],{"class":112},[102,85041,51791],{"class":51291},[102,85043,51298],{"class":112},[102,85045,85046,85048,85050],{"class":104,"line":24},[102,85047,52135],{"class":112},[102,85049,51804],{"class":51291},[102,85051,51298],{"class":112},[102,85053,85054],{"class":104,"line":1168},[102,85055,85056],{"class":112},"    let that\n",[102,85058,85059],{"class":104,"line":1183},[102,85060,85061],{"class":112},"    function Star(uname) {\n",[102,85063,85064],{"class":104,"line":1189},[102,85065,85066],{"class":112},"      this.uname = uname\n",[102,85068,85069],{"class":104,"line":1203},[102,85070,85071],{"class":112},"      that = this\n",[102,85073,85074],{"class":104,"line":1209},[102,85075,2176],{"class":112},[102,85077,85078],{"class":104,"line":1300},[102,85079,85080],{"class":112},"    \u002F\u002F 实例对象是 ldh\n",[102,85082,85083],{"class":104,"line":1306},[102,85084,85085],{"class":112},"    const ldh = new Star('刘德华')\n",[102,85087,85088],{"class":104,"line":1318},[102,85089,85090],{"class":112},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[102,85092,85093],{"class":104,"line":1601},[102,85094,2389],{"emptyLinePlaceholder":30},[102,85096,85097],{"class":104,"line":1606},[102,85098,85099],{"class":112},"    Star.sing = function () {\n",[102,85101,85102],{"class":104,"line":1612},[102,85103,84976],{"class":112},[102,85105,85106],{"class":104,"line":1617},[102,85107,2176],{"class":112},[102,85109,85110],{"class":104,"line":1631},[102,85111,85112],{"class":112},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[102,85114,85115],{"class":104,"line":1636},[102,85116,2389],{"emptyLinePlaceholder":30},[102,85118,85119,85121,85123],{"class":104,"line":1642},[102,85120,52408],{"class":112},[102,85122,51804],{"class":51291},[102,85124,51298],{"class":112},[102,85126,85127,85129,85131],{"class":104,"line":1663},[102,85128,51776],{"class":112},[102,85130,51791],{"class":51291},[102,85132,51298],{"class":112},[19,85134,85135],{},"构造函数的this指向的是实例对象；",[19,85137,85138],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[73,85140,85142],{"id":85141},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85144,85145],{},[1451,85146],{"alt":23,"src":85147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[93,85149,85151],{"className":53058,"code":85150,"language":53060,"meta":23,"style":23},"\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",[99,85152,85153,85161,85169,85174,85179,85184,85189,85194,85199,85204,85209,85214,85219,85223,85228,85233,85238,85243,85247,85252,85257,85262,85267,85271,85276,85281,85286,85291,85295,85300,85304,85312],{"__ignoreMap":23},[102,85154,85155,85157,85159],{"class":104,"line":105},[102,85156,1023],{"class":112},[102,85158,51791],{"class":51291},[102,85160,51298],{"class":112},[102,85162,85163,85165,85167],{"class":104,"line":24},[102,85164,52135],{"class":112},[102,85166,51804],{"class":51291},[102,85168,51298],{"class":112},[102,85170,85171],{"class":104,"line":1168},[102,85172,85173],{"class":112},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[102,85175,85176],{"class":104,"line":1183},[102,85177,85178],{"class":112},"    const arr = [1, 2, 3]\n",[102,85180,85181],{"class":104,"line":1189},[102,85182,85183],{"class":112},"    \u002F\u002F 自己定义数组的扩展方法\n",[102,85185,85186],{"class":104,"line":1203},[102,85187,85188],{"class":112},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[102,85190,85191],{"class":104,"line":1209},[102,85192,85193],{"class":112},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[102,85195,85196],{"class":104,"line":1300},[102,85197,85198],{"class":112},"    \u002F\u002F ①.最大值\n",[102,85200,85201],{"class":104,"line":1306},[102,85202,85203],{"class":112},"    Array.prototype.max = function () {\n",[102,85205,85206],{"class":104,"line":1318},[102,85207,85208],{"class":112},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[102,85210,85211],{"class":104,"line":1601},[102,85212,85213],{"class":112},"      return Math.max(...this)\n",[102,85215,85216],{"class":104,"line":1606},[102,85217,85218],{"class":112},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[102,85220,85221],{"class":104,"line":1612},[102,85222,2176],{"class":112},[102,85224,85225],{"class":104,"line":1617},[102,85226,85227],{"class":112},"    console.log(arr.max())\n",[102,85229,85230],{"class":104,"line":1631},[102,85231,85232],{"class":112},"    \u002F\u002F ②最小值\n",[102,85234,85235],{"class":104,"line":1636},[102,85236,85237],{"class":112},"    Array.prototype.min = function () {\n",[102,85239,85240],{"class":104,"line":1642},[102,85241,85242],{"class":112},"      return Math.min(...this)\n",[102,85244,85245],{"class":104,"line":1663},[102,85246,2176],{"class":112},[102,85248,85249],{"class":104,"line":1668},[102,85250,85251],{"class":112},"    console.log(arr.min())\n",[102,85253,85254],{"class":104,"line":1682},[102,85255,85256],{"class":112},"    \u002F\u002F③求和\n",[102,85258,85259],{"class":104,"line":1687},[102,85260,85261],{"class":112},"    Array.prototype.sum = function () {\n",[102,85263,85264],{"class":104,"line":1716},[102,85265,85266],{"class":112},"      return this.reduce((prev, current) => prev + current, 0)\n",[102,85268,85269],{"class":104,"line":1721},[102,85270,2176],{"class":112},[102,85272,85273],{"class":104,"line":1738},[102,85274,85275],{"class":112},"    console.log(arr.sum())\n",[102,85277,85278],{"class":104,"line":1743},[102,85279,85280],{"class":112},"    \u002F\u002F ③排序\n",[102,85282,85283],{"class":104,"line":1748},[102,85284,85285],{"class":112},"    Array.prototype.rever = function () {\n",[102,85287,85288],{"class":104,"line":1753},[102,85289,85290],{"class":112},"      return this.reverse()\n",[102,85292,85293],{"class":104,"line":1767},[102,85294,2176],{"class":112},[102,85296,85297],{"class":104,"line":1772},[102,85298,85299],{"class":112},"    console.log(arr.rever())\n",[102,85301,85302],{"class":104,"line":2566},[102,85303,2389],{"emptyLinePlaceholder":30},[102,85305,85306,85308,85310],{"class":104,"line":2580},[102,85307,52408],{"class":112},[102,85309,51804],{"class":51291},[102,85311,51298],{"class":112},[102,85313,85314,85316,85318],{"class":104,"line":2588},[102,85315,51776],{"class":112},[102,85317,51791],{"class":51291},[102,85319,51298],{"class":112},[19,85321,85322],{},[1451,85323],{"alt":23,"src":85324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[73,85326,85328],{"id":85327},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85330,85331],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85333,85334],{},[1451,85335],{"alt":23,"src":85336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[93,85338,85340],{"className":53058,"code":85339,"language":53060,"meta":23,"style":23},"\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",[99,85341,85342,85350,85358,85363,85368,85372,85377,85382,85387,85395],{"__ignoreMap":23},[102,85343,85344,85346,85348],{"class":104,"line":105},[102,85345,1023],{"class":112},[102,85347,51791],{"class":51291},[102,85349,51298],{"class":112},[102,85351,85352,85354,85356],{"class":104,"line":24},[102,85353,52135],{"class":112},[102,85355,51804],{"class":51291},[102,85357,51298],{"class":112},[102,85359,85360],{"class":104,"line":1168},[102,85361,85362],{"class":112},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[102,85364,85365],{"class":104,"line":1183},[102,85366,85367],{"class":112},"    function Star() {\n",[102,85369,85370],{"class":104,"line":1189},[102,85371,2176],{"class":112},[102,85373,85374],{"class":104,"line":1203},[102,85375,85376],{"class":112},"    const ldh = new Star()\n",[102,85378,85379],{"class":104,"line":1209},[102,85380,85381],{"class":112},"    console.log(Star.prototype)\n",[102,85383,85384],{"class":104,"line":1300},[102,85385,85386],{"class":112},"    console.log(Star.prototype.constructor === Star)\n",[102,85388,85389,85391,85393],{"class":104,"line":1306},[102,85390,52408],{"class":112},[102,85392,51804],{"class":51291},[102,85394,51298],{"class":112},[102,85396,85397,85399,85401],{"class":104,"line":1318},[102,85398,51776],{"class":112},[102,85400,51791],{"class":51291},[102,85402,51298],{"class":112},[19,85404,85405],{},[1451,85406],{"alt":23,"src":85407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85409,85410],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[93,85412,85414],{"className":53058,"code":85413,"language":53060,"meta":23,"style":23},"  \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",[99,85415,85416,85424,85428,85432,85436,85441,85446,85451,85455,85460,85465,85470,85475,85480,85485,85489,85493,85498,85503,85508,85512,85517,85522,85526,85530,85534],{"__ignoreMap":23},[102,85417,85418,85420,85422],{"class":104,"line":105},[102,85419,52135],{"class":112},[102,85421,51804],{"class":51291},[102,85423,51298],{"class":112},[102,85425,85426],{"class":104,"line":24},[102,85427,85362],{"class":112},[102,85429,85430],{"class":104,"line":1168},[102,85431,85367],{"class":112},[102,85433,85434],{"class":104,"line":1183},[102,85435,2176],{"class":112},[102,85437,85438],{"class":104,"line":1189},[102,85439,85440],{"class":112},"    \u002F\u002F const ldh = new Star()\n",[102,85442,85443],{"class":104,"line":1203},[102,85444,85445],{"class":112},"    \u002F\u002F console.log(Star.prototype)\n",[102,85447,85448],{"class":104,"line":1209},[102,85449,85450],{"class":112},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[102,85452,85453],{"class":104,"line":1300},[102,85454,2389],{"emptyLinePlaceholder":30},[102,85456,85457],{"class":104,"line":1306},[102,85458,85459],{"class":112},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[102,85461,85462],{"class":104,"line":1318},[102,85463,85464],{"class":112},"    \u002F\u002F Star.prototype.sing = function () {\n",[102,85466,85467],{"class":104,"line":1601},[102,85468,85469],{"class":112},"    \u002F\u002F   console.log('唱歌')\n",[102,85471,85472],{"class":104,"line":1606},[102,85473,85474],{"class":112},"    \u002F\u002F }\n",[102,85476,85477],{"class":104,"line":1612},[102,85478,85479],{"class":112},"    \u002F\u002F Star.prototype.dance = function () {\n",[102,85481,85482],{"class":104,"line":1617},[102,85483,85484],{"class":112},"    \u002F\u002F   console.log('跳舞')\n",[102,85486,85487],{"class":104,"line":1631},[102,85488,85474],{"class":112},[102,85490,85491],{"class":104,"line":1636},[102,85492,85381],{"class":112},[102,85494,85495],{"class":104,"line":1642},[102,85496,85497],{"class":112},"    Star.prototype = {\n",[102,85499,85500],{"class":104,"line":1663},[102,85501,85502],{"class":112},"      sing: function () {\n",[102,85504,85505],{"class":104,"line":1668},[102,85506,85507],{"class":112},"        console.log('唱歌')\n",[102,85509,85510],{"class":104,"line":1682},[102,85511,77883],{"class":112},[102,85513,85514],{"class":104,"line":1687},[102,85515,85516],{"class":112},"      dance: function () {\n",[102,85518,85519],{"class":104,"line":1716},[102,85520,85521],{"class":112},"        console.log('跳舞')\n",[102,85523,85524],{"class":104,"line":1721},[102,85525,52389],{"class":112},[102,85527,85528],{"class":104,"line":1738},[102,85529,2176],{"class":112},[102,85531,85532],{"class":104,"line":1743},[102,85533,85381],{"class":112},[102,85535,85536,85538,85540],{"class":104,"line":1748},[102,85537,52408],{"class":112},[102,85539,51804],{"class":51291},[102,85541,51298],{"class":112},[19,85543,85544],{},"进行输出结果后会发现：",[19,85546,85547],{},[1451,85548],{"alt":23,"src":85549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85551,85552],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85554,85555],{},"所以，要重新指回创造这个原型对象的构造函数",[93,85557,85559],{"className":71204,"code":85558,"language":71206,"meta":23,"style":23},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[99,85560,85561,85575,85580,85585,85596,85609,85614,85625,85639,85643],{"__ignoreMap":23},[102,85562,85563,85566,85568,85571,85573],{"class":104,"line":105},[102,85564,85565],{"class":161},"Star",[102,85567,671],{"class":112},[102,85569,85570],{"class":161},"prototype",[102,85572,13554],{"class":108},[102,85574,15562],{"class":112},[102,85576,85577],{"class":104,"line":24},[102,85578,85579],{"class":171},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[102,85581,85582],{"class":104,"line":1168},[102,85583,85584],{"class":112},"  constructor: Star,\n",[102,85586,85587,85590,85592,85594],{"class":104,"line":1183},[102,85588,85589],{"class":1952},"  sing",[102,85591,51428],{"class":112},[102,85593,54440],{"class":108},[102,85595,54443],{"class":112},[102,85597,85598,85600,85602,85604,85607],{"class":104,"line":1189},[102,85599,73744],{"class":112},[102,85601,58238],{"class":1952},[102,85603,113],{"class":112},[102,85605,85606],{"class":217},"'唱歌'",[102,85608,119],{"class":112},[102,85610,85611],{"class":104,"line":1203},[102,85612,85613],{"class":112},"   },\n",[102,85615,85616,85619,85621,85623],{"class":104,"line":1209},[102,85617,85618],{"class":1952},"   dance",[102,85620,51428],{"class":112},[102,85622,54440],{"class":108},[102,85624,54443],{"class":112},[102,85626,85627,85630,85632,85634,85637],{"class":104,"line":1300},[102,85628,85629],{"class":112},"     console.",[102,85631,58238],{"class":1952},[102,85633,113],{"class":112},[102,85635,85636],{"class":217},"'跳舞'",[102,85638,119],{"class":112},[102,85640,85641],{"class":104,"line":1306},[102,85642,4298],{"class":112},[102,85644,85645],{"class":104,"line":1318},[102,85646,1554],{"class":112},[19,85648,85649],{},[1451,85650],{"alt":23,"src":85651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85653,85654],{},"总结1：",[19,85656,85657],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85659,85660],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85662,85663],{},"constructor指的是他的来源",[19,85665,85666],{},[1451,85667],{"alt":23,"src":85668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85670,85671],{},[1451,85672],{"alt":23,"src":85673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85675,85676],{},"总结2：",[19,85678,85679],{},[1451,85680],{"alt":23,"src":85681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85683,85684],{},[1451,85685],{"alt":23,"src":85686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85688,85689],{},[1451,85690],{"alt":23,"src":85691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[73,85693,85695],{"id":85694},"_4134-对象原型","4.13.4 对象原型",[19,85697,85698],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85700,85701],{},"对象原型就是__proto__这个属性",[19,85703,85704],{},[1451,85705],{"alt":23,"src":85706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85708,85709],{},[1451,85710],{"alt":23,"src":85711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85713,85714],{},[1451,85715],{"alt":23,"src":85716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85718,85719],{},[1451,85720],{"alt":23,"src":85721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[93,85723,85725],{"className":53058,"code":85724,"language":53060,"meta":23,"style":23},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[99,85726,85727,85735,85743,85747,85751,85755,85760,85768],{"__ignoreMap":23},[102,85728,85729,85731,85733],{"class":104,"line":105},[102,85730,1023],{"class":112},[102,85732,51791],{"class":51291},[102,85734,51298],{"class":112},[102,85736,85737,85739,85741],{"class":104,"line":24},[102,85738,52135],{"class":112},[102,85740,51804],{"class":51291},[102,85742,51298],{"class":112},[102,85744,85745],{"class":104,"line":1168},[102,85746,85367],{"class":112},[102,85748,85749],{"class":104,"line":1183},[102,85750,2176],{"class":112},[102,85752,85753],{"class":104,"line":1189},[102,85754,85376],{"class":112},[102,85756,85757],{"class":104,"line":1203},[102,85758,85759],{"class":112},"    console.log(ldh)\n",[102,85761,85762,85764,85766],{"class":104,"line":1209},[102,85763,52408],{"class":112},[102,85765,51804],{"class":51291},[102,85767,51298],{"class":112},[102,85769,85770,85772,85774],{"class":104,"line":1300},[102,85771,51776],{"class":112},[102,85773,51791],{"class":51291},[102,85775,51298],{"class":112},[19,85777,85778],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,85780,85781],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,85783,85784],{},[1451,85785],{"alt":23,"src":85786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,85788,85789],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,85791,85792],{},"对象原型指向原型对象",[19,85794,85795],{},[1451,85796],{"alt":23,"src":85797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,85799,85800],{},[1451,85801],{"alt":23,"src":85802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,85804,85805],{},[1451,85806],{"alt":23,"src":85807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[73,85809,85811],{"id":85810},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,85813,85814],{},[1451,85815],{"alt":23,"src":85816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[56,85818,85819,85822,85825,85828],{},[59,85820,85821],{},"构造函数通过new的形式实例化得到实例对象",[59,85823,85824],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[59,85826,85827],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[59,85829,85830],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,85832,85833],{},[1451,85834],{"alt":23,"src":85835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,85837,85838],{},"题目梳理：",[19,85840,85841],{},[1451,85842],{"alt":23,"src":85843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[73,85845,85847],{"id":85846},"_4136-原型继承","4.13.6 原型继承",[19,85849,85850],{},[1451,85851],{"alt":23,"src":85852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,85854,85855],{},[1451,85856],{"alt":23,"src":85857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,85859,85860],{},[1451,85861],{"alt":23,"src":85862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,85864,85865],{},[1451,85866],{"alt":23,"src":85867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,85869,85870],{},[1451,85871],{"alt":23,"src":85872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,85874,85875],{},[1451,85876],{"alt":23,"src":85877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,85879,85880],{},[1451,85881],{"alt":23,"src":85882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,85884,85885],{},[1451,85886],{"alt":23,"src":85887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,85889,85890],{},"回顾：构造函数每次new得到对象都是不同的",[73,85892,85894],{"id":85893},"_4137-原型链","4.13.7 原型链",[19,85896,85897],{},[1451,85898],{"alt":23,"src":85899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,85901,85902],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,85904,85905],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,85907,85908],{},"大哥是Object",[19,85910,85911],{},[1451,85912],{"alt":23,"src":85913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,85915,85916],{},[1451,85917],{"alt":23,"src":85918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,85920,85921],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,85923,85924],{},"万物皆对象",[73,85926,85928],{"id":85927},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,85930,85931],{},"模态框",[19,85933,85934],{},"以后遇见这个效果直接使用这个就行",[19,85936,85937],{},[1451,85938],{"alt":23,"src":85939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,85941,85942],{},[1451,85943],{"alt":23,"src":85944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,85946,85947],{},[1451,85948],{"alt":23,"src":85949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,85951,85952],{},[1451,85953],{"alt":23,"src":85954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,85956,85957],{},"补充知识点：",[56,85959,85960],{},[59,85961,85962],{},"append()",[19,85964,85965],{},[1451,85966],{"alt":23,"src":85967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[93,85969,85971],{"className":50624,"code":85970,"language":50626,"meta":23,"style":23},"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",[99,85972,85973,85978,85983,85988,85992,85996,86000,86005,86010,86015,86019],{"__ignoreMap":23},[102,85974,85975],{"class":104,"line":105},[102,85976,85977],{"class":112},"append(param1)\n",[102,85979,85980],{"class":104,"line":24},[102,85981,85982],{"class":112},"append(param1, param2)\n",[102,85984,85985],{"class":104,"line":1168},[102,85986,85987],{"class":112},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[102,85989,85990],{"class":104,"line":1183},[102,85991,2389],{"emptyLinePlaceholder":30},[102,85993,85994],{"class":104,"line":1189},[102,85995,2389],{"emptyLinePlaceholder":30},[102,85997,85998],{"class":104,"line":1203},[102,85999,2389],{"emptyLinePlaceholder":30},[102,86001,86002],{"class":104,"line":1209},[102,86003,86004],{"class":112},"let div = document.createElement(\"div\");\n",[102,86006,86007],{"class":104,"line":1300},[102,86008,86009],{"class":112},"let p = document.createElement(\"p\");\n",[102,86011,86012],{"class":104,"line":1306},[102,86013,86014],{"class":112},"div.append(p);\n",[102,86016,86017],{"class":104,"line":1318},[102,86018,2389],{"emptyLinePlaceholder":30},[102,86020,86021,86024,86026],{"class":104,"line":1601},[102,86022,86023],{"class":112},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[102,86025,19],{"class":51291},[102,86027,86028],{"class":112},"> ]\n",[56,86030,86031],{"start":24},[59,86032,86033],{},"remove()",[19,86035,86036],{},"自己删自己",[19,86038,86039],{},[1451,86040],{"alt":23,"src":86041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[93,86043,86045],{"className":50624,"code":86044,"language":50626,"meta":23,"style":23},"\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",[99,86046,86047,86057,86071,86075,86083,86097,86117,86129,86137,86144,86156,86169,86204,86216,86227,86239,86251,86263,86290,86300,86304,86308,86317,86329,86343,86353,86365,86369,86373,86383,86394,86404,86414,86427,86440,86450,86454,86458,86467,86477,86489,86493,86497,86506,86516,86526,86538,86542,86546,86556,86572,86583,86593,86603,86615,86627,86639,86643,86647,86660,86671,86675,86683,86691,86695,86703,86723,86743,86751,86756,86782,86787,86792,86811,86816,86828,86833,86844,86854,86864,86869,86874,86878,86883,86888,86893,86913,86918,86938,86943,86957,86962,86967,86972,86988,86992,86997,87026,87031,87036,87041,87052,87056,87060,87064,87069,87094,87099,87124,87129,87138,87142,87147,87172,87176,87201,87205,87214,87218,87223,87241,87251,87255,87263,87271,87275],{"__ignoreMap":23},[102,86048,86049,86051,86053,86055],{"class":104,"line":105},[102,86050,51288],{"class":112},[102,86052,51292],{"class":51291},[102,86054,51295],{"class":1952},[102,86056,51298],{"class":112},[102,86058,86059,86061,86063,86065,86067,86069],{"class":104,"line":24},[102,86060,1023],{"class":112},[102,86062,50626],{"class":51291},[102,86064,51307],{"class":1952},[102,86066,158],{"class":112},[102,86068,51312],{"class":217},[102,86070,51298],{"class":112},[102,86072,86073],{"class":104,"line":1168},[102,86074,2389],{"emptyLinePlaceholder":30},[102,86076,86077,86079,86081],{"class":104,"line":1183},[102,86078,1023],{"class":112},[102,86080,51325],{"class":51291},[102,86082,51298],{"class":112},[102,86084,86085,86087,86089,86091,86093,86095],{"class":104,"line":1189},[102,86086,52135],{"class":112},[102,86088,51335],{"class":51291},[102,86090,51338],{"class":1952},[102,86092,158],{"class":112},[102,86094,51343],{"class":217},[102,86096,51298],{"class":112},[102,86098,86099,86101,86103,86105,86107,86109,86111,86113,86115],{"class":104,"line":1203},[102,86100,52135],{"class":112},[102,86102,51335],{"class":51291},[102,86104,14910],{"class":1952},[102,86106,158],{"class":112},[102,86108,51382],{"class":217},[102,86110,51362],{"class":1952},[102,86112,158],{"class":112},[102,86114,51389],{"class":217},[102,86116,51298],{"class":112},[102,86118,86119,86121,86123,86125,86127],{"class":104,"line":1209},[102,86120,52135],{"class":112},[102,86122,51398],{"class":51291},[102,86124,51401],{"class":112},[102,86126,51398],{"class":51291},[102,86128,51298],{"class":112},[102,86130,86131,86133,86135],{"class":104,"line":1300},[102,86132,52135],{"class":112},[102,86134,5116],{"class":51291},[102,86136,51298],{"class":112},[102,86138,86139,86142],{"class":104,"line":1306},[102,86140,86141],{"class":1952},"    .modal",[102,86143,15562],{"class":112},[102,86145,86146,86148,86150,86152,86154],{"class":104,"line":1318},[102,86147,54762],{"class":161},[102,86149,51428],{"class":112},[102,86151,3962],{"class":161},[102,86153,51483],{"class":108},[102,86155,1279],{"class":112},[102,86157,86158,86161,86163,86165,86167],{"class":104,"line":1601},[102,86159,86160],{"class":161},"      min-height",[102,86162,51428],{"class":112},[102,86164,424],{"class":161},[102,86166,51483],{"class":108},[102,86168,1279],{"class":112},[102,86170,86171,86173,86175,86177,86179,86181,86183,86185,86187,86189,86191,86193,86195,86197,86199,86202],{"class":104,"line":1606},[102,86172,78741],{"class":161},[102,86174,51428],{"class":112},[102,86176,304],{"class":161},[102,86178,4082],{"class":161},[102,86180,2027],{"class":161},[102,86182,51483],{"class":108},[102,86184,78758],{"class":161},[102,86186,113],{"class":112},[102,86188,304],{"class":161},[102,86190,12425],{"class":112},[102,86192,304],{"class":161},[102,86194,12425],{"class":112},[102,86196,304],{"class":161},[102,86198,12425],{"class":112},[102,86200,86201],{"class":161},"0.1",[102,86203,2708],{"class":112},[102,86205,86206,86208,86210,86212,86214],{"class":104,"line":1612},[102,86207,55125],{"class":161},[102,86209,51428],{"class":112},[102,86211,406],{"class":161},[102,86213,51483],{"class":108},[102,86215,1279],{"class":112},[102,86217,86218,86220,86222,86225],{"class":104,"line":1617},[102,86219,54750],{"class":161},[102,86221,51428],{"class":112},[102,86223,86224],{"class":161},"fixed",[102,86226,1279],{"class":112},[102,86228,86229,86232,86234,86237],{"class":104,"line":1631},[102,86230,86231],{"class":161},"      z-index",[102,86233,51428],{"class":112},[102,86235,86236],{"class":161},"999",[102,86238,1279],{"class":112},[102,86240,86241,86243,86245,86247,86249],{"class":104,"line":1636},[102,86242,54829],{"class":161},[102,86244,51428],{"class":112},[102,86246,769],{"class":161},[102,86248,441],{"class":108},[102,86250,1279],{"class":112},[102,86252,86253,86255,86257,86259,86261],{"class":104,"line":1642},[102,86254,54938],{"class":161},[102,86256,51428],{"class":112},[102,86258,769],{"class":161},[102,86260,441],{"class":108},[102,86262,1279],{"class":112},[102,86264,86265,86267,86269,86271,86273,86276,86278,86280,86282,86284,86286,86288],{"class":104,"line":1663},[102,86266,78782],{"class":161},[102,86268,51428],{"class":112},[102,86270,78787],{"class":161},[102,86272,113],{"class":112},[102,86274,86275],{"class":161},"-50",[102,86277,441],{"class":108},[102,86279,12425],{"class":112},[102,86281,86275],{"class":161},[102,86283,441],{"class":108},[102,86285,12425],{"class":112},[102,86287,304],{"class":161},[102,86289,2708],{"class":112},[102,86291,86292,86294,86296,86298],{"class":104,"line":1668},[102,86293,54875],{"class":161},[102,86295,51428],{"class":112},[102,86297,60833],{"class":161},[102,86299,1279],{"class":112},[102,86301,86302],{"class":104,"line":1682},[102,86303,2176],{"class":112},[102,86305,86306],{"class":104,"line":1687},[102,86307,2389],{"emptyLinePlaceholder":30},[102,86309,86310,86312,86315],{"class":104,"line":1716},[102,86311,86141],{"class":1952},[102,86313,86314],{"class":1952}," .header",[102,86316,15562],{"class":112},[102,86318,86319,86321,86323,86325,86327],{"class":104,"line":1721},[102,86320,57350],{"class":161},[102,86322,51428],{"class":112},[102,86324,514],{"class":161},[102,86326,51483],{"class":108},[102,86328,1279],{"class":112},[102,86330,86331,86333,86335,86337,86339,86341],{"class":104,"line":1738},[102,86332,54686],{"class":161},[102,86334,51428],{"class":112},[102,86336,304],{"class":161},[102,86338,2027],{"class":161},[102,86340,51483],{"class":108},[102,86342,1279],{"class":112},[102,86344,86345,86347,86349,86351],{"class":104,"line":1743},[102,86346,54750],{"class":161},[102,86348,51428],{"class":112},[102,86350,54755],{"class":161},[102,86352,1279],{"class":112},[102,86354,86355,86357,86359,86361,86363],{"class":104,"line":1748},[102,86356,54913],{"class":161},[102,86358,51428],{"class":112},[102,86360,813],{"class":161},[102,86362,51483],{"class":108},[102,86364,1279],{"class":112},[102,86366,86367],{"class":104,"line":1753},[102,86368,2176],{"class":112},[102,86370,86371],{"class":104,"line":1767},[102,86372,2389],{"emptyLinePlaceholder":30},[102,86374,86375,86377,86379,86381],{"class":104,"line":1772},[102,86376,86141],{"class":1952},[102,86378,86314],{"class":1952},[102,86380,3021],{"class":51291},[102,86382,15562],{"class":112},[102,86384,86385,86388,86390,86392],{"class":104,"line":2566},[102,86386,86387],{"class":161},"      font-style",[102,86389,51428],{"class":112},[102,86391,63832],{"class":161},[102,86393,1279],{"class":112},[102,86395,86396,86398,86400,86402],{"class":104,"line":2580},[102,86397,57407],{"class":161},[102,86399,51428],{"class":112},[102,86401,62061],{"class":161},[102,86403,1279],{"class":112},[102,86405,86406,86408,86410,86412],{"class":104,"line":2588},[102,86407,54750],{"class":161},[102,86409,51428],{"class":112},[102,86411,54822],{"class":161},[102,86413,1279],{"class":112},[102,86415,86416,86419,86421,86423,86425],{"class":104,"line":2593},[102,86417,86418],{"class":161},"      right",[102,86420,51428],{"class":112},[102,86422,688],{"class":161},[102,86424,51483],{"class":108},[102,86426,1279],{"class":112},[102,86428,86429,86431,86433,86436,86438],{"class":104,"line":2599},[102,86430,54938],{"class":161},[102,86432,51428],{"class":112},[102,86434,86435],{"class":161},"-2",[102,86437,51483],{"class":108},[102,86439,1279],{"class":112},[102,86441,86442,86444,86446,86448],{"class":104,"line":2605},[102,86443,62016],{"class":161},[102,86445,51428],{"class":112},[102,86447,62021],{"class":161},[102,86449,1279],{"class":112},[102,86451,86452],{"class":104,"line":2610},[102,86453,2176],{"class":112},[102,86455,86456],{"class":104,"line":7938},[102,86457,2389],{"emptyLinePlaceholder":30},[102,86459,86460,86462,86465],{"class":104,"line":7962},[102,86461,86141],{"class":1952},[102,86463,86464],{"class":1952}," .body",[102,86466,15562],{"class":112},[102,86468,86469,86471,86473,86475],{"class":104,"line":7967},[102,86470,57277],{"class":161},[102,86472,51428],{"class":112},[102,86474,51583],{"class":161},[102,86476,1279],{"class":112},[102,86478,86479,86481,86483,86485,86487],{"class":104,"line":7973},[102,86480,54686],{"class":161},[102,86482,51428],{"class":112},[102,86484,559],{"class":161},[102,86486,51483],{"class":108},[102,86488,1279],{"class":112},[102,86490,86491],{"class":104,"line":8000},[102,86492,2176],{"class":112},[102,86494,86495],{"class":104,"line":8005},[102,86496,2389],{"emptyLinePlaceholder":30},[102,86498,86499,86501,86504],{"class":104,"line":8011},[102,86500,86141],{"class":1952},[102,86502,86503],{"class":1952}," .footer",[102,86505,15562],{"class":112},[102,86507,86508,86510,86512,86514],{"class":104,"line":8023},[102,86509,55000],{"class":161},[102,86511,51428],{"class":112},[102,86513,51468],{"class":161},[102,86515,1279],{"class":112},[102,86517,86518,86520,86522,86524],{"class":104,"line":8035},[102,86519,55011],{"class":161},[102,86521,51428],{"class":112},[102,86523,51571],{"class":161},[102,86525,1279],{"class":112},[102,86527,86528,86530,86532,86534,86536],{"class":104,"line":8047},[102,86529,54686],{"class":161},[102,86531,51428],{"class":112},[102,86533,559],{"class":161},[102,86535,51483],{"class":108},[102,86537,1279],{"class":112},[102,86539,86540],{"class":104,"line":9706},[102,86541,2176],{"class":112},[102,86543,86544],{"class":104,"line":9731},[102,86545,2389],{"emptyLinePlaceholder":30},[102,86547,86548,86550,86552,86554],{"class":104,"line":9754},[102,86549,86141],{"class":1952},[102,86551,86503],{"class":1952},[102,86553,1387],{"class":51291},[102,86555,15562],{"class":112},[102,86557,86558,86560,86562,86564,86566,86568,86570],{"class":104,"line":9778},[102,86559,54686],{"class":161},[102,86561,51428],{"class":112},[102,86563,184],{"class":161},[102,86565,51483],{"class":108},[102,86567,2072],{"class":161},[102,86569,51483],{"class":108},[102,86571,1279],{"class":112},[102,86573,86574,86576,86578,86581],{"class":104,"line":9783},[102,86575,61712],{"class":161},[102,86577,51428],{"class":112},[102,86579,86580],{"class":161},"#ccc",[102,86582,1279],{"class":112},[102,86584,86585,86587,86589,86591],{"class":104,"line":9788},[102,86586,63961],{"class":161},[102,86588,51428],{"class":112},[102,86590,54728],{"class":161},[102,86592,1279],{"class":112},[102,86594,86595,86597,86599,86601],{"class":104,"line":9793},[102,86596,57407],{"class":161},[102,86598,51428],{"class":112},[102,86600,60833],{"class":161},[102,86602,1279],{"class":112},[102,86604,86605,86607,86609,86611,86613],{"class":104,"line":9802},[102,86606,55125],{"class":161},[102,86608,51428],{"class":112},[102,86610,190],{"class":161},[102,86612,51483],{"class":108},[102,86614,1279],{"class":112},[102,86616,86617,86619,86621,86623,86625],{"class":104,"line":9807},[102,86618,61741],{"class":161},[102,86620,51428],{"class":112},[102,86622,559],{"class":161},[102,86624,51483],{"class":108},[102,86626,1279],{"class":112},[102,86628,86629,86631,86633,86635,86637],{"class":104,"line":9813},[102,86630,54913],{"class":161},[102,86632,51428],{"class":112},[102,86634,662],{"class":161},[102,86636,51483],{"class":108},[102,86638,1279],{"class":112},[102,86640,86641],{"class":104,"line":9834},[102,86642,2176],{"class":112},[102,86644,86645],{"class":104,"line":9840},[102,86646,2389],{"emptyLinePlaceholder":30},[102,86648,86649,86651,86653,86655,86658],{"class":104,"line":9854},[102,86650,86141],{"class":1952},[102,86652,86503],{"class":1952},[102,86654,1387],{"class":51291},[102,86656,86657],{"class":1952},".submit",[102,86659,15562],{"class":112},[102,86661,86662,86664,86666,86669],{"class":104,"line":9860},[102,86663,54875],{"class":161},[102,86665,51428],{"class":112},[102,86667,86668],{"class":161},"#369",[102,86670,1279],{"class":112},[102,86672,86673],{"class":104,"line":9887},[102,86674,2176],{"class":112},[102,86676,86677,86679,86681],{"class":104,"line":9896},[102,86678,52408],{"class":112},[102,86680,5116],{"class":51291},[102,86682,51298],{"class":112},[102,86684,86685,86687,86689],{"class":104,"line":9902},[102,86686,51776],{"class":112},[102,86688,51325],{"class":51291},[102,86690,51298],{"class":112},[102,86692,86693],{"class":104,"line":9910},[102,86694,2389],{"emptyLinePlaceholder":30},[102,86696,86697,86699,86701],{"class":104,"line":9915},[102,86698,1023],{"class":112},[102,86700,51791],{"class":51291},[102,86702,51298],{"class":112},[102,86704,86705,86707,86709,86711,86713,86716,86719,86721],{"class":104,"line":16594},[102,86706,52135],{"class":112},[102,86708,53878],{"class":51291},[102,86710,14949],{"class":1952},[102,86712,158],{"class":112},[102,86714,86715],{"class":217},"\"delete\"",[102,86717,86718],{"class":112},">删除\u003C\u002F",[102,86720,53878],{"class":51291},[102,86722,51298],{"class":112},[102,86724,86725,86727,86729,86731,86733,86736,86739,86741],{"class":104,"line":16600},[102,86726,52135],{"class":112},[102,86728,53878],{"class":51291},[102,86730,14949],{"class":1952},[102,86732,158],{"class":112},[102,86734,86735],{"class":217},"\"login\"",[102,86737,86738],{"class":112},">登录\u003C\u002F",[102,86740,53878],{"class":51291},[102,86742,51298],{"class":112},[102,86744,86745,86747,86749],{"class":104,"line":16623},[102,86746,52135],{"class":112},[102,86748,51804],{"class":51291},[102,86750,51298],{"class":112},[102,86752,86753],{"class":104,"line":16629},[102,86754,86755],{"class":171},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[102,86757,86758,86760,86763,86765,86767,86769,86771,86773,86776,86778,86780],{"class":104,"line":16652},[102,86759,70075],{"class":108},[102,86761,86762],{"class":1952}," Modal",[102,86764,113],{"class":112},[102,86766,51398],{"class":5206},[102,86768,13554],{"class":108},[102,86770,69921],{"class":217},[102,86772,12425],{"class":112},[102,86774,86775],{"class":5206},"message",[102,86777,13554],{"class":108},[102,86779,69921],{"class":217},[102,86781,12432],{"class":112},[102,86783,86784],{"class":104,"line":16666},[102,86785,86786],{"class":171},"      \u002F\u002F 创建Model 模态框盒子\n",[102,86788,86789],{"class":104,"line":16686},[102,86790,86791],{"class":171},"      \u002F\u002F 1.1 创建div标签\n",[102,86793,86794,86796,86799,86801,86803,86805,86807,86809],{"class":104,"line":16692},[102,86795,70042],{"class":161},[102,86797,86798],{"class":112},".modalBox ",[102,86800,158],{"class":108},[102,86802,54387],{"class":112},[102,86804,70142],{"class":1952},[102,86806,113],{"class":112},[102,86808,81922],{"class":217},[102,86810,119],{"class":112},[102,86812,86813],{"class":104,"line":16703},[102,86814,86815],{"class":171},"      \u002F\u002F 1.2 给div 添加类名为model\n",[102,86817,86818,86820,86823,86825],{"class":104,"line":16726},[102,86819,70042],{"class":161},[102,86821,86822],{"class":112},".modalBox.className ",[102,86824,158],{"class":108},[102,86826,86827],{"class":217}," 'modal'\n",[102,86829,86830],{"class":104,"line":16748},[102,86831,86832],{"class":171},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[102,86834,86835,86837,86840,86842],{"class":104,"line":16753},[102,86836,70042],{"class":161},[102,86838,86839],{"class":112},".modalBox.innerHTML ",[102,86841,158],{"class":108},[102,86843,70159],{"class":217},[102,86845,86846,86849,86851],{"class":104,"line":16759},[102,86847,86848],{"class":217},"        \u003Cdiv class=\"header\">${",[102,86850,51398],{"class":112},[102,86852,86853],{"class":217},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[102,86855,86856,86859,86861],{"class":104,"line":16773},[102,86857,86858],{"class":217},"        \u003Cdiv class=\"body\">${",[102,86860,86775],{"class":112},[102,86862,86863],{"class":217},"}\u003C\u002Fdiv>\n",[102,86865,86866],{"class":104,"line":16786},[102,86867,86868],{"class":217},"      `\n",[102,86870,86871],{"class":104,"line":16791},[102,86872,86873],{"class":171},"      \u002F\u002F console.log(this.modalBox)\n",[102,86875,86876],{"class":104,"line":16805},[102,86877,2176],{"class":112},[102,86879,86880],{"class":104,"line":16810},[102,86881,86882],{"class":171},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[102,86884,86885],{"class":104,"line":16816},[102,86886,86887],{"class":171},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[102,86889,86890],{"class":104,"line":16821},[102,86891,86892],{"class":171},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[102,86894,86895,86898,86900,86902,86904,86907,86909,86911],{"class":104,"line":16835},[102,86896,86897],{"class":161},"    Modal",[102,86899,671],{"class":112},[102,86901,85570],{"class":161},[102,86903,671],{"class":112},[102,86905,86906],{"class":1952},"open",[102,86908,13554],{"class":108},[102,86910,58909],{"class":108},[102,86912,54443],{"class":112},[102,86914,86915],{"class":104,"line":16840},[102,86916,86917],{"class":171},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[102,86919,86920,86922,86925,86927,86929,86931,86933,86936],{"class":104,"line":16845},[102,86921,58219],{"class":108},[102,86923,86924],{"class":161}," box",[102,86926,13554],{"class":108},[102,86928,54387],{"class":112},[102,86930,54390],{"class":1952},[102,86932,113],{"class":112},[102,86934,86935],{"class":217},"'.modal'",[102,86937,119],{"class":112},[102,86939,86940],{"class":104,"line":16859},[102,86941,86942],{"class":171},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[102,86944,86945,86948,86950,86953,86955],{"class":104,"line":16871},[102,86946,86947],{"class":112},"      box ",[102,86949,1704],{"class":108},[102,86951,86952],{"class":112}," box.",[102,86954,56997],{"class":1952},[102,86956,1965],{"class":112},[102,86958,86959],{"class":104,"line":16876},[102,86960,86961],{"class":171},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[102,86963,86964],{"class":104,"line":16889},[102,86965,86966],{"class":171},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[102,86968,86969],{"class":104,"line":16894},[102,86970,86971],{"class":171},"      \u002F\u002F append可以增加对象\n",[102,86973,86974,86977,86980,86982,86985],{"class":104,"line":16899},[102,86975,86976],{"class":112},"      document.body.",[102,86978,86979],{"class":1952},"append",[102,86981,113],{"class":112},[102,86983,86984],{"class":161},"this",[102,86986,86987],{"class":112},".modalBox)\n",[102,86989,86990],{"class":104,"line":16904},[102,86991,2389],{"emptyLinePlaceholder":30},[102,86993,86994],{"class":104,"line":16917},[102,86995,86996],{"class":171},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[102,86998,86999,87001,87004,87006,87008,87011,87013,87015,87017,87019,87022,87024],{"class":104,"line":16922},[102,87000,70042],{"class":161},[102,87002,87003],{"class":112},".modalBox.",[102,87005,54390],{"class":1952},[102,87007,113],{"class":112},[102,87009,87010],{"class":217},"'i'",[102,87012,30817],{"class":112},[102,87014,57804],{"class":1952},[102,87016,113],{"class":112},[102,87018,57809],{"class":217},[102,87020,87021],{"class":112},", () ",[102,87023,84713],{"class":108},[102,87025,15562],{"class":112},[102,87027,87028],{"class":104,"line":32624},[102,87029,87030],{"class":171},"        \u002F\u002F 这个地方需要用到箭头函数\n",[102,87032,87033],{"class":104,"line":32630},[102,87034,87035],{"class":171},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[102,87037,87038],{"class":104,"line":32636},[102,87039,87040],{"class":171},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[102,87042,87043,87045,87047,87050],{"class":104,"line":32642},[102,87044,64717],{"class":161},[102,87046,671],{"class":112},[102,87048,87049],{"class":1952},"close",[102,87051,1965],{"class":112},[102,87053,87054],{"class":104,"line":32648},[102,87055,64806],{"class":112},[102,87057,87058],{"class":104,"line":32659},[102,87059,2176],{"class":112},[102,87061,87062],{"class":104,"line":32665},[102,87063,2389],{"emptyLinePlaceholder":30},[102,87065,87066],{"class":104,"line":32685},[102,87067,87068],{"class":171},"    \u002F\u002F 测试一下 点击 删除按钮\n",[102,87070,87071,87073,87075,87077,87080,87082,87084,87086,87088,87090,87092],{"class":104,"line":32691},[102,87072,52398],{"class":112},[102,87074,54390],{"class":1952},[102,87076,113],{"class":112},[102,87078,87079],{"class":217},"'#delete'",[102,87081,30817],{"class":112},[102,87083,57804],{"class":1952},[102,87085,113],{"class":112},[102,87087,57809],{"class":217},[102,87089,87021],{"class":112},[102,87091,84713],{"class":108},[102,87093,15562],{"class":112},[102,87095,87096],{"class":104,"line":32702},[102,87097,87098],{"class":171},"      \u002F\u002F 先调用Model构造函数\n",[102,87100,87101,87103,87106,87108,87110,87112,87114,87117,87119,87122],{"class":104,"line":32708},[102,87102,58219],{"class":108},[102,87104,87105],{"class":161}," del",[102,87107,13554],{"class":108},[102,87109,11568],{"class":108},[102,87111,86762],{"class":1952},[102,87113,113],{"class":112},[102,87115,87116],{"class":217},"'温馨的提示'",[102,87118,12425],{"class":112},[102,87120,87121],{"class":217},"'您没有删除权限操作'",[102,87123,119],{"class":112},[102,87125,87126],{"class":104,"line":32714},[102,87127,87128],{"class":171},"      \u002F\u002F 实例对象调用open方法\n",[102,87130,87131,87134,87136],{"class":104,"line":32720},[102,87132,87133],{"class":112},"      del.",[102,87135,86906],{"class":1952},[102,87137,1965],{"class":112},[102,87139,87140],{"class":104,"line":32726},[102,87141,33452],{"class":112},[102,87143,87144],{"class":104,"line":32732},[102,87145,87146],{"class":171},"    \u002F\u002F 测试一下 点击 登录按钮\n",[102,87148,87149,87151,87153,87155,87158,87160,87162,87164,87166,87168,87170],{"class":104,"line":32738},[102,87150,52398],{"class":112},[102,87152,54390],{"class":1952},[102,87154,113],{"class":112},[102,87156,87157],{"class":217},"'#login'",[102,87159,30817],{"class":112},[102,87161,57804],{"class":1952},[102,87163,113],{"class":112},[102,87165,57809],{"class":217},[102,87167,87021],{"class":112},[102,87169,84713],{"class":108},[102,87171,15562],{"class":112},[102,87173,87174],{"class":104,"line":32744},[102,87175,87098],{"class":171},[102,87177,87178,87180,87183,87185,87187,87189,87191,87194,87196,87199],{"class":104,"line":32764},[102,87179,58219],{"class":108},[102,87181,87182],{"class":161}," log",[102,87184,13554],{"class":108},[102,87186,11568],{"class":108},[102,87188,86762],{"class":1952},[102,87190,113],{"class":112},[102,87192,87193],{"class":217},"'友情提示'",[102,87195,12425],{"class":112},[102,87197,87198],{"class":217},"'您还没有登录呢'",[102,87200,119],{"class":112},[102,87202,87203],{"class":104,"line":32770},[102,87204,87128],{"class":171},[102,87206,87207,87210,87212],{"class":104,"line":32786},[102,87208,87209],{"class":112},"      log.",[102,87211,86906],{"class":1952},[102,87213,1965],{"class":112},[102,87215,87216],{"class":104,"line":32792},[102,87217,33452],{"class":112},[102,87219,87220],{"class":104,"line":32806},[102,87221,87222],{"class":171},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[102,87224,87225,87227,87229,87231,87233,87235,87237,87239],{"class":104,"line":32812},[102,87226,86897],{"class":161},[102,87228,671],{"class":112},[102,87230,85570],{"class":161},[102,87232,671],{"class":112},[102,87234,87049],{"class":1952},[102,87236,13554],{"class":108},[102,87238,58909],{"class":108},[102,87240,54443],{"class":112},[102,87242,87243,87245,87247,87249],{"class":104,"line":32827},[102,87244,70042],{"class":161},[102,87246,87003],{"class":112},[102,87248,56997],{"class":1952},[102,87250,1965],{"class":112},[102,87252,87253],{"class":104,"line":32833},[102,87254,2176],{"class":112},[102,87256,87257,87259,87261],{"class":104,"line":32842},[102,87258,52408],{"class":112},[102,87260,51804],{"class":51291},[102,87262,51298],{"class":112},[102,87264,87265,87267,87269],{"class":104,"line":32848},[102,87266,51776],{"class":112},[102,87268,51791],{"class":51291},[102,87270,51298],{"class":112},[102,87272,87273],{"class":104,"line":32857},[102,87274,2389],{"emptyLinePlaceholder":30},[102,87276,87277,87279,87281],{"class":104,"line":32863},[102,87278,51776],{"class":112},[102,87280,50626],{"class":51291},[102,87282,51298],{"class":112},[19,87284,87285],{},[1451,87286],{"alt":23,"src":87287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87289,87291],{"id":87290},"_414-深浅拷贝","4.14 深浅拷贝",[73,87293,87295],{"id":87294},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87297,87298],{},[1451,87299],{"alt":23,"src":87300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87302,87303],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87305,87306],{},[1451,87307],{"alt":23,"src":87308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87310,87311],{},[1451,87312],{"alt":23,"src":87313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87315,87316],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87318,87319],{},[1451,87320],{"alt":23,"src":87321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87323,11322],{},[19,87325,87326],{},[1451,87327],{"alt":23,"src":87328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[73,87330,87332],{"id":87331},"_4142-深拷贝","4.14.2 深拷贝",[19,87334,87335],{},"深拷贝：拷贝的是对象，不是地址",[19,87337,87338],{},"常用的三种方法：",[56,87340,87341,87344,87347],{},[59,87342,87343],{},"通过递归实现深拷贝",[59,87345,87346],{},"lodash\u002FcloneDeep",[59,87348,87349],{},"通过JSON.stringify()实现",[21988,87351,87353],{"id":87352},"_41421-递归函数","4.14.2.1 递归函数",[19,87355,87356],{},[1451,87357],{"alt":23,"src":87358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[56,87360,87361],{},[59,87362,87363],{},"死递归占溢出：",[93,87365,87367],{"className":53058,"code":87366,"language":53060,"meta":23,"style":23},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[99,87368,87369,87377,87385,87389,87394,87398,87403,87411],{"__ignoreMap":23},[102,87370,87371,87373,87375],{"class":104,"line":105},[102,87372,1023],{"class":112},[102,87374,51791],{"class":51291},[102,87376,51298],{"class":112},[102,87378,87379,87381,87383],{"class":104,"line":24},[102,87380,52135],{"class":112},[102,87382,51804],{"class":51291},[102,87384,51298],{"class":112},[102,87386,87387],{"class":104,"line":1168},[102,87388,77134],{"class":112},[102,87390,87391],{"class":104,"line":1183},[102,87392,87393],{"class":112},"      fn()\n",[102,87395,87396],{"class":104,"line":1189},[102,87397,2176],{"class":112},[102,87399,87400],{"class":104,"line":1203},[102,87401,87402],{"class":112},"    fn()\n",[102,87404,87405,87407,87409],{"class":104,"line":1209},[102,87406,52408],{"class":112},[102,87408,51804],{"class":51291},[102,87410,51298],{"class":112},[102,87412,87413,87415,87417],{"class":104,"line":1300},[102,87414,51776],{"class":112},[102,87416,51791],{"class":51291},[102,87418,51298],{"class":112},[56,87420,87421],{"start":24},[59,87422,87423],{},"递归函数要加判断条件：",[19,87425,87426],{},[1451,87427],{"alt":23,"src":87428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[56,87430,87431],{"start":1168},[59,87432,87433],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[93,87435,87437],{"className":50624,"code":87436,"language":50626,"meta":23,"style":23},"\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",[99,87438,87439,87449,87463,87467,87475,87489,87509,87521,87529,87533,87541,87553,87561,87569,87594,87606,87610,87617,87625,87633,87637],{"__ignoreMap":23},[102,87440,87441,87443,87445,87447],{"class":104,"line":105},[102,87442,51288],{"class":112},[102,87444,51292],{"class":51291},[102,87446,51295],{"class":1952},[102,87448,51298],{"class":112},[102,87450,87451,87453,87455,87457,87459,87461],{"class":104,"line":24},[102,87452,1023],{"class":112},[102,87454,50626],{"class":51291},[102,87456,51307],{"class":1952},[102,87458,158],{"class":112},[102,87460,51312],{"class":217},[102,87462,51298],{"class":112},[102,87464,87465],{"class":104,"line":1168},[102,87466,2389],{"emptyLinePlaceholder":30},[102,87468,87469,87471,87473],{"class":104,"line":1183},[102,87470,1023],{"class":112},[102,87472,51325],{"class":51291},[102,87474,51298],{"class":112},[102,87476,87477,87479,87481,87483,87485,87487],{"class":104,"line":1189},[102,87478,52135],{"class":112},[102,87480,51335],{"class":51291},[102,87482,51338],{"class":1952},[102,87484,158],{"class":112},[102,87486,51343],{"class":217},[102,87488,51298],{"class":112},[102,87490,87491,87493,87495,87497,87499,87501,87503,87505,87507],{"class":104,"line":1203},[102,87492,52135],{"class":112},[102,87494,51335],{"class":51291},[102,87496,14910],{"class":1952},[102,87498,158],{"class":112},[102,87500,51382],{"class":217},[102,87502,51362],{"class":1952},[102,87504,158],{"class":112},[102,87506,51389],{"class":217},[102,87508,51298],{"class":112},[102,87510,87511,87513,87515,87517,87519],{"class":104,"line":1209},[102,87512,52135],{"class":112},[102,87514,51398],{"class":51291},[102,87516,51401],{"class":112},[102,87518,51398],{"class":51291},[102,87520,51298],{"class":112},[102,87522,87523,87525,87527],{"class":104,"line":1300},[102,87524,51776],{"class":112},[102,87526,51325],{"class":51291},[102,87528,51298],{"class":112},[102,87530,87531],{"class":104,"line":1306},[102,87532,2389],{"emptyLinePlaceholder":30},[102,87534,87535,87537,87539],{"class":104,"line":1318},[102,87536,1023],{"class":112},[102,87538,51791],{"class":51291},[102,87540,51298],{"class":112},[102,87542,87543,87545,87547,87549,87551],{"class":104,"line":1601},[102,87544,52135],{"class":112},[102,87546,51602],{"class":51291},[102,87548,55305],{"class":112},[102,87550,51602],{"class":51291},[102,87552,51298],{"class":112},[102,87554,87555,87557,87559],{"class":104,"line":1606},[102,87556,52135],{"class":112},[102,87558,51804],{"class":51291},[102,87560,51298],{"class":112},[102,87562,87563,87565,87567],{"class":104,"line":1612},[102,87564,70075],{"class":108},[102,87566,73764],{"class":1952},[102,87568,10843],{"class":112},[102,87570,87571,87573,87575,87577,87579,87581,87583,87585,87587,87589,87592],{"class":104,"line":1617},[102,87572,55762],{"class":112},[102,87574,54390],{"class":1952},[102,87576,113],{"class":112},[102,87578,81922],{"class":217},[102,87580,74240],{"class":112},[102,87582,158],{"class":108},[102,87584,11568],{"class":108},[102,87586,73780],{"class":1952},[102,87588,17251],{"class":112},[102,87590,87591],{"class":1952},"toLocaleString",[102,87593,1965],{"class":112},[102,87595,87596,87599,87602,87604],{"class":104,"line":1631},[102,87597,87598],{"class":1952},"      setTimeout",[102,87600,87601],{"class":112},"(getTime, ",[102,87603,6400],{"class":161},[102,87605,119],{"class":112},[102,87607,87608],{"class":104,"line":1636},[102,87609,2176],{"class":112},[102,87611,87612,87615],{"class":104,"line":1642},[102,87613,87614],{"class":1952},"    getTime",[102,87616,1965],{"class":112},[102,87618,87619,87621,87623],{"class":104,"line":1663},[102,87620,52408],{"class":112},[102,87622,51804],{"class":51291},[102,87624,51298],{"class":112},[102,87626,87627,87629,87631],{"class":104,"line":1668},[102,87628,51776],{"class":112},[102,87630,51791],{"class":51291},[102,87632,51298],{"class":112},[102,87634,87635],{"class":104,"line":1682},[102,87636,2389],{"emptyLinePlaceholder":30},[102,87638,87639,87641,87643],{"class":104,"line":1687},[102,87640,51776],{"class":112},[102,87642,50626],{"class":51291},[102,87644,51298],{"class":112},[19,87646,87647],{},[1451,87648],{"alt":23,"src":87649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[56,87651,87652],{"start":1183},[59,87653,87343],{},[19,87655,87656],{},[1451,87657],{"alt":23,"src":87658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87660,87661],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87663,39180],{},[19,87665,87666],{},"这个是简易版的递归函数深拷贝",[19,87668,87669],{},"一定要注意先数组再对象，因为万物皆可对象",[93,87671,87673],{"className":50624,"code":87672,"language":50626,"meta":23,"style":23},"\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",[99,87674,87675,87685,87699,87703,87711,87725,87745,87757,87765,87769,87777,87785,87795,87804,87812,87828,87832,87840,87844,87848,87860,87865,87884,87900,87905,87910,87915,87930,87935,87940,87949,87957,87974,87982,87988,87996,88001,88006,88015,88019,88023,88027,88038,88047,88057,88071,88081,88089,88097,88105,88109],{"__ignoreMap":23},[102,87676,87677,87679,87681,87683],{"class":104,"line":105},[102,87678,51288],{"class":112},[102,87680,51292],{"class":51291},[102,87682,51295],{"class":1952},[102,87684,51298],{"class":112},[102,87686,87687,87689,87691,87693,87695,87697],{"class":104,"line":24},[102,87688,1023],{"class":112},[102,87690,50626],{"class":51291},[102,87692,51307],{"class":1952},[102,87694,158],{"class":112},[102,87696,51312],{"class":217},[102,87698,51298],{"class":112},[102,87700,87701],{"class":104,"line":1168},[102,87702,2389],{"emptyLinePlaceholder":30},[102,87704,87705,87707,87709],{"class":104,"line":1183},[102,87706,1023],{"class":112},[102,87708,51325],{"class":51291},[102,87710,51298],{"class":112},[102,87712,87713,87715,87717,87719,87721,87723],{"class":104,"line":1189},[102,87714,52135],{"class":112},[102,87716,51335],{"class":51291},[102,87718,51338],{"class":1952},[102,87720,158],{"class":112},[102,87722,51343],{"class":217},[102,87724,51298],{"class":112},[102,87726,87727,87729,87731,87733,87735,87737,87739,87741,87743],{"class":104,"line":1203},[102,87728,52135],{"class":112},[102,87730,51335],{"class":51291},[102,87732,14910],{"class":1952},[102,87734,158],{"class":112},[102,87736,51382],{"class":217},[102,87738,51362],{"class":1952},[102,87740,158],{"class":112},[102,87742,51389],{"class":217},[102,87744,51298],{"class":112},[102,87746,87747,87749,87751,87753,87755],{"class":104,"line":1209},[102,87748,52135],{"class":112},[102,87750,51398],{"class":51291},[102,87752,51401],{"class":112},[102,87754,51398],{"class":51291},[102,87756,51298],{"class":112},[102,87758,87759,87761,87763],{"class":104,"line":1300},[102,87760,51776],{"class":112},[102,87762,51325],{"class":51291},[102,87764,51298],{"class":112},[102,87766,87767],{"class":104,"line":1306},[102,87768,2389],{"emptyLinePlaceholder":30},[102,87770,87771,87773,87775],{"class":104,"line":1318},[102,87772,1023],{"class":112},[102,87774,51791],{"class":51291},[102,87776,51298],{"class":112},[102,87778,87779,87781,87783],{"class":104,"line":1601},[102,87780,52135],{"class":112},[102,87782,51804],{"class":51291},[102,87784,51298],{"class":112},[102,87786,87787,87789,87791,87793],{"class":104,"line":1606},[102,87788,11211],{"class":108},[102,87790,69962],{"class":161},[102,87792,13554],{"class":108},[102,87794,15562],{"class":112},[102,87796,87797,87799,87802],{"class":104,"line":1612},[102,87798,71607],{"class":112},[102,87800,87801],{"class":217},"'pink'",[102,87803,31457],{"class":112},[102,87805,87806,87808,87810],{"class":104,"line":1617},[102,87807,71617],{"class":112},[102,87809,763],{"class":161},[102,87811,31457],{"class":112},[102,87813,87814,87817,87820,87822,87825],{"class":104,"line":1631},[102,87815,87816],{"class":112},"      hobby: [",[102,87818,87819],{"class":217},"'乒乓球'",[102,87821,12425],{"class":112},[102,87823,87824],{"class":217},"'足球'",[102,87826,87827],{"class":112},"],\n",[102,87829,87830],{"class":104,"line":1636},[102,87831,77863],{"class":112},[102,87833,87834,87837],{"class":104,"line":1642},[102,87835,87836],{"class":112},"        baby: ",[102,87838,87839],{"class":217},"'小pink'\n",[102,87841,87842],{"class":104,"line":1663},[102,87843,52389],{"class":112},[102,87845,87846],{"class":104,"line":1668},[102,87847,2176],{"class":112},[102,87849,87850,87852,87855,87857],{"class":104,"line":1682},[102,87851,11211],{"class":108},[102,87853,87854],{"class":161}," o",[102,87856,13554],{"class":108},[102,87858,87859],{"class":112}," {}\n",[102,87861,87862],{"class":104,"line":1687},[102,87863,87864],{"class":171},"    \u002F\u002F 拷贝函数\n",[102,87866,87867,87869,87872,87874,87877,87879,87882],{"class":104,"line":1716},[102,87868,70075],{"class":108},[102,87870,87871],{"class":1952}," deepCopy",[102,87873,113],{"class":112},[102,87875,87876],{"class":5206},"newObj",[102,87878,12425],{"class":112},[102,87880,87881],{"class":5206},"oldObj",[102,87883,12432],{"class":112},[102,87885,87886,87888,87890,87892,87895,87897],{"class":104,"line":1721},[102,87887,52275],{"class":108},[102,87889,1647],{"class":112},[102,87891,51838],{"class":108},[102,87893,87894],{"class":112}," k ",[102,87896,26034],{"class":108},[102,87898,87899],{"class":112}," oldObj) {\n",[102,87901,87902],{"class":104,"line":1738},[102,87903,87904],{"class":171},"        \u002F\u002F 处理数组的问题\n",[102,87906,87907],{"class":104,"line":1743},[102,87908,87909],{"class":171},"        \u002F\u002F 判断是否属于数组\n",[102,87911,87912],{"class":104,"line":1748},[102,87913,87914],{"class":171},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[102,87916,87917,87919,87922,87925,87928],{"class":104,"line":1753},[102,87918,2486],{"class":108},[102,87920,87921],{"class":112}," (oldObj[k] ",[102,87923,87924],{"class":108},"instanceof",[102,87926,87927],{"class":1952}," Array",[102,87929,12432],{"class":112},[102,87931,87932],{"class":104,"line":1767},[102,87933,87934],{"class":171},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[102,87936,87937],{"class":104,"line":1772},[102,87938,87939],{"class":171},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[102,87941,87942,87945,87947],{"class":104,"line":2566},[102,87943,87944],{"class":112},"          newObj[k] ",[102,87946,158],{"class":108},[102,87948,51829],{"class":112},[102,87950,87951,87954],{"class":104,"line":2580},[102,87952,87953],{"class":1952},"          deepCopy",[102,87955,87956],{"class":112},"(newObj[k], oldObj[k])\n",[102,87958,87959,87961,87963,87965,87967,87969,87972],{"class":104,"line":2588},[102,87960,80071],{"class":112},[102,87962,1690],{"class":108},[102,87964,1693],{"class":108},[102,87966,87921],{"class":112},[102,87968,87924],{"class":108},[102,87970,87971],{"class":1952}," Object",[102,87973,12432],{"class":112},[102,87975,87976,87978,87980],{"class":104,"line":2593},[102,87977,87944],{"class":112},[102,87979,158],{"class":108},[102,87981,87859],{"class":112},[102,87983,87984,87986],{"class":104,"line":2599},[102,87985,87953],{"class":1952},[102,87987,87956],{"class":112},[102,87989,87990,87992,87994],{"class":104,"line":2605},[102,87991,80071],{"class":112},[102,87993,1690],{"class":108},[102,87995,15562],{"class":112},[102,87997,87998],{"class":104,"line":2610},[102,87999,88000],{"class":171},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[102,88002,88003],{"class":104,"line":7938},[102,88004,88005],{"class":171},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[102,88007,88008,88010,88012],{"class":104,"line":7962},[102,88009,87944],{"class":112},[102,88011,158],{"class":108},[102,88013,88014],{"class":112}," oldObj[k]\n",[102,88016,88017],{"class":104,"line":7967},[102,88018,2518],{"class":112},[102,88020,88021],{"class":104,"line":7973},[102,88022,52389],{"class":112},[102,88024,88025],{"class":104,"line":8000},[102,88026,2176],{"class":112},[102,88028,88029,88032,88035],{"class":104,"line":8005},[102,88030,88031],{"class":1952},"    deepCopy",[102,88033,88034],{"class":112},"(o, obj) ",[102,88036,88037],{"class":171},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[102,88039,88040,88042,88044],{"class":104,"line":8011},[102,88041,73744],{"class":112},[102,88043,58238],{"class":1952},[102,88045,88046],{"class":112},"(o)\n",[102,88048,88049,88052,88054],{"class":104,"line":8023},[102,88050,88051],{"class":112},"    o.age ",[102,88053,158],{"class":108},[102,88055,88056],{"class":161}," 20\n",[102,88058,88059,88062,88064,88066,88068],{"class":104,"line":8035},[102,88060,88061],{"class":112},"    o.hobby[",[102,88063,304],{"class":161},[102,88065,4432],{"class":112},[102,88067,158],{"class":108},[102,88069,88070],{"class":217}," '篮球'\n",[102,88072,88073,88076,88078],{"class":104,"line":8047},[102,88074,88075],{"class":112},"    o.family ",[102,88077,158],{"class":108},[102,88079,88080],{"class":217}," '老pink'\n",[102,88082,88083,88085,88087],{"class":104,"line":9706},[102,88084,73744],{"class":112},[102,88086,58238],{"class":1952},[102,88088,70027],{"class":112},[102,88090,88091,88093,88095],{"class":104,"line":9731},[102,88092,52408],{"class":112},[102,88094,51804],{"class":51291},[102,88096,51298],{"class":112},[102,88098,88099,88101,88103],{"class":104,"line":9754},[102,88100,51776],{"class":112},[102,88102,51791],{"class":51291},[102,88104,51298],{"class":112},[102,88106,88107],{"class":104,"line":9778},[102,88108,2389],{"emptyLinePlaceholder":30},[102,88110,88111,88113,88115],{"class":104,"line":9783},[102,88112,51776],{"class":112},[102,88114,50626],{"class":51291},[102,88116,51298],{"class":112},[19,88118,88119],{},[1451,88120],{"alt":23,"src":88121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21988,88123,88125,88126],{"id":88124},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[262,88127,88128],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88130,88131],{},[351,88132,88133],{"href":88133,"rel":88134},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23855],[19,88136,88137],{},"lodash里边的方法都要加上一个下划线_",[19,88139,88140],{},"_.cloneDeep()",[93,88142,88144],{"className":50624,"code":88143,"language":50626,"meta":23,"style":23},"\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",[99,88145,88146,88156,88170,88174,88182,88196,88216,88228,88236,88240,88248,88253,88272,88280,88290,88298,88306,88318,88322,88328,88332,88336,88352,88360,88369,88377,88385,88393,88397],{"__ignoreMap":23},[102,88147,88148,88150,88152,88154],{"class":104,"line":105},[102,88149,51288],{"class":112},[102,88151,51292],{"class":51291},[102,88153,51295],{"class":1952},[102,88155,51298],{"class":112},[102,88157,88158,88160,88162,88164,88166,88168],{"class":104,"line":24},[102,88159,1023],{"class":112},[102,88161,50626],{"class":51291},[102,88163,51307],{"class":1952},[102,88165,158],{"class":112},[102,88167,51312],{"class":217},[102,88169,51298],{"class":112},[102,88171,88172],{"class":104,"line":1168},[102,88173,2389],{"emptyLinePlaceholder":30},[102,88175,88176,88178,88180],{"class":104,"line":1183},[102,88177,1023],{"class":112},[102,88179,51325],{"class":51291},[102,88181,51298],{"class":112},[102,88183,88184,88186,88188,88190,88192,88194],{"class":104,"line":1189},[102,88185,52135],{"class":112},[102,88187,51335],{"class":51291},[102,88189,51338],{"class":1952},[102,88191,158],{"class":112},[102,88193,51343],{"class":217},[102,88195,51298],{"class":112},[102,88197,88198,88200,88202,88204,88206,88208,88210,88212,88214],{"class":104,"line":1203},[102,88199,52135],{"class":112},[102,88201,51335],{"class":51291},[102,88203,14910],{"class":1952},[102,88205,158],{"class":112},[102,88207,51382],{"class":217},[102,88209,51362],{"class":1952},[102,88211,158],{"class":112},[102,88213,51389],{"class":217},[102,88215,51298],{"class":112},[102,88217,88218,88220,88222,88224,88226],{"class":104,"line":1209},[102,88219,52135],{"class":112},[102,88221,51398],{"class":51291},[102,88223,51401],{"class":112},[102,88225,51398],{"class":51291},[102,88227,51298],{"class":112},[102,88229,88230,88232,88234],{"class":104,"line":1300},[102,88231,51776],{"class":112},[102,88233,51325],{"class":51291},[102,88235,51298],{"class":112},[102,88237,88238],{"class":104,"line":1306},[102,88239,2389],{"emptyLinePlaceholder":30},[102,88241,88242,88244,88246],{"class":104,"line":1318},[102,88243,1023],{"class":112},[102,88245,51791],{"class":51291},[102,88247,51298],{"class":112},[102,88249,88250],{"class":104,"line":1601},[102,88251,88252],{"class":171},"  \u003C!-- 先引用这个库 -->\n",[102,88254,88255,88257,88259,88261,88263,88266,88268,88270],{"class":104,"line":1606},[102,88256,52135],{"class":112},[102,88258,51804],{"class":51291},[102,88260,55230],{"class":1952},[102,88262,158],{"class":112},[102,88264,88265],{"class":217},"\"lodash.min.js\"",[102,88267,55305],{"class":112},[102,88269,51804],{"class":51291},[102,88271,51298],{"class":112},[102,88273,88274,88276,88278],{"class":104,"line":1612},[102,88275,52135],{"class":112},[102,88277,51804],{"class":51291},[102,88279,51298],{"class":112},[102,88281,88282,88284,88286,88288],{"class":104,"line":1617},[102,88283,11211],{"class":108},[102,88285,69962],{"class":161},[102,88287,13554],{"class":108},[102,88289,15562],{"class":112},[102,88291,88292,88294,88296],{"class":104,"line":1631},[102,88293,71607],{"class":112},[102,88295,87801],{"class":217},[102,88297,31457],{"class":112},[102,88299,88300,88302,88304],{"class":104,"line":1636},[102,88301,71617],{"class":112},[102,88303,763],{"class":161},[102,88305,31457],{"class":112},[102,88307,88308,88310,88312,88314,88316],{"class":104,"line":1642},[102,88309,87816],{"class":112},[102,88311,87819],{"class":217},[102,88313,12425],{"class":112},[102,88315,87824],{"class":217},[102,88317,87827],{"class":112},[102,88319,88320],{"class":104,"line":1663},[102,88321,77863],{"class":112},[102,88323,88324,88326],{"class":104,"line":1668},[102,88325,87836],{"class":112},[102,88327,87839],{"class":217},[102,88329,88330],{"class":104,"line":1682},[102,88331,52389],{"class":112},[102,88333,88334],{"class":104,"line":1687},[102,88335,2176],{"class":112},[102,88337,88338,88340,88342,88344,88347,88350],{"class":104,"line":1716},[102,88339,11211],{"class":108},[102,88341,87854],{"class":161},[102,88343,13554],{"class":108},[102,88345,88346],{"class":112}," _.",[102,88348,88349],{"class":1952},"cloneDeep",[102,88351,70027],{"class":112},[102,88353,88354,88356,88358],{"class":104,"line":1721},[102,88355,73744],{"class":112},[102,88357,58238],{"class":1952},[102,88359,88046],{"class":112},[102,88361,88362,88365,88367],{"class":104,"line":1738},[102,88363,88364],{"class":112},"    o.family.baby ",[102,88366,158],{"class":108},[102,88368,88080],{"class":217},[102,88370,88371,88373,88375],{"class":104,"line":1743},[102,88372,73744],{"class":112},[102,88374,58238],{"class":1952},[102,88376,70027],{"class":112},[102,88378,88379,88381,88383],{"class":104,"line":1748},[102,88380,52408],{"class":112},[102,88382,51804],{"class":51291},[102,88384,51298],{"class":112},[102,88386,88387,88389,88391],{"class":104,"line":1753},[102,88388,51776],{"class":112},[102,88390,51791],{"class":51291},[102,88392,51298],{"class":112},[102,88394,88395],{"class":104,"line":1767},[102,88396,2389],{"emptyLinePlaceholder":30},[102,88398,88399,88401,88403],{"class":104,"line":1772},[102,88400,51776],{"class":112},[102,88402,50626],{"class":51291},[102,88404,51298],{"class":112},[19,88406,88407],{},[1451,88408],{"alt":23,"src":88409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21988,88411,88413],{"id":88412},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[93,88415,88417],{"className":50624,"code":88416,"language":50626,"meta":23,"style":23},"\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",[99,88418,88419,88429,88443,88447,88455,88469,88489,88501,88509,88513,88521,88529,88539,88547,88555,88567,88571,88577,88581,88585,88590,88595,88600,88626,88634,88643,88651,88659,88667,88671],{"__ignoreMap":23},[102,88420,88421,88423,88425,88427],{"class":104,"line":105},[102,88422,51288],{"class":112},[102,88424,51292],{"class":51291},[102,88426,51295],{"class":1952},[102,88428,51298],{"class":112},[102,88430,88431,88433,88435,88437,88439,88441],{"class":104,"line":24},[102,88432,1023],{"class":112},[102,88434,50626],{"class":51291},[102,88436,51307],{"class":1952},[102,88438,158],{"class":112},[102,88440,51312],{"class":217},[102,88442,51298],{"class":112},[102,88444,88445],{"class":104,"line":1168},[102,88446,2389],{"emptyLinePlaceholder":30},[102,88448,88449,88451,88453],{"class":104,"line":1183},[102,88450,1023],{"class":112},[102,88452,51325],{"class":51291},[102,88454,51298],{"class":112},[102,88456,88457,88459,88461,88463,88465,88467],{"class":104,"line":1189},[102,88458,52135],{"class":112},[102,88460,51335],{"class":51291},[102,88462,51338],{"class":1952},[102,88464,158],{"class":112},[102,88466,51343],{"class":217},[102,88468,51298],{"class":112},[102,88470,88471,88473,88475,88477,88479,88481,88483,88485,88487],{"class":104,"line":1203},[102,88472,52135],{"class":112},[102,88474,51335],{"class":51291},[102,88476,14910],{"class":1952},[102,88478,158],{"class":112},[102,88480,51382],{"class":217},[102,88482,51362],{"class":1952},[102,88484,158],{"class":112},[102,88486,51389],{"class":217},[102,88488,51298],{"class":112},[102,88490,88491,88493,88495,88497,88499],{"class":104,"line":1209},[102,88492,52135],{"class":112},[102,88494,51398],{"class":51291},[102,88496,51401],{"class":112},[102,88498,51398],{"class":51291},[102,88500,51298],{"class":112},[102,88502,88503,88505,88507],{"class":104,"line":1300},[102,88504,51776],{"class":112},[102,88506,51325],{"class":51291},[102,88508,51298],{"class":112},[102,88510,88511],{"class":104,"line":1306},[102,88512,2389],{"emptyLinePlaceholder":30},[102,88514,88515,88517,88519],{"class":104,"line":1318},[102,88516,1023],{"class":112},[102,88518,51791],{"class":51291},[102,88520,51298],{"class":112},[102,88522,88523,88525,88527],{"class":104,"line":1601},[102,88524,52135],{"class":112},[102,88526,51804],{"class":51291},[102,88528,51298],{"class":112},[102,88530,88531,88533,88535,88537],{"class":104,"line":1606},[102,88532,11211],{"class":108},[102,88534,69962],{"class":161},[102,88536,13554],{"class":108},[102,88538,15562],{"class":112},[102,88540,88541,88543,88545],{"class":104,"line":1612},[102,88542,71607],{"class":112},[102,88544,87801],{"class":217},[102,88546,31457],{"class":112},[102,88548,88549,88551,88553],{"class":104,"line":1617},[102,88550,71617],{"class":112},[102,88552,763],{"class":161},[102,88554,31457],{"class":112},[102,88556,88557,88559,88561,88563,88565],{"class":104,"line":1631},[102,88558,87816],{"class":112},[102,88560,87819],{"class":217},[102,88562,12425],{"class":112},[102,88564,87824],{"class":217},[102,88566,87827],{"class":112},[102,88568,88569],{"class":104,"line":1636},[102,88570,77863],{"class":112},[102,88572,88573,88575],{"class":104,"line":1642},[102,88574,87836],{"class":112},[102,88576,87839],{"class":217},[102,88578,88579],{"class":104,"line":1663},[102,88580,52389],{"class":112},[102,88582,88583],{"class":104,"line":1668},[102,88584,2176],{"class":112},[102,88586,88587],{"class":104,"line":1682},[102,88588,88589],{"class":171},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[102,88591,88592],{"class":104,"line":1687},[102,88593,88594],{"class":171},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[102,88596,88597],{"class":104,"line":1716},[102,88598,88599],{"class":171},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[102,88601,88602,88604,88606,88608,88611,88613,88616,88618,88620,88622,88624],{"class":104,"line":1721},[102,88603,11211],{"class":108},[102,88605,87854],{"class":161},[102,88607,13554],{"class":108},[102,88609,88610],{"class":161}," JSON",[102,88612,671],{"class":112},[102,88614,88615],{"class":1952},"parse",[102,88617,113],{"class":112},[102,88619,71655],{"class":161},[102,88621,671],{"class":112},[102,88623,71660],{"class":1952},[102,88625,71663],{"class":112},[102,88627,88628,88630,88632],{"class":104,"line":1738},[102,88629,73744],{"class":112},[102,88631,58238],{"class":1952},[102,88633,88046],{"class":112},[102,88635,88636,88638,88640],{"class":104,"line":1743},[102,88637,88364],{"class":112},[102,88639,158],{"class":108},[102,88641,88642],{"class":217}," '123'\n",[102,88644,88645,88647,88649],{"class":104,"line":1748},[102,88646,73744],{"class":112},[102,88648,58238],{"class":1952},[102,88650,70027],{"class":112},[102,88652,88653,88655,88657],{"class":104,"line":1753},[102,88654,52408],{"class":112},[102,88656,51804],{"class":51291},[102,88658,51298],{"class":112},[102,88660,88661,88663,88665],{"class":104,"line":1767},[102,88662,51776],{"class":112},[102,88664,51791],{"class":51291},[102,88666,51298],{"class":112},[102,88668,88669],{"class":104,"line":1772},[102,88670,2389],{"emptyLinePlaceholder":30},[102,88672,88673,88675,88677],{"class":104,"line":2566},[102,88674,51776],{"class":112},[102,88676,50626],{"class":51291},[102,88678,51298],{"class":112},[19,88680,88681],{},[1451,88682],{"alt":23,"src":88683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88685,88687],{"id":88686},"_415-异常处理","4.15 异常处理",[56,88689,88690],{},[59,88691,88692],{},"throw抛异常",[19,88694,88695],{},[1451,88696],{"alt":23,"src":88697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[56,88699,88700],{"start":24},[59,88701,88702],{},"try\u002Fcatch 捕获错误信息",[19,88704,88705],{},[1451,88706],{"alt":23,"src":88707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[93,88709,88711],{"className":50624,"code":88710,"language":50626,"meta":23,"style":23},"\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",[99,88712,88713,88723,88737,88741,88749,88763,88783,88795,88803,88807,88815,88827,88835,88844,88851,88856,88875,88884,88895,88900,88910,88915,88920,88925,88942,88946,88951,88958,88970,88974,88986,88990,88994,88999,89004,89011,89019,89027,89031],{"__ignoreMap":23},[102,88714,88715,88717,88719,88721],{"class":104,"line":105},[102,88716,51288],{"class":112},[102,88718,51292],{"class":51291},[102,88720,51295],{"class":1952},[102,88722,51298],{"class":112},[102,88724,88725,88727,88729,88731,88733,88735],{"class":104,"line":24},[102,88726,1023],{"class":112},[102,88728,50626],{"class":51291},[102,88730,51307],{"class":1952},[102,88732,158],{"class":112},[102,88734,51312],{"class":217},[102,88736,51298],{"class":112},[102,88738,88739],{"class":104,"line":1168},[102,88740,2389],{"emptyLinePlaceholder":30},[102,88742,88743,88745,88747],{"class":104,"line":1183},[102,88744,1023],{"class":112},[102,88746,51325],{"class":51291},[102,88748,51298],{"class":112},[102,88750,88751,88753,88755,88757,88759,88761],{"class":104,"line":1189},[102,88752,52135],{"class":112},[102,88754,51335],{"class":51291},[102,88756,51338],{"class":1952},[102,88758,158],{"class":112},[102,88760,51343],{"class":217},[102,88762,51298],{"class":112},[102,88764,88765,88767,88769,88771,88773,88775,88777,88779,88781],{"class":104,"line":1203},[102,88766,52135],{"class":112},[102,88768,51335],{"class":51291},[102,88770,14910],{"class":1952},[102,88772,158],{"class":112},[102,88774,51382],{"class":217},[102,88776,51362],{"class":1952},[102,88778,158],{"class":112},[102,88780,51389],{"class":217},[102,88782,51298],{"class":112},[102,88784,88785,88787,88789,88791,88793],{"class":104,"line":1209},[102,88786,52135],{"class":112},[102,88788,51398],{"class":51291},[102,88790,51401],{"class":112},[102,88792,51398],{"class":51291},[102,88794,51298],{"class":112},[102,88796,88797,88799,88801],{"class":104,"line":1300},[102,88798,51776],{"class":112},[102,88800,51325],{"class":51291},[102,88802,51298],{"class":112},[102,88804,88805],{"class":104,"line":1306},[102,88806,2389],{"emptyLinePlaceholder":30},[102,88808,88809,88811,88813],{"class":104,"line":1318},[102,88810,1023],{"class":112},[102,88812,51791],{"class":51291},[102,88814,51298],{"class":112},[102,88816,88817,88819,88821,88823,88825],{"class":104,"line":1601},[102,88818,52135],{"class":112},[102,88820,19],{"class":51291},[102,88822,53485],{"class":112},[102,88824,19],{"class":51291},[102,88826,51298],{"class":112},[102,88828,88829,88831,88833],{"class":104,"line":1606},[102,88830,52135],{"class":112},[102,88832,51804],{"class":51291},[102,88834,51298],{"class":112},[102,88836,88837,88839,88842],{"class":104,"line":1612},[102,88838,70075],{"class":108},[102,88840,88841],{"class":1952}," fn",[102,88843,10843],{"class":112},[102,88845,88846,88849],{"class":104,"line":1617},[102,88847,88848],{"class":108},"      try",[102,88850,15562],{"class":112},[102,88852,88853],{"class":104,"line":1631},[102,88854,88855],{"class":171},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[102,88857,88858,88860,88862,88864,88866,88868,88870,88873],{"class":104,"line":1636},[102,88859,61261],{"class":108},[102,88861,6815],{"class":161},[102,88863,13554],{"class":108},[102,88865,54387],{"class":112},[102,88867,54390],{"class":1952},[102,88869,113],{"class":112},[102,88871,88872],{"class":217},"'.p'",[102,88874,119],{"class":112},[102,88876,88877,88880,88882],{"class":104,"line":1642},[102,88878,88879],{"class":112},"        p.style.color ",[102,88881,158],{"class":108},[102,88883,67042],{"class":217},[102,88885,88886,88889,88892],{"class":104,"line":1663},[102,88887,88888],{"class":112},"      } ",[102,88890,88891],{"class":108},"catch",[102,88893,88894],{"class":112}," (err) {\n",[102,88896,88897],{"class":104,"line":1668},[102,88898,88899],{"class":171},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[102,88901,88902,88905,88907],{"class":104,"line":1682},[102,88903,88904],{"class":112},"        console.",[102,88906,58238],{"class":1952},[102,88908,88909],{"class":112},"(err.message)\n",[102,88911,88912],{"class":104,"line":1687},[102,88913,88914],{"class":171},"        \u002F\u002F 想要中断程序，需要加return\n",[102,88916,88917],{"class":104,"line":1716},[102,88918,88919],{"class":171},"        \u002F\u002F return\n",[102,88921,88922],{"class":104,"line":1721},[102,88923,88924],{"class":171},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[102,88926,88927,88930,88932,88935,88937,88940],{"class":104,"line":1738},[102,88928,88929],{"class":108},"        throw",[102,88931,11568],{"class":108},[102,88933,88934],{"class":1952}," Error",[102,88936,113],{"class":112},[102,88938,88939],{"class":217},"'你看看，选择器错误了吧'",[102,88941,119],{"class":112},[102,88943,88944],{"class":104,"line":1743},[102,88945,52389],{"class":112},[102,88947,88948],{"class":104,"line":1748},[102,88949,88950],{"class":171},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[102,88952,88953,88956],{"class":104,"line":1753},[102,88954,88955],{"class":108},"      finally",[102,88957,15562],{"class":112},[102,88959,88960,88963,88965,88968],{"class":104,"line":1767},[102,88961,88962],{"class":1952},"        alert",[102,88964,113],{"class":112},[102,88966,88967],{"class":217},"'弹出对话框'",[102,88969,119],{"class":112},[102,88971,88972],{"class":104,"line":1772},[102,88973,52389],{"class":112},[102,88975,88976,88978,88980,88982,88984],{"class":104,"line":2566},[102,88977,58235],{"class":112},[102,88979,58238],{"class":1952},[102,88981,113],{"class":112},[102,88983,585],{"class":161},[102,88985,119],{"class":112},[102,88987,88988],{"class":104,"line":2580},[102,88989,2389],{"emptyLinePlaceholder":30},[102,88991,88992],{"class":104,"line":2588},[102,88993,2176],{"class":112},[102,88995,88996],{"class":104,"line":2593},[102,88997,88998],{"class":171},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[102,89000,89001],{"class":104,"line":2599},[102,89002,89003],{"class":171},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[102,89005,89006,89009],{"class":104,"line":2605},[102,89007,89008],{"class":1952},"    fn",[102,89010,1965],{"class":112},[102,89012,89013,89015,89017],{"class":104,"line":2610},[102,89014,52408],{"class":112},[102,89016,51804],{"class":51291},[102,89018,51298],{"class":112},[102,89020,89021,89023,89025],{"class":104,"line":7938},[102,89022,51776],{"class":112},[102,89024,51791],{"class":51291},[102,89026,51298],{"class":112},[102,89028,89029],{"class":104,"line":7962},[102,89030,2389],{"emptyLinePlaceholder":30},[102,89032,89033,89035,89037],{"class":104,"line":7967},[102,89034,51776],{"class":112},[102,89036,50626],{"class":51291},[102,89038,51298],{"class":112},[19,89040,89041],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[56,89043,89044],{"start":1168},[59,89045,89046],{},"debugger",[19,89048,89049],{},[1451,89050],{"alt":23,"src":89051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89053,89054],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89056,89058],{"id":89057},"_416-处理this","4.16 处理this",[73,89060,89062],{"id":89061},"_4161-this的指向","4.16.1 this的指向",[56,89064,89065],{},[59,89066,89067],{},"普通函数的this",[19,89069,89070],{},[1451,89071],{"alt":23,"src":89072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[56,89074,89075],{"start":24},[59,89076,89077],{},"箭头函数的this",[19,89079,89080],{},[1451,89081],{"alt":23,"src":89082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89084,89085],{},[1451,89086],{"alt":23,"src":89087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89089,89090],{},[1451,89091],{"alt":23,"src":89092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[73,89094,89096],{"id":89095},"_4162-this的改变","4.16.2 this的改变",[19,89098,89099],{},"call() apply() bind()",[56,89101,89102],{},[59,89103,89104],{},"call()",[19,89106,89107],{},[1451,89108],{"alt":23,"src":89109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89111,89112],{},"两个作用：①调用函数；②改变this指向",[93,89114,89116],{"className":53058,"code":89115,"language":53060,"meta":23,"style":23},"\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",[99,89117,89118,89126,89134,89138,89143,89147,89152,89157,89162,89166,89171,89179],{"__ignoreMap":23},[102,89119,89120,89122,89124],{"class":104,"line":105},[102,89121,1023],{"class":112},[102,89123,51791],{"class":51291},[102,89125,51298],{"class":112},[102,89127,89128,89130,89132],{"class":104,"line":24},[102,89129,52135],{"class":112},[102,89131,51804],{"class":51291},[102,89133,51298],{"class":112},[102,89135,89136],{"class":104,"line":1168},[102,89137,71514],{"class":112},[102,89139,89140],{"class":104,"line":1183},[102,89141,89142],{"class":112},"      uname: 'pink'\n",[102,89144,89145],{"class":104,"line":1189},[102,89146,2176],{"class":112},[102,89148,89149],{"class":104,"line":1203},[102,89150,89151],{"class":112},"    function fn(x, y) {\n",[102,89153,89154],{"class":104,"line":1209},[102,89155,89156],{"class":112},"      console.log(this)  \u002F\u002Fwindow\n",[102,89158,89159],{"class":104,"line":1300},[102,89160,89161],{"class":112},"      console.log(x + y)\n",[102,89163,89164],{"class":104,"line":1306},[102,89165,2176],{"class":112},[102,89167,89168],{"class":104,"line":1318},[102,89169,89170],{"class":112},"    fn.call(obj, 1, 2)\n",[102,89172,89173,89175,89177],{"class":104,"line":1601},[102,89174,52408],{"class":112},[102,89176,51804],{"class":51291},[102,89178,51298],{"class":112},[102,89180,89181,89183,89185],{"class":104,"line":1606},[102,89182,51776],{"class":112},[102,89184,51791],{"class":51291},[102,89186,51298],{"class":112},[19,89188,89189],{},[1451,89190],{"alt":23,"src":89191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[56,89193,89194],{"start":24},[59,89195,89196],{},"apply()",[19,89198,89199],{},[1451,89200],{"alt":23,"src":89201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89203,89112],{},[19,89205,89206],{},"call传递的是普通参数，而apply必须传递的是数组",[93,89208,89210],{"className":50624,"code":89209,"language":50626,"meta":23,"style":23},"\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",[99,89211,89212,89222,89236,89240,89248,89262,89282,89294,89302,89306,89314,89322,89332,89339,89343,89348,89364,89376,89390,89394,89399,89418,89423,89427,89432,89437,89445,89450,89472,89477,89493,89509,89521,89525,89530,89549,89557,89565,89569],{"__ignoreMap":23},[102,89213,89214,89216,89218,89220],{"class":104,"line":105},[102,89215,51288],{"class":112},[102,89217,51292],{"class":51291},[102,89219,51295],{"class":1952},[102,89221,51298],{"class":112},[102,89223,89224,89226,89228,89230,89232,89234],{"class":104,"line":24},[102,89225,1023],{"class":112},[102,89227,50626],{"class":51291},[102,89229,51307],{"class":1952},[102,89231,158],{"class":112},[102,89233,51312],{"class":217},[102,89235,51298],{"class":112},[102,89237,89238],{"class":104,"line":1168},[102,89239,2389],{"emptyLinePlaceholder":30},[102,89241,89242,89244,89246],{"class":104,"line":1183},[102,89243,1023],{"class":112},[102,89245,51325],{"class":51291},[102,89247,51298],{"class":112},[102,89249,89250,89252,89254,89256,89258,89260],{"class":104,"line":1189},[102,89251,52135],{"class":112},[102,89253,51335],{"class":51291},[102,89255,51338],{"class":1952},[102,89257,158],{"class":112},[102,89259,51343],{"class":217},[102,89261,51298],{"class":112},[102,89263,89264,89266,89268,89270,89272,89274,89276,89278,89280],{"class":104,"line":1203},[102,89265,52135],{"class":112},[102,89267,51335],{"class":51291},[102,89269,14910],{"class":1952},[102,89271,158],{"class":112},[102,89273,51382],{"class":217},[102,89275,51362],{"class":1952},[102,89277,158],{"class":112},[102,89279,51389],{"class":217},[102,89281,51298],{"class":112},[102,89283,89284,89286,89288,89290,89292],{"class":104,"line":1209},[102,89285,52135],{"class":112},[102,89287,51398],{"class":51291},[102,89289,51401],{"class":112},[102,89291,51398],{"class":51291},[102,89293,51298],{"class":112},[102,89295,89296,89298,89300],{"class":104,"line":1300},[102,89297,51776],{"class":112},[102,89299,51325],{"class":51291},[102,89301,51298],{"class":112},[102,89303,89304],{"class":104,"line":1306},[102,89305,2389],{"emptyLinePlaceholder":30},[102,89307,89308,89310,89312],{"class":104,"line":1318},[102,89309,1023],{"class":112},[102,89311,51791],{"class":51291},[102,89313,51298],{"class":112},[102,89315,89316,89318,89320],{"class":104,"line":1601},[102,89317,52135],{"class":112},[102,89319,51804],{"class":51291},[102,89321,51298],{"class":112},[102,89323,89324,89326,89328,89330],{"class":104,"line":1606},[102,89325,11211],{"class":108},[102,89327,69962],{"class":161},[102,89329,13554],{"class":108},[102,89331,15562],{"class":112},[102,89333,89334,89336],{"class":104,"line":1612},[102,89335,71617],{"class":112},[102,89337,89338],{"class":161},"18\n",[102,89340,89341],{"class":104,"line":1617},[102,89342,2176],{"class":112},[102,89344,89345],{"class":104,"line":1631},[102,89346,89347],{"class":171},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[102,89349,89350,89352,89354,89356,89358,89360,89362],{"class":104,"line":1636},[102,89351,70075],{"class":108},[102,89353,88841],{"class":1952},[102,89355,113],{"class":112},[102,89357,933],{"class":5206},[102,89359,12425],{"class":112},[102,89361,958],{"class":5206},[102,89363,12432],{"class":112},[102,89365,89366,89368,89370,89372,89374],{"class":104,"line":1642},[102,89367,58235],{"class":112},[102,89369,58238],{"class":1952},[102,89371,113],{"class":112},[102,89373,86984],{"class":161},[102,89375,119],{"class":112},[102,89377,89378,89380,89382,89385,89387],{"class":104,"line":1663},[102,89379,58235],{"class":112},[102,89381,58238],{"class":1952},[102,89383,89384],{"class":112},"(x ",[102,89386,594],{"class":108},[102,89388,89389],{"class":112}," y)\n",[102,89391,89392],{"class":104,"line":1668},[102,89393,2176],{"class":112},[102,89395,89396],{"class":104,"line":1682},[102,89397,89398],{"class":171},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[102,89400,89401,89404,89407,89410,89412,89414,89416],{"class":104,"line":1687},[102,89402,89403],{"class":112},"    fn.",[102,89405,89406],{"class":1952},"apply",[102,89408,89409],{"class":112},"(obj, [",[102,89411,330],{"class":161},[102,89413,12425],{"class":112},[102,89415,190],{"class":161},[102,89417,4646],{"class":112},[102,89419,89420],{"class":104,"line":1716},[102,89421,89422],{"class":171},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[102,89424,89425],{"class":104,"line":1721},[102,89426,2389],{"emptyLinePlaceholder":30},[102,89428,89429],{"class":104,"line":1738},[102,89430,89431],{"class":171},"    \u002F\u002F 使用场景：求数组最大值\n",[102,89433,89434],{"class":104,"line":1743},[102,89435,89436],{"class":171},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[102,89438,89439,89442],{"class":104,"line":1748},[102,89440,89441],{"class":171},"    \u002F\u002F console.log(max)",[102,89443,89444],{"class":171},"   \u002F\u002F3\n",[102,89446,89447],{"class":104,"line":1753},[102,89448,89449],{"class":171},"    \u002F\u002F 指向空或者Math都是可以的\n",[102,89451,89452,89454,89456,89458,89460,89462,89464,89466,89468,89470],{"class":104,"line":1767},[102,89453,11211],{"class":108},[102,89455,57686],{"class":161},[102,89457,13554],{"class":108},[102,89459,52217],{"class":112},[102,89461,424],{"class":161},[102,89463,12425],{"class":112},[102,89465,617],{"class":161},[102,89467,12425],{"class":112},[102,89469,648],{"class":161},[102,89471,33237],{"class":112},[102,89473,89474],{"class":104,"line":1772},[102,89475,89476],{"class":171},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[102,89478,89479,89481,89483,89485,89488,89490],{"class":104,"line":2566},[102,89480,11211],{"class":108},[102,89482,5941],{"class":161},[102,89484,13554],{"class":108},[102,89486,89487],{"class":112}," Math.max.",[102,89489,89406],{"class":1952},[102,89491,89492],{"class":112},"(Math, arr)\n",[102,89494,89495,89497,89500,89502,89505,89507],{"class":104,"line":2580},[102,89496,11211],{"class":108},[102,89498,89499],{"class":161}," min",[102,89501,13554],{"class":108},[102,89503,89504],{"class":112}," Math.min.",[102,89506,89406],{"class":1952},[102,89508,89492],{"class":112},[102,89510,89511,89513,89515,89518],{"class":104,"line":2588},[102,89512,73744],{"class":112},[102,89514,58238],{"class":1952},[102,89516,89517],{"class":112},"(max, min)     ",[102,89519,89520],{"class":171},"\u002F\u002F100,4\n",[102,89522,89523],{"class":104,"line":2593},[102,89524,2389],{"emptyLinePlaceholder":30},[102,89526,89527],{"class":104,"line":2599},[102,89528,89529],{"class":171},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[102,89531,89532,89534,89536,89539,89541,89543,89546],{"class":104,"line":2605},[102,89533,73744],{"class":112},[102,89535,58238],{"class":1952},[102,89537,89538],{"class":112},"(Max.",[102,89540,6005],{"class":1952},[102,89542,113],{"class":112},[102,89544,89545],{"class":108},"...",[102,89547,89548],{"class":112},"arr))\n",[102,89550,89551,89553,89555],{"class":104,"line":2610},[102,89552,52408],{"class":112},[102,89554,51804],{"class":51291},[102,89556,51298],{"class":112},[102,89558,89559,89561,89563],{"class":104,"line":7938},[102,89560,51776],{"class":112},[102,89562,51791],{"class":51291},[102,89564,51298],{"class":112},[102,89566,89567],{"class":104,"line":7962},[102,89568,2389],{"emptyLinePlaceholder":30},[102,89570,89571,89573,89575],{"class":104,"line":7967},[102,89572,51776],{"class":112},[102,89574,50626],{"class":51291},[102,89576,51298],{"class":112},[19,89578,89579],{},[1451,89580],{"alt":23,"src":89581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[56,89583,89584],{"start":1168},[59,89585,89586],{},"bind()",[19,89588,89589],{},[1451,89590],{"alt":23,"src":89591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89593,89594],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89596,89597],{},"bind的语法跟call很相似",[93,89599,89601],{"className":53058,"code":89600,"language":53060,"meta":23,"style":23},"\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",[99,89602,89603,89611,89619,89623,89628,89632,89636,89641,89645,89650,89655,89660,89665,89670,89675,89680,89684,89692],{"__ignoreMap":23},[102,89604,89605,89607,89609],{"class":104,"line":105},[102,89606,1023],{"class":112},[102,89608,51791],{"class":51291},[102,89610,51298],{"class":112},[102,89612,89613,89615,89617],{"class":104,"line":24},[102,89614,52135],{"class":112},[102,89616,51804],{"class":51291},[102,89618,51298],{"class":112},[102,89620,89621],{"class":104,"line":1168},[102,89622,71514],{"class":112},[102,89624,89625],{"class":104,"line":1183},[102,89626,89627],{"class":112},"      age: 18\n",[102,89629,89630],{"class":104,"line":1189},[102,89631,2176],{"class":112},[102,89633,89634],{"class":104,"line":1203},[102,89635,77134],{"class":112},[102,89637,89638],{"class":104,"line":1209},[102,89639,89640],{"class":112},"      console.log(this)\n",[102,89642,89643],{"class":104,"line":1300},[102,89644,2176],{"class":112},[102,89646,89647],{"class":104,"line":1306},[102,89648,89649],{"class":112},"    \u002F\u002F 1.bind 不会调用函数\n",[102,89651,89652],{"class":104,"line":1318},[102,89653,89654],{"class":112},"    \u002F\u002F 2.bind能改变this的指向\n",[102,89656,89657],{"class":104,"line":1601},[102,89658,89659],{"class":112},"    fn.bind()\n",[102,89661,89662],{"class":104,"line":1606},[102,89663,89664],{"class":112},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[102,89666,89667],{"class":104,"line":1612},[102,89668,89669],{"class":112},"    const fun = fn.bind(obj)\n",[102,89671,89672],{"class":104,"line":1617},[102,89673,89674],{"class":112},"    \u002F\u002F console.log(fun)\n",[102,89676,89677],{"class":104,"line":1631},[102,89678,89679],{"class":112},"    \u002F\u002F 调用,查看this的指向\n",[102,89681,89682],{"class":104,"line":1636},[102,89683,52642],{"class":112},[102,89685,89686,89688,89690],{"class":104,"line":1642},[102,89687,52408],{"class":112},[102,89689,51804],{"class":51291},[102,89691,51298],{"class":112},[102,89693,89694,89696,89698],{"class":104,"line":1663},[102,89695,51776],{"class":112},[102,89697,51791],{"class":51291},[102,89699,51298],{"class":112},[19,89701,89702],{},[1451,89703],{"alt":23,"src":89704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[56,89706,89707],{"start":1183},[59,89708,89709],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[93,89711,89713],{"className":53058,"code":89712,"language":53060,"meta":23,"style":23},"\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",[99,89714,89715,89723,89736,89744,89749,89753,89758,89763,89768,89773,89778,89783,89788,89793,89797,89805],{"__ignoreMap":23},[102,89716,89717,89719,89721],{"class":104,"line":105},[102,89718,1023],{"class":112},[102,89720,51791],{"class":51291},[102,89722,51298],{"class":112},[102,89724,89725,89727,89729,89732,89734],{"class":104,"line":24},[102,89726,52135],{"class":112},[102,89728,53878],{"class":51291},[102,89730,89731],{"class":112},">禁用\u003C\u002F",[102,89733,53878],{"class":51291},[102,89735,51298],{"class":112},[102,89737,89738,89740,89742],{"class":104,"line":1168},[102,89739,52135],{"class":112},[102,89741,51804],{"class":51291},[102,89743,51298],{"class":112},[102,89745,89746],{"class":104,"line":1183},[102,89747,89748],{"class":112},"    const btn = document.querySelector('button')\n",[102,89750,89751],{"class":104,"line":1189},[102,89752,59007],{"class":112},[102,89754,89755],{"class":104,"line":1203},[102,89756,89757],{"class":112},"      this.disabled = true\n",[102,89759,89760],{"class":104,"line":1209},[102,89761,89762],{"class":112},"      \u002F\u002F 定时器是window进行调用的\n",[102,89764,89765],{"class":104,"line":1300},[102,89766,89767],{"class":112},"      setTimeout(function () {\n",[102,89769,89770],{"class":104,"line":1306},[102,89771,89772],{"class":112},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[102,89774,89775],{"class":104,"line":1318},[102,89776,89777],{"class":112},"        this.disabled = false\n",[102,89779,89780],{"class":104,"line":1601},[102,89781,89782],{"class":112},"      }.bind(this), 2000)\n",[102,89784,89785],{"class":104,"line":1606},[102,89786,89787],{"class":112},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[102,89789,89790],{"class":104,"line":1612},[102,89791,89792],{"class":112},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[102,89794,89795],{"class":104,"line":1617},[102,89796,33452],{"class":112},[102,89798,89799,89801,89803],{"class":104,"line":1631},[102,89800,52408],{"class":112},[102,89802,51804],{"class":51291},[102,89804,51298],{"class":112},[102,89806,89807,89809,89811],{"class":104,"line":1636},[102,89808,51776],{"class":112},[102,89810,51791],{"class":51291},[102,89812,51298],{"class":112},[56,89814,89815],{"start":1189},[59,89816,21943],{},[19,89818,89819],{},[1451,89820],{"alt":23,"src":89821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,89823,89825],{"id":89824},"_417-性能优化","4.17 性能优化",[73,89827,89829],{"id":89828},"_4171-防抖","4.17.1 防抖",[19,89831,89832],{},[1451,89833],{"alt":23,"src":89834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,89836,89837],{},[262,89838,89839],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,89841,89842],{},"防抖实现方式：",[1120,89844,89845],{},[59,89846,89847],{},"lodash 提供了防抖处理",[19,89849,89850],{},"_.debounce(func,[wait=0],[options={}])",[19,89852,89853],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[93,89855,89857],{"className":50624,"code":89856,"language":50626,"meta":23,"style":23},"\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",[99,89858,89859,89869,89883,89887,89895,89909,89929,89941,89949,89955,89965,89977,89989,90000,90012,90022,90032,90045,90049,90057,90065,90069,90077,90095,90113,90121,90140,90150,90159,90170,90175,90179,90184,90189,90194,90219,90227,90235,90239],{"__ignoreMap":23},[102,89860,89861,89863,89865,89867],{"class":104,"line":105},[102,89862,51288],{"class":112},[102,89864,51292],{"class":51291},[102,89866,51295],{"class":1952},[102,89868,51298],{"class":112},[102,89870,89871,89873,89875,89877,89879,89881],{"class":104,"line":24},[102,89872,1023],{"class":112},[102,89874,50626],{"class":51291},[102,89876,51307],{"class":1952},[102,89878,158],{"class":112},[102,89880,51312],{"class":217},[102,89882,51298],{"class":112},[102,89884,89885],{"class":104,"line":1168},[102,89886,2389],{"emptyLinePlaceholder":30},[102,89888,89889,89891,89893],{"class":104,"line":1183},[102,89890,1023],{"class":112},[102,89892,51325],{"class":51291},[102,89894,51298],{"class":112},[102,89896,89897,89899,89901,89903,89905,89907],{"class":104,"line":1189},[102,89898,52135],{"class":112},[102,89900,51335],{"class":51291},[102,89902,51338],{"class":1952},[102,89904,158],{"class":112},[102,89906,51343],{"class":217},[102,89908,51298],{"class":112},[102,89910,89911,89913,89915,89917,89919,89921,89923,89925,89927],{"class":104,"line":1203},[102,89912,52135],{"class":112},[102,89914,51335],{"class":51291},[102,89916,14910],{"class":1952},[102,89918,158],{"class":112},[102,89920,51382],{"class":217},[102,89922,51362],{"class":1952},[102,89924,158],{"class":112},[102,89926,51389],{"class":217},[102,89928,51298],{"class":112},[102,89930,89931,89933,89935,89937,89939],{"class":104,"line":1209},[102,89932,52135],{"class":112},[102,89934,51398],{"class":51291},[102,89936,51401],{"class":112},[102,89938,51398],{"class":51291},[102,89940,51298],{"class":112},[102,89942,89943,89945,89947],{"class":104,"line":1300},[102,89944,52135],{"class":112},[102,89946,5116],{"class":51291},[102,89948,51298],{"class":112},[102,89950,89951,89953],{"class":104,"line":1306},[102,89952,54743],{"class":1952},[102,89954,15562],{"class":112},[102,89956,89957,89959,89961,89963],{"class":104,"line":1318},[102,89958,72587],{"class":161},[102,89960,51428],{"class":112},[102,89962,60496],{"class":161},[102,89964,1279],{"class":112},[102,89966,89967,89969,89971,89973,89975],{"class":104,"line":1601},[102,89968,54762],{"class":161},[102,89970,51428],{"class":112},[102,89972,1711],{"class":161},[102,89974,51483],{"class":108},[102,89976,1279],{"class":112},[102,89978,89979,89981,89983,89985,89987],{"class":104,"line":1606},[102,89980,54776],{"class":161},[102,89982,51428],{"class":112},[102,89984,1711],{"class":161},[102,89986,51483],{"class":108},[102,89988,1279],{"class":112},[102,89990,89991,89993,89995,89998],{"class":104,"line":1612},[102,89992,54875],{"class":161},[102,89994,51428],{"class":112},[102,89996,89997],{"class":161},"gray",[102,89999,1279],{"class":112},[102,90001,90002,90004,90006,90008,90010],{"class":104,"line":1617},[102,90003,54913],{"class":161},[102,90005,51428],{"class":112},[102,90007,938],{"class":161},[102,90009,51483],{"class":108},[102,90011,1279],{"class":112},[102,90013,90014,90016,90018,90020],{"class":104,"line":1631},[102,90015,57407],{"class":161},[102,90017,51428],{"class":112},[102,90019,60833],{"class":161},[102,90021,1279],{"class":112},[102,90023,90024,90026,90028,90030],{"class":104,"line":1636},[102,90025,57277],{"class":161},[102,90027,51428],{"class":112},[102,90029,51583],{"class":161},[102,90031,1279],{"class":112},[102,90033,90034,90037,90039,90041,90043],{"class":104,"line":1642},[102,90035,90036],{"class":161},"      padding-top",[102,90038,51428],{"class":112},[102,90040,432],{"class":161},[102,90042,51483],{"class":108},[102,90044,1279],{"class":112},[102,90046,90047],{"class":104,"line":1663},[102,90048,2176],{"class":112},[102,90050,90051,90053,90055],{"class":104,"line":1668},[102,90052,52408],{"class":112},[102,90054,5116],{"class":51291},[102,90056,51298],{"class":112},[102,90058,90059,90061,90063],{"class":104,"line":1682},[102,90060,51776],{"class":112},[102,90062,51325],{"class":51291},[102,90064,51298],{"class":112},[102,90066,90067],{"class":104,"line":1687},[102,90068,2389],{"emptyLinePlaceholder":30},[102,90070,90071,90073,90075],{"class":104,"line":1716},[102,90072,1023],{"class":112},[102,90074,51791],{"class":51291},[102,90076,51298],{"class":112},[102,90078,90079,90081,90083,90085,90087,90089,90091,90093],{"class":104,"line":1721},[102,90080,52135],{"class":112},[102,90082,51602],{"class":51291},[102,90084,53477],{"class":1952},[102,90086,158],{"class":112},[102,90088,53482],{"class":217},[102,90090,55305],{"class":112},[102,90092,51602],{"class":51291},[102,90094,51298],{"class":112},[102,90096,90097,90099,90101,90103,90105,90107,90109,90111],{"class":104,"line":1738},[102,90098,52135],{"class":112},[102,90100,51804],{"class":51291},[102,90102,55230],{"class":1952},[102,90104,158],{"class":112},[102,90106,88265],{"class":217},[102,90108,55305],{"class":112},[102,90110,51804],{"class":51291},[102,90112,51298],{"class":112},[102,90114,90115,90117,90119],{"class":104,"line":1743},[102,90116,52135],{"class":112},[102,90118,51804],{"class":51291},[102,90120,51298],{"class":112},[102,90122,90123,90125,90127,90129,90131,90133,90135,90138],{"class":104,"line":1748},[102,90124,11211],{"class":108},[102,90126,86924],{"class":161},[102,90128,13554],{"class":108},[102,90130,54387],{"class":112},[102,90132,54390],{"class":1952},[102,90134,113],{"class":112},[102,90136,90137],{"class":217},"'.box'",[102,90139,119],{"class":112},[102,90141,90142,90144,90146,90148],{"class":104,"line":1753},[102,90143,52210],{"class":108},[102,90145,9428],{"class":112},[102,90147,158],{"class":108},[102,90149,47324],{"class":161},[102,90151,90152,90154,90157],{"class":104,"line":1767},[102,90153,70075],{"class":108},[102,90155,90156],{"class":1952}," mouseMove",[102,90158,10843],{"class":112},[102,90160,90161,90164,90166,90168],{"class":104,"line":1772},[102,90162,90163],{"class":112},"      box.innerHTML ",[102,90165,158],{"class":108},[102,90167,3021],{"class":112},[102,90169,2691],{"class":108},[102,90171,90172],{"class":104,"line":2566},[102,90173,90174],{"class":171},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[102,90176,90177],{"class":104,"line":2580},[102,90178,2176],{"class":112},[102,90180,90181],{"class":104,"line":2588},[102,90182,90183],{"class":171},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[102,90185,90186],{"class":104,"line":2593},[102,90187,90188],{"class":171},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[102,90190,90191],{"class":104,"line":2599},[102,90192,90193],{"class":171},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[102,90195,90196,90199,90201,90203,90206,90209,90212,90215,90217],{"class":104,"line":2605},[102,90197,90198],{"class":112},"    box.",[102,90200,57804],{"class":1952},[102,90202,113],{"class":112},[102,90204,90205],{"class":217},"'mousemove'",[102,90207,90208],{"class":112},", _.",[102,90210,90211],{"class":1952},"debounce",[102,90213,90214],{"class":112},"(mouseMove, ",[102,90216,65065],{"class":161},[102,90218,30488],{"class":112},[102,90220,90221,90223,90225],{"class":104,"line":2610},[102,90222,52408],{"class":112},[102,90224,51804],{"class":51291},[102,90226,51298],{"class":112},[102,90228,90229,90231,90233],{"class":104,"line":7938},[102,90230,51776],{"class":112},[102,90232,51791],{"class":51291},[102,90234,51298],{"class":112},[102,90236,90237],{"class":104,"line":7962},[102,90238,2389],{"emptyLinePlaceholder":30},[102,90240,90241,90243,90245],{"class":104,"line":7967},[102,90242,51776],{"class":112},[102,90244,50626],{"class":51291},[102,90246,51298],{"class":112},[1120,90248,90249],{},[59,90250,90251],{},"手写一个防抖函数来处理",[19,90253,90254],{},"防抖的核心就是利用定时器来实现的：",[19,90256,90257],{},"①声明一个定时器变量",[19,90259,90260],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90262,90263],{},"③如果没有定时器则开启定时器，记得存到变量里面",[93,90265,90267],{"className":50624,"code":90266,"language":50626,"meta":23,"style":23},"\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",[99,90268,90269,90279,90293,90297,90305,90319,90339,90351,90359,90365,90375,90387,90399,90409,90421,90431,90441,90453,90457,90465,90473,90477,90485,90503,90521,90529,90547,90557,90565,90575,90579,90583,90587,90592,90597,90602,90607,90612,90617,90635,90642,90647,90655,90660,90673,90689,90699,90704,90708,90712,90732,90736,90741,90746,90751,90756,90764,90772,90776],{"__ignoreMap":23},[102,90270,90271,90273,90275,90277],{"class":104,"line":105},[102,90272,51288],{"class":112},[102,90274,51292],{"class":51291},[102,90276,51295],{"class":1952},[102,90278,51298],{"class":112},[102,90280,90281,90283,90285,90287,90289,90291],{"class":104,"line":24},[102,90282,1023],{"class":112},[102,90284,50626],{"class":51291},[102,90286,51307],{"class":1952},[102,90288,158],{"class":112},[102,90290,51312],{"class":217},[102,90292,51298],{"class":112},[102,90294,90295],{"class":104,"line":1168},[102,90296,2389],{"emptyLinePlaceholder":30},[102,90298,90299,90301,90303],{"class":104,"line":1183},[102,90300,1023],{"class":112},[102,90302,51325],{"class":51291},[102,90304,51298],{"class":112},[102,90306,90307,90309,90311,90313,90315,90317],{"class":104,"line":1189},[102,90308,52135],{"class":112},[102,90310,51335],{"class":51291},[102,90312,51338],{"class":1952},[102,90314,158],{"class":112},[102,90316,51343],{"class":217},[102,90318,51298],{"class":112},[102,90320,90321,90323,90325,90327,90329,90331,90333,90335,90337],{"class":104,"line":1203},[102,90322,52135],{"class":112},[102,90324,51335],{"class":51291},[102,90326,14910],{"class":1952},[102,90328,158],{"class":112},[102,90330,51382],{"class":217},[102,90332,51362],{"class":1952},[102,90334,158],{"class":112},[102,90336,51389],{"class":217},[102,90338,51298],{"class":112},[102,90340,90341,90343,90345,90347,90349],{"class":104,"line":1209},[102,90342,52135],{"class":112},[102,90344,51398],{"class":51291},[102,90346,51401],{"class":112},[102,90348,51398],{"class":51291},[102,90350,51298],{"class":112},[102,90352,90353,90355,90357],{"class":104,"line":1300},[102,90354,52135],{"class":112},[102,90356,5116],{"class":51291},[102,90358,51298],{"class":112},[102,90360,90361,90363],{"class":104,"line":1306},[102,90362,54743],{"class":1952},[102,90364,15562],{"class":112},[102,90366,90367,90369,90371,90373],{"class":104,"line":1318},[102,90368,72587],{"class":161},[102,90370,51428],{"class":112},[102,90372,60496],{"class":161},[102,90374,1279],{"class":112},[102,90376,90377,90379,90381,90383,90385],{"class":104,"line":1601},[102,90378,54762],{"class":161},[102,90380,51428],{"class":112},[102,90382,1711],{"class":161},[102,90384,51483],{"class":108},[102,90386,1279],{"class":112},[102,90388,90389,90391,90393,90395,90397],{"class":104,"line":1606},[102,90390,54776],{"class":161},[102,90392,51428],{"class":112},[102,90394,1711],{"class":161},[102,90396,51483],{"class":108},[102,90398,1279],{"class":112},[102,90400,90401,90403,90405,90407],{"class":104,"line":1612},[102,90402,54875],{"class":161},[102,90404,51428],{"class":112},[102,90406,89997],{"class":161},[102,90408,1279],{"class":112},[102,90410,90411,90413,90415,90417,90419],{"class":104,"line":1617},[102,90412,54913],{"class":161},[102,90414,51428],{"class":112},[102,90416,938],{"class":161},[102,90418,51483],{"class":108},[102,90420,1279],{"class":112},[102,90422,90423,90425,90427,90429],{"class":104,"line":1631},[102,90424,57407],{"class":161},[102,90426,51428],{"class":112},[102,90428,60833],{"class":161},[102,90430,1279],{"class":112},[102,90432,90433,90435,90437,90439],{"class":104,"line":1636},[102,90434,57277],{"class":161},[102,90436,51428],{"class":112},[102,90438,51583],{"class":161},[102,90440,1279],{"class":112},[102,90442,90443,90445,90447,90449,90451],{"class":104,"line":1642},[102,90444,90036],{"class":161},[102,90446,51428],{"class":112},[102,90448,432],{"class":161},[102,90450,51483],{"class":108},[102,90452,1279],{"class":112},[102,90454,90455],{"class":104,"line":1663},[102,90456,2176],{"class":112},[102,90458,90459,90461,90463],{"class":104,"line":1668},[102,90460,52408],{"class":112},[102,90462,5116],{"class":51291},[102,90464,51298],{"class":112},[102,90466,90467,90469,90471],{"class":104,"line":1682},[102,90468,51776],{"class":112},[102,90470,51325],{"class":51291},[102,90472,51298],{"class":112},[102,90474,90475],{"class":104,"line":1687},[102,90476,2389],{"emptyLinePlaceholder":30},[102,90478,90479,90481,90483],{"class":104,"line":1716},[102,90480,1023],{"class":112},[102,90482,51791],{"class":51291},[102,90484,51298],{"class":112},[102,90486,90487,90489,90491,90493,90495,90497,90499,90501],{"class":104,"line":1721},[102,90488,52135],{"class":112},[102,90490,51602],{"class":51291},[102,90492,53477],{"class":1952},[102,90494,158],{"class":112},[102,90496,53482],{"class":217},[102,90498,55305],{"class":112},[102,90500,51602],{"class":51291},[102,90502,51298],{"class":112},[102,90504,90505,90507,90509,90511,90513,90515,90517,90519],{"class":104,"line":1738},[102,90506,52135],{"class":112},[102,90508,51804],{"class":51291},[102,90510,55230],{"class":1952},[102,90512,158],{"class":112},[102,90514,88265],{"class":217},[102,90516,55305],{"class":112},[102,90518,51804],{"class":51291},[102,90520,51298],{"class":112},[102,90522,90523,90525,90527],{"class":104,"line":1743},[102,90524,52135],{"class":112},[102,90526,51804],{"class":51291},[102,90528,51298],{"class":112},[102,90530,90531,90533,90535,90537,90539,90541,90543,90545],{"class":104,"line":1748},[102,90532,11211],{"class":108},[102,90534,86924],{"class":161},[102,90536,13554],{"class":108},[102,90538,54387],{"class":112},[102,90540,54390],{"class":1952},[102,90542,113],{"class":112},[102,90544,90137],{"class":217},[102,90546,119],{"class":112},[102,90548,90549,90551,90553,90555],{"class":104,"line":1753},[102,90550,52210],{"class":108},[102,90552,9428],{"class":112},[102,90554,158],{"class":108},[102,90556,47324],{"class":161},[102,90558,90559,90561,90563],{"class":104,"line":1767},[102,90560,70075],{"class":108},[102,90562,90156],{"class":1952},[102,90564,10843],{"class":112},[102,90566,90567,90569,90571,90573],{"class":104,"line":1772},[102,90568,90163],{"class":112},[102,90570,158],{"class":108},[102,90572,3021],{"class":112},[102,90574,2691],{"class":108},[102,90576,90577],{"class":104,"line":2566},[102,90578,90174],{"class":171},[102,90580,90581],{"class":104,"line":2580},[102,90582,2176],{"class":112},[102,90584,90585],{"class":104,"line":2588},[102,90586,90183],{"class":171},[102,90588,90589],{"class":104,"line":2593},[102,90590,90591],{"class":171},"    \u002F\u002F 手写防抖函数\n",[102,90593,90594],{"class":104,"line":2599},[102,90595,90596],{"class":171},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[102,90598,90599],{"class":104,"line":2605},[102,90600,90601],{"class":171},"    \u002F\u002F 1.声明定时器变量\n",[102,90603,90604],{"class":104,"line":2610},[102,90605,90606],{"class":171},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[102,90608,90609],{"class":104,"line":7938},[102,90610,90611],{"class":171},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[102,90613,90614],{"class":104,"line":7962},[102,90615,90616],{"class":171},"    \u002F\u002F 4.定时器里面写函数调用\n",[102,90618,90619,90621,90624,90626,90629,90631,90633],{"class":104,"line":7967},[102,90620,70075],{"class":108},[102,90622,90623],{"class":1952}," debounce",[102,90625,113],{"class":112},[102,90627,90628],{"class":5206},"fn",[102,90630,12425],{"class":112},[102,90632,833],{"class":5206},[102,90634,12432],{"class":112},[102,90636,90637,90639],{"class":104,"line":7973},[102,90638,79763],{"class":108},[102,90640,90641],{"class":112}," timer\n",[102,90643,90644],{"class":104,"line":8000},[102,90645,90646],{"class":171},"      \u002F\u002F return 返回一个匿名函数\n",[102,90648,90649,90651,90653],{"class":104,"line":8005},[102,90650,73973],{"class":108},[102,90652,58909],{"class":108},[102,90654,54443],{"class":112},[102,90656,90657],{"class":104,"line":8011},[102,90658,90659],{"class":171},"        \u002F\u002F 这里边写第二三四步\n",[102,90661,90662,90664,90667,90670],{"class":104,"line":8023},[102,90663,2486],{"class":108},[102,90665,90666],{"class":112}," (timer) ",[102,90668,90669],{"class":1952},"clearTimeout",[102,90671,90672],{"class":112},"(timer)\n",[102,90674,90675,90678,90680,90683,90685,90687],{"class":104,"line":8035},[102,90676,90677],{"class":112},"        timer ",[102,90679,158],{"class":108},[102,90681,90682],{"class":1952}," setTimeout",[102,90684,113],{"class":112},[102,90686,54440],{"class":108},[102,90688,54443],{"class":112},[102,90690,90691,90694,90696],{"class":104,"line":8047},[102,90692,90693],{"class":1952},"          fn",[102,90695,13040],{"class":112},[102,90697,90698],{"class":171},"\u002F\u002F加小括号调用fn }, t)\n",[102,90700,90701],{"class":104,"line":9706},[102,90702,90703],{"class":112},"        }, t)\n",[102,90705,90706],{"class":104,"line":9731},[102,90707,52389],{"class":112},[102,90709,90710],{"class":104,"line":9754},[102,90711,2176],{"class":112},[102,90713,90714,90716,90718,90720,90722,90724,90726,90728,90730],{"class":104,"line":9778},[102,90715,90198],{"class":112},[102,90717,57804],{"class":1952},[102,90719,113],{"class":112},[102,90721,90205],{"class":217},[102,90723,12425],{"class":112},[102,90725,90211],{"class":1952},[102,90727,90214],{"class":112},[102,90729,65065],{"class":161},[102,90731,30488],{"class":112},[102,90733,90734],{"class":104,"line":9783},[102,90735,2389],{"emptyLinePlaceholder":30},[102,90737,90738],{"class":104,"line":9788},[102,90739,90740],{"class":171},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[102,90742,90743],{"class":104,"line":9793},[102,90744,90745],{"class":171},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[102,90747,90748],{"class":104,"line":9802},[102,90749,90750],{"class":171},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[102,90752,90753],{"class":104,"line":9807},[102,90754,90755],{"class":171},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[102,90757,90758,90760,90762],{"class":104,"line":9813},[102,90759,52408],{"class":112},[102,90761,51804],{"class":51291},[102,90763,51298],{"class":112},[102,90765,90766,90768,90770],{"class":104,"line":9834},[102,90767,51776],{"class":112},[102,90769,51791],{"class":51291},[102,90771,51298],{"class":112},[102,90773,90774],{"class":104,"line":9840},[102,90775,2389],{"emptyLinePlaceholder":30},[102,90777,90778,90780,90782],{"class":104,"line":9854},[102,90779,51776],{"class":112},[102,90781,50626],{"class":51291},[102,90783,51298],{"class":112},[73,90785,90787],{"id":90786},"_4172-节流","4.17.2 节流",[19,90789,90790],{},[1451,90791],{"alt":23,"src":90792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,90794,90795],{},[1451,90796],{"alt":23,"src":90797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,90799,90800],{},[262,90801,90802],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,90804,90805],{},"实现方式：",[1120,90807,90808],{},[59,90809,90810],{},"lodash 提供的节流函数来处理",[19,90812,90813],{},"_.throttle(func,[wait=0],[options=])",[19,90815,90816],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[93,90818,90820],{"className":50624,"code":90819,"language":50626,"meta":23,"style":23},"\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",[99,90821,90822,90832,90846,90850,90858,90872,90892,90904,90912,90918,90928,90940,90952,90962,90974,90984,90994,91006,91010,91018,91026,91030,91038,91056,91074,91082,91100,91110,91118,91128,91132,91136,91140,91145,91150,91171,91179,91187,91191],{"__ignoreMap":23},[102,90823,90824,90826,90828,90830],{"class":104,"line":105},[102,90825,51288],{"class":112},[102,90827,51292],{"class":51291},[102,90829,51295],{"class":1952},[102,90831,51298],{"class":112},[102,90833,90834,90836,90838,90840,90842,90844],{"class":104,"line":24},[102,90835,1023],{"class":112},[102,90837,50626],{"class":51291},[102,90839,51307],{"class":1952},[102,90841,158],{"class":112},[102,90843,51312],{"class":217},[102,90845,51298],{"class":112},[102,90847,90848],{"class":104,"line":1168},[102,90849,2389],{"emptyLinePlaceholder":30},[102,90851,90852,90854,90856],{"class":104,"line":1183},[102,90853,1023],{"class":112},[102,90855,51325],{"class":51291},[102,90857,51298],{"class":112},[102,90859,90860,90862,90864,90866,90868,90870],{"class":104,"line":1189},[102,90861,52135],{"class":112},[102,90863,51335],{"class":51291},[102,90865,51338],{"class":1952},[102,90867,158],{"class":112},[102,90869,51343],{"class":217},[102,90871,51298],{"class":112},[102,90873,90874,90876,90878,90880,90882,90884,90886,90888,90890],{"class":104,"line":1203},[102,90875,52135],{"class":112},[102,90877,51335],{"class":51291},[102,90879,14910],{"class":1952},[102,90881,158],{"class":112},[102,90883,51382],{"class":217},[102,90885,51362],{"class":1952},[102,90887,158],{"class":112},[102,90889,51389],{"class":217},[102,90891,51298],{"class":112},[102,90893,90894,90896,90898,90900,90902],{"class":104,"line":1209},[102,90895,52135],{"class":112},[102,90897,51398],{"class":51291},[102,90899,51401],{"class":112},[102,90901,51398],{"class":51291},[102,90903,51298],{"class":112},[102,90905,90906,90908,90910],{"class":104,"line":1300},[102,90907,52135],{"class":112},[102,90909,5116],{"class":51291},[102,90911,51298],{"class":112},[102,90913,90914,90916],{"class":104,"line":1306},[102,90915,54743],{"class":1952},[102,90917,15562],{"class":112},[102,90919,90920,90922,90924,90926],{"class":104,"line":1318},[102,90921,72587],{"class":161},[102,90923,51428],{"class":112},[102,90925,60496],{"class":161},[102,90927,1279],{"class":112},[102,90929,90930,90932,90934,90936,90938],{"class":104,"line":1601},[102,90931,54762],{"class":161},[102,90933,51428],{"class":112},[102,90935,1711],{"class":161},[102,90937,51483],{"class":108},[102,90939,1279],{"class":112},[102,90941,90942,90944,90946,90948,90950],{"class":104,"line":1606},[102,90943,54776],{"class":161},[102,90945,51428],{"class":112},[102,90947,1711],{"class":161},[102,90949,51483],{"class":108},[102,90951,1279],{"class":112},[102,90953,90954,90956,90958,90960],{"class":104,"line":1612},[102,90955,54875],{"class":161},[102,90957,51428],{"class":112},[102,90959,89997],{"class":161},[102,90961,1279],{"class":112},[102,90963,90964,90966,90968,90970,90972],{"class":104,"line":1617},[102,90965,54913],{"class":161},[102,90967,51428],{"class":112},[102,90969,938],{"class":161},[102,90971,51483],{"class":108},[102,90973,1279],{"class":112},[102,90975,90976,90978,90980,90982],{"class":104,"line":1631},[102,90977,57407],{"class":161},[102,90979,51428],{"class":112},[102,90981,60833],{"class":161},[102,90983,1279],{"class":112},[102,90985,90986,90988,90990,90992],{"class":104,"line":1636},[102,90987,57277],{"class":161},[102,90989,51428],{"class":112},[102,90991,51583],{"class":161},[102,90993,1279],{"class":112},[102,90995,90996,90998,91000,91002,91004],{"class":104,"line":1642},[102,90997,90036],{"class":161},[102,90999,51428],{"class":112},[102,91001,432],{"class":161},[102,91003,51483],{"class":108},[102,91005,1279],{"class":112},[102,91007,91008],{"class":104,"line":1663},[102,91009,2176],{"class":112},[102,91011,91012,91014,91016],{"class":104,"line":1668},[102,91013,52408],{"class":112},[102,91015,5116],{"class":51291},[102,91017,51298],{"class":112},[102,91019,91020,91022,91024],{"class":104,"line":1682},[102,91021,51776],{"class":112},[102,91023,51325],{"class":51291},[102,91025,51298],{"class":112},[102,91027,91028],{"class":104,"line":1687},[102,91029,2389],{"emptyLinePlaceholder":30},[102,91031,91032,91034,91036],{"class":104,"line":1716},[102,91033,1023],{"class":112},[102,91035,51791],{"class":51291},[102,91037,51298],{"class":112},[102,91039,91040,91042,91044,91046,91048,91050,91052,91054],{"class":104,"line":1721},[102,91041,52135],{"class":112},[102,91043,51602],{"class":51291},[102,91045,53477],{"class":1952},[102,91047,158],{"class":112},[102,91049,53482],{"class":217},[102,91051,55305],{"class":112},[102,91053,51602],{"class":51291},[102,91055,51298],{"class":112},[102,91057,91058,91060,91062,91064,91066,91068,91070,91072],{"class":104,"line":1738},[102,91059,52135],{"class":112},[102,91061,51804],{"class":51291},[102,91063,55230],{"class":1952},[102,91065,158],{"class":112},[102,91067,88265],{"class":217},[102,91069,55305],{"class":112},[102,91071,51804],{"class":51291},[102,91073,51298],{"class":112},[102,91075,91076,91078,91080],{"class":104,"line":1743},[102,91077,52135],{"class":112},[102,91079,51804],{"class":51291},[102,91081,51298],{"class":112},[102,91083,91084,91086,91088,91090,91092,91094,91096,91098],{"class":104,"line":1748},[102,91085,11211],{"class":108},[102,91087,86924],{"class":161},[102,91089,13554],{"class":108},[102,91091,54387],{"class":112},[102,91093,54390],{"class":1952},[102,91095,113],{"class":112},[102,91097,90137],{"class":217},[102,91099,119],{"class":112},[102,91101,91102,91104,91106,91108],{"class":104,"line":1753},[102,91103,52210],{"class":108},[102,91105,9428],{"class":112},[102,91107,158],{"class":108},[102,91109,47324],{"class":161},[102,91111,91112,91114,91116],{"class":104,"line":1767},[102,91113,70075],{"class":108},[102,91115,90156],{"class":1952},[102,91117,10843],{"class":112},[102,91119,91120,91122,91124,91126],{"class":104,"line":1772},[102,91121,90163],{"class":112},[102,91123,158],{"class":108},[102,91125,3021],{"class":112},[102,91127,2691],{"class":108},[102,91129,91130],{"class":104,"line":2566},[102,91131,90174],{"class":171},[102,91133,91134],{"class":104,"line":2580},[102,91135,2176],{"class":112},[102,91137,91138],{"class":104,"line":2588},[102,91139,90183],{"class":171},[102,91141,91142],{"class":104,"line":2593},[102,91143,91144],{"class":171},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[102,91146,91147],{"class":104,"line":2599},[102,91148,91149],{"class":171},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[102,91151,91152,91154,91156,91158,91160,91162,91165,91167,91169],{"class":104,"line":2605},[102,91153,90198],{"class":112},[102,91155,57804],{"class":1952},[102,91157,113],{"class":112},[102,91159,90205],{"class":217},[102,91161,90208],{"class":112},[102,91163,91164],{"class":1952},"throttle",[102,91166,90214],{"class":112},[102,91168,65065],{"class":161},[102,91170,30488],{"class":112},[102,91172,91173,91175,91177],{"class":104,"line":2610},[102,91174,52408],{"class":112},[102,91176,51804],{"class":51291},[102,91178,51298],{"class":112},[102,91180,91181,91183,91185],{"class":104,"line":7938},[102,91182,51776],{"class":112},[102,91184,51791],{"class":51291},[102,91186,51298],{"class":112},[102,91188,91189],{"class":104,"line":7962},[102,91190,2389],{"emptyLinePlaceholder":30},[102,91192,91193,91195,91197],{"class":104,"line":7967},[102,91194,51776],{"class":112},[102,91196,50626],{"class":51291},[102,91198,51298],{"class":112},[1120,91200,91201],{},[59,91202,91203],{},"手写一个节流函数来处理",[19,91205,70943],{},[19,91207,90257],{},[19,91209,91210],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91212,91213],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[93,91215,91217],{"className":50624,"code":91216,"language":50626,"meta":23,"style":23},"\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",[99,91218,91219,91229,91243,91247,91255,91269,91289,91301,91309,91315,91325,91337,91349,91359,91371,91381,91391,91403,91407,91415,91423,91427,91435,91453,91471,91479,91497,91507,91515,91525,91529,91533,91537,91542,91547,91552,91557,91562,91567,91584,91590,91598,91609,91624,91631,91636,91641,91651,91656,91661,91666,91670,91674,91678,91698,91706,91714,91718],{"__ignoreMap":23},[102,91220,91221,91223,91225,91227],{"class":104,"line":105},[102,91222,51288],{"class":112},[102,91224,51292],{"class":51291},[102,91226,51295],{"class":1952},[102,91228,51298],{"class":112},[102,91230,91231,91233,91235,91237,91239,91241],{"class":104,"line":24},[102,91232,1023],{"class":112},[102,91234,50626],{"class":51291},[102,91236,51307],{"class":1952},[102,91238,158],{"class":112},[102,91240,51312],{"class":217},[102,91242,51298],{"class":112},[102,91244,91245],{"class":104,"line":1168},[102,91246,2389],{"emptyLinePlaceholder":30},[102,91248,91249,91251,91253],{"class":104,"line":1183},[102,91250,1023],{"class":112},[102,91252,51325],{"class":51291},[102,91254,51298],{"class":112},[102,91256,91257,91259,91261,91263,91265,91267],{"class":104,"line":1189},[102,91258,52135],{"class":112},[102,91260,51335],{"class":51291},[102,91262,51338],{"class":1952},[102,91264,158],{"class":112},[102,91266,51343],{"class":217},[102,91268,51298],{"class":112},[102,91270,91271,91273,91275,91277,91279,91281,91283,91285,91287],{"class":104,"line":1203},[102,91272,52135],{"class":112},[102,91274,51335],{"class":51291},[102,91276,14910],{"class":1952},[102,91278,158],{"class":112},[102,91280,51382],{"class":217},[102,91282,51362],{"class":1952},[102,91284,158],{"class":112},[102,91286,51389],{"class":217},[102,91288,51298],{"class":112},[102,91290,91291,91293,91295,91297,91299],{"class":104,"line":1209},[102,91292,52135],{"class":112},[102,91294,51398],{"class":51291},[102,91296,51401],{"class":112},[102,91298,51398],{"class":51291},[102,91300,51298],{"class":112},[102,91302,91303,91305,91307],{"class":104,"line":1300},[102,91304,52135],{"class":112},[102,91306,5116],{"class":51291},[102,91308,51298],{"class":112},[102,91310,91311,91313],{"class":104,"line":1306},[102,91312,54743],{"class":1952},[102,91314,15562],{"class":112},[102,91316,91317,91319,91321,91323],{"class":104,"line":1318},[102,91318,72587],{"class":161},[102,91320,51428],{"class":112},[102,91322,60496],{"class":161},[102,91324,1279],{"class":112},[102,91326,91327,91329,91331,91333,91335],{"class":104,"line":1601},[102,91328,54762],{"class":161},[102,91330,51428],{"class":112},[102,91332,1711],{"class":161},[102,91334,51483],{"class":108},[102,91336,1279],{"class":112},[102,91338,91339,91341,91343,91345,91347],{"class":104,"line":1606},[102,91340,54776],{"class":161},[102,91342,51428],{"class":112},[102,91344,1711],{"class":161},[102,91346,51483],{"class":108},[102,91348,1279],{"class":112},[102,91350,91351,91353,91355,91357],{"class":104,"line":1612},[102,91352,54875],{"class":161},[102,91354,51428],{"class":112},[102,91356,89997],{"class":161},[102,91358,1279],{"class":112},[102,91360,91361,91363,91365,91367,91369],{"class":104,"line":1617},[102,91362,54913],{"class":161},[102,91364,51428],{"class":112},[102,91366,938],{"class":161},[102,91368,51483],{"class":108},[102,91370,1279],{"class":112},[102,91372,91373,91375,91377,91379],{"class":104,"line":1631},[102,91374,57407],{"class":161},[102,91376,51428],{"class":112},[102,91378,60833],{"class":161},[102,91380,1279],{"class":112},[102,91382,91383,91385,91387,91389],{"class":104,"line":1636},[102,91384,57277],{"class":161},[102,91386,51428],{"class":112},[102,91388,51583],{"class":161},[102,91390,1279],{"class":112},[102,91392,91393,91395,91397,91399,91401],{"class":104,"line":1642},[102,91394,90036],{"class":161},[102,91396,51428],{"class":112},[102,91398,432],{"class":161},[102,91400,51483],{"class":108},[102,91402,1279],{"class":112},[102,91404,91405],{"class":104,"line":1663},[102,91406,2176],{"class":112},[102,91408,91409,91411,91413],{"class":104,"line":1668},[102,91410,52408],{"class":112},[102,91412,5116],{"class":51291},[102,91414,51298],{"class":112},[102,91416,91417,91419,91421],{"class":104,"line":1682},[102,91418,51776],{"class":112},[102,91420,51325],{"class":51291},[102,91422,51298],{"class":112},[102,91424,91425],{"class":104,"line":1687},[102,91426,2389],{"emptyLinePlaceholder":30},[102,91428,91429,91431,91433],{"class":104,"line":1716},[102,91430,1023],{"class":112},[102,91432,51791],{"class":51291},[102,91434,51298],{"class":112},[102,91436,91437,91439,91441,91443,91445,91447,91449,91451],{"class":104,"line":1721},[102,91438,52135],{"class":112},[102,91440,51602],{"class":51291},[102,91442,53477],{"class":1952},[102,91444,158],{"class":112},[102,91446,53482],{"class":217},[102,91448,55305],{"class":112},[102,91450,51602],{"class":51291},[102,91452,51298],{"class":112},[102,91454,91455,91457,91459,91461,91463,91465,91467,91469],{"class":104,"line":1738},[102,91456,52135],{"class":112},[102,91458,51804],{"class":51291},[102,91460,55230],{"class":1952},[102,91462,158],{"class":112},[102,91464,88265],{"class":217},[102,91466,55305],{"class":112},[102,91468,51804],{"class":51291},[102,91470,51298],{"class":112},[102,91472,91473,91475,91477],{"class":104,"line":1743},[102,91474,52135],{"class":112},[102,91476,51804],{"class":51291},[102,91478,51298],{"class":112},[102,91480,91481,91483,91485,91487,91489,91491,91493,91495],{"class":104,"line":1748},[102,91482,11211],{"class":108},[102,91484,86924],{"class":161},[102,91486,13554],{"class":108},[102,91488,54387],{"class":112},[102,91490,54390],{"class":1952},[102,91492,113],{"class":112},[102,91494,90137],{"class":217},[102,91496,119],{"class":112},[102,91498,91499,91501,91503,91505],{"class":104,"line":1753},[102,91500,52210],{"class":108},[102,91502,9428],{"class":112},[102,91504,158],{"class":108},[102,91506,47324],{"class":161},[102,91508,91509,91511,91513],{"class":104,"line":1767},[102,91510,70075],{"class":108},[102,91512,90156],{"class":1952},[102,91514,10843],{"class":112},[102,91516,91517,91519,91521,91523],{"class":104,"line":1772},[102,91518,90163],{"class":112},[102,91520,158],{"class":108},[102,91522,3021],{"class":112},[102,91524,2691],{"class":108},[102,91526,91527],{"class":104,"line":2566},[102,91528,90174],{"class":171},[102,91530,91531],{"class":104,"line":2580},[102,91532,2176],{"class":112},[102,91534,91535],{"class":104,"line":2588},[102,91536,90183],{"class":171},[102,91538,91539],{"class":104,"line":2593},[102,91540,91541],{"class":171},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[102,91543,91544],{"class":104,"line":2599},[102,91545,91546],{"class":171},"    \u002F\u002F 1.声明一个定时器变量\n",[102,91548,91549],{"class":104,"line":2605},[102,91550,91551],{"class":171},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[102,91553,91554],{"class":104,"line":2610},[102,91555,91556],{"class":171},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[102,91558,91559],{"class":104,"line":7938},[102,91560,91561],{"class":171},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[102,91563,91564],{"class":104,"line":7962},[102,91565,91566],{"class":171},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[102,91568,91569,91571,91574,91576,91578,91580,91582],{"class":104,"line":7967},[102,91570,70075],{"class":108},[102,91572,91573],{"class":1952}," throttle",[102,91575,113],{"class":112},[102,91577,90628],{"class":5206},[102,91579,12425],{"class":112},[102,91581,833],{"class":5206},[102,91583,12432],{"class":112},[102,91585,91586,91588],{"class":104,"line":7973},[102,91587,79763],{"class":108},[102,91589,90641],{"class":112},[102,91591,91592,91594,91596],{"class":104,"line":8000},[102,91593,73973],{"class":108},[102,91595,58909],{"class":108},[102,91597,54443],{"class":112},[102,91599,91600,91602,91604,91606],{"class":104,"line":8005},[102,91601,2486],{"class":108},[102,91603,1647],{"class":112},[102,91605,339],{"class":108},[102,91607,91608],{"class":112},"timer) {\n",[102,91610,91611,91614,91616,91618,91620,91622],{"class":104,"line":8011},[102,91612,91613],{"class":112},"          timer ",[102,91615,158],{"class":108},[102,91617,90682],{"class":1952},[102,91619,113],{"class":112},[102,91621,54440],{"class":108},[102,91623,54443],{"class":112},[102,91625,91626,91629],{"class":104,"line":8023},[102,91627,91628],{"class":1952},"            fn",[102,91630,1965],{"class":112},[102,91632,91633],{"class":104,"line":8035},[102,91634,91635],{"class":171},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[102,91637,91638],{"class":104,"line":8047},[102,91639,91640],{"class":171},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[102,91642,91643,91646,91648],{"class":104,"line":9706},[102,91644,91645],{"class":112},"            timer ",[102,91647,158],{"class":108},[102,91649,91650],{"class":161}," null\n",[102,91652,91653],{"class":104,"line":9731},[102,91654,91655],{"class":171},"            \u002F\u002F 不能用clearTimeout(timer)\n",[102,91657,91658],{"class":104,"line":9754},[102,91659,91660],{"class":171},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[102,91662,91663],{"class":104,"line":9778},[102,91664,91665],{"class":112},"          }, t)\n",[102,91667,91668],{"class":104,"line":9783},[102,91669,2518],{"class":112},[102,91671,91672],{"class":104,"line":9788},[102,91673,52389],{"class":112},[102,91675,91676],{"class":104,"line":9793},[102,91677,2176],{"class":112},[102,91679,91680,91682,91684,91686,91688,91690,91692,91694,91696],{"class":104,"line":9802},[102,91681,90198],{"class":112},[102,91683,57804],{"class":1952},[102,91685,113],{"class":112},[102,91687,90205],{"class":217},[102,91689,12425],{"class":112},[102,91691,91164],{"class":1952},[102,91693,90214],{"class":112},[102,91695,65065],{"class":161},[102,91697,30488],{"class":112},[102,91699,91700,91702,91704],{"class":104,"line":9807},[102,91701,52408],{"class":112},[102,91703,51804],{"class":51291},[102,91705,51298],{"class":112},[102,91707,91708,91710,91712],{"class":104,"line":9813},[102,91709,51776],{"class":112},[102,91711,51791],{"class":51291},[102,91713,51298],{"class":112},[102,91715,91716],{"class":104,"line":9834},[102,91717,2389],{"emptyLinePlaceholder":30},[102,91719,91720,91722,91724],{"class":104,"line":9840},[102,91721,51776],{"class":112},[102,91723,50626],{"class":51291},[102,91725,51298],{"class":112},[73,91727,91729],{"id":91728},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[93,91731,91733],{"className":53058,"code":91732,"language":53060,"meta":23,"style":23},"\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",[99,91734,91735,91743,91751,91756,91761,91766,91771,91775,91783],{"__ignoreMap":23},[102,91736,91737,91739,91741],{"class":104,"line":105},[102,91738,1023],{"class":112},[102,91740,51791],{"class":51291},[102,91742,51298],{"class":112},[102,91744,91745,91747,91749],{"class":104,"line":24},[102,91746,52135],{"class":112},[102,91748,51804],{"class":51291},[102,91750,51298],{"class":112},[102,91752,91753],{"class":104,"line":1168},[102,91754,91755],{"class":112},"    let timer = null\n",[102,91757,91758],{"class":104,"line":1183},[102,91759,91760],{"class":112},"    timer = setTimeout(() => {\n",[102,91762,91763],{"class":104,"line":1189},[102,91764,91765],{"class":112},"      clearTimeout(timer)\n",[102,91767,91768],{"class":104,"line":1203},[102,91769,91770],{"class":112},"      console.log(timer)\n",[102,91772,91773],{"class":104,"line":1209},[102,91774,60216],{"class":112},[102,91776,91777,91779,91781],{"class":104,"line":1300},[102,91778,52408],{"class":112},[102,91780,51804],{"class":51291},[102,91782,51298],{"class":112},[102,91784,91785,91787,91789],{"class":104,"line":1306},[102,91786,51776],{"class":112},[102,91788,51791],{"class":51291},[102,91790,51298],{"class":112},[19,91792,91793],{},"输出为1",[19,91795,91796],{},"在开启的定时器里边写清除定时器",[19,91798,91799],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[73,91801,91803],{"id":91802},"_4174-节流综合案例","4.17.4 节流综合案例",[19,91805,91806],{},"页面打开，可以记录上一次的视频播放位置",[19,91808,91809],{},[1451,91810],{"alt":23,"src":91811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,91813,91814],{},[1451,91815],{"alt":23,"src":91816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[93,91818,91820],{"className":50624,"code":91819,"language":50626,"meta":23,"style":23},"\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",[99,91821,91822,91832,91846,91850,91858,91872,91892,91912,91934,91947,91955,91961,91971,91981,91991,91995,91999,92006,92019,92031,92035,92039,92049,92061,92075,92079,92083,92090,92100,92113,92125,92135,92145,92161,92173,92177,92181,92189,92199,92211,92221,92231,92241,92245,92249,92259,92270,92274,92282,92290,92294,92302,92317,92332,92347,92368,92376,92384,92399,92421,92429,92444,92470,92496,92522,92530,92538,92557,92565,92570,92589,92594,92612,92617,92622,92630,92635,92649,92657,92662,92679,92683,92688,92710,92714,92722,92730,92734],{"__ignoreMap":23},[102,91823,91824,91826,91828,91830],{"class":104,"line":105},[102,91825,51288],{"class":112},[102,91827,51292],{"class":51291},[102,91829,51295],{"class":1952},[102,91831,51298],{"class":112},[102,91833,91834,91836,91838,91840,91842,91844],{"class":104,"line":24},[102,91835,1023],{"class":112},[102,91837,50626],{"class":51291},[102,91839,51307],{"class":1952},[102,91841,158],{"class":112},[102,91843,51312],{"class":217},[102,91845,51298],{"class":112},[102,91847,91848],{"class":104,"line":1168},[102,91849,2389],{"emptyLinePlaceholder":30},[102,91851,91852,91854,91856],{"class":104,"line":1183},[102,91853,1023],{"class":112},[102,91855,51325],{"class":51291},[102,91857,51298],{"class":112},[102,91859,91860,91862,91864,91866,91868,91870],{"class":104,"line":1189},[102,91861,52135],{"class":112},[102,91863,51335],{"class":51291},[102,91865,51338],{"class":1952},[102,91867,158],{"class":112},[102,91869,51343],{"class":217},[102,91871,59118],{"class":112},[102,91873,91874,91876,91878,91880,91882,91884,91886,91888,91890],{"class":104,"line":1203},[102,91875,52135],{"class":112},[102,91877,51335],{"class":51291},[102,91879,51354],{"class":1952},[102,91881,158],{"class":112},[102,91883,51359],{"class":217},[102,91885,51362],{"class":1952},[102,91887,158],{"class":112},[102,91889,51367],{"class":217},[102,91891,59118],{"class":112},[102,91893,91894,91896,91898,91900,91902,91904,91906,91908,91910],{"class":104,"line":1209},[102,91895,52135],{"class":112},[102,91897,51335],{"class":51291},[102,91899,14910],{"class":1952},[102,91901,158],{"class":112},[102,91903,51382],{"class":217},[102,91905,51362],{"class":1952},[102,91907,158],{"class":112},[102,91909,51389],{"class":217},[102,91911,59118],{"class":112},[102,91913,91914,91916,91918,91920,91922,91925,91927,91929,91932],{"class":104,"line":1300},[102,91915,52135],{"class":112},[102,91917,51335],{"class":51291},[102,91919,14910],{"class":1952},[102,91921,158],{"class":112},[102,91923,91924],{"class":217},"\"referrer\"",[102,91926,51362],{"class":1952},[102,91928,158],{"class":112},[102,91930,91931],{"class":217},"\"never\"",[102,91933,59118],{"class":112},[102,91935,91936,91938,91940,91943,91945],{"class":104,"line":1306},[102,91937,52135],{"class":112},[102,91939,51398],{"class":51291},[102,91941,91942],{"class":112},">综合案例\u003C\u002F",[102,91944,51398],{"class":51291},[102,91946,51298],{"class":112},[102,91948,91949,91951,91953],{"class":104,"line":1318},[102,91950,52135],{"class":112},[102,91952,5116],{"class":51291},[102,91954,51298],{"class":112},[102,91956,91957,91959],{"class":104,"line":1601},[102,91958,6393],{"class":51291},[102,91960,15562],{"class":112},[102,91962,91963,91965,91967,91969],{"class":104,"line":1606},[102,91964,54686],{"class":161},[102,91966,51428],{"class":112},[102,91968,304],{"class":161},[102,91970,1279],{"class":112},[102,91972,91973,91975,91977,91979],{"class":104,"line":1612},[102,91974,54697],{"class":161},[102,91976,51428],{"class":112},[102,91978,304],{"class":161},[102,91980,1279],{"class":112},[102,91982,91983,91985,91987,91989],{"class":104,"line":1617},[102,91984,72587],{"class":161},[102,91986,51428],{"class":112},[102,91988,60496],{"class":161},[102,91990,1279],{"class":112},[102,91992,91993],{"class":104,"line":1631},[102,91994,2176],{"class":112},[102,91996,91997],{"class":104,"line":1636},[102,91998,2389],{"emptyLinePlaceholder":30},[102,92000,92001,92004],{"class":104,"line":1642},[102,92002,92003],{"class":1952},"    .container",[102,92005,15562],{"class":112},[102,92007,92008,92010,92012,92015,92017],{"class":104,"line":1663},[102,92009,54762],{"class":161},[102,92011,51428],{"class":112},[102,92013,92014],{"class":161},"1200",[102,92016,51483],{"class":108},[102,92018,1279],{"class":112},[102,92020,92021,92023,92025,92027,92029],{"class":104,"line":1668},[102,92022,54697],{"class":161},[102,92024,51428],{"class":112},[102,92026,304],{"class":161},[102,92028,51547],{"class":161},[102,92030,1279],{"class":112},[102,92032,92033],{"class":104,"line":1682},[102,92034,2176],{"class":112},[102,92036,92037],{"class":104,"line":1687},[102,92038,2389],{"emptyLinePlaceholder":30},[102,92040,92041,92044,92047],{"class":104,"line":1716},[102,92042,92043],{"class":1952},"    .video",[102,92045,92046],{"class":51291}," video",[102,92048,15562],{"class":112},[102,92050,92051,92053,92055,92057,92059],{"class":104,"line":1721},[102,92052,54762],{"class":161},[102,92054,51428],{"class":112},[102,92056,424],{"class":161},[102,92058,441],{"class":108},[102,92060,1279],{"class":112},[102,92062,92063,92065,92067,92069,92071,92073],{"class":104,"line":1738},[102,92064,54686],{"class":161},[102,92066,51428],{"class":112},[102,92068,813],{"class":161},[102,92070,51483],{"class":108},[102,92072,4082],{"class":161},[102,92074,1279],{"class":112},[102,92076,92077],{"class":104,"line":1743},[102,92078,2176],{"class":112},[102,92080,92081],{"class":104,"line":1748},[102,92082,2389],{"emptyLinePlaceholder":30},[102,92084,92085,92088],{"class":104,"line":1753},[102,92086,92087],{"class":1952},"    .elevator",[102,92089,15562],{"class":112},[102,92091,92092,92094,92096,92098],{"class":104,"line":1767},[102,92093,54750],{"class":161},[102,92095,51428],{"class":112},[102,92097,86224],{"class":161},[102,92099,1279],{"class":112},[102,92101,92102,92104,92106,92109,92111],{"class":104,"line":1772},[102,92103,54938],{"class":161},[102,92105,51428],{"class":112},[102,92107,92108],{"class":161},"280",[102,92110,51483],{"class":108},[102,92112,1279],{"class":112},[102,92114,92115,92117,92119,92121,92123],{"class":104,"line":2566},[102,92116,86418],{"class":161},[102,92118,51428],{"class":112},[102,92120,813],{"class":161},[102,92122,51483],{"class":108},[102,92124,1279],{"class":112},[102,92126,92127,92129,92131,92133],{"class":104,"line":2580},[102,92128,86231],{"class":161},[102,92130,51428],{"class":112},[102,92132,86236],{"class":161},[102,92134,1279],{"class":112},[102,92136,92137,92139,92141,92143],{"class":104,"line":2588},[102,92138,61712],{"class":161},[102,92140,51428],{"class":112},[102,92142,60833],{"class":161},[102,92144,1279],{"class":112},[102,92146,92147,92149,92151,92153,92155,92157,92159],{"class":104,"line":2593},[102,92148,61968],{"class":161},[102,92150,51428],{"class":112},[102,92152,330],{"class":161},[102,92154,51483],{"class":108},[102,92156,51512],{"class":161},[102,92158,62235],{"class":161},[102,92160,1279],{"class":112},[102,92162,92163,92165,92167,92169,92171],{"class":104,"line":2599},[102,92164,54762],{"class":161},[102,92166,51428],{"class":112},[102,92168,1020],{"class":161},[102,92170,51483],{"class":108},[102,92172,1279],{"class":112},[102,92174,92175],{"class":104,"line":2605},[102,92176,2176],{"class":112},[102,92178,92179],{"class":104,"line":2610},[102,92180,2389],{"emptyLinePlaceholder":30},[102,92182,92183,92185,92187],{"class":104,"line":7938},[102,92184,92087],{"class":1952},[102,92186,1387],{"class":51291},[102,92188,15562],{"class":112},[102,92190,92191,92193,92195,92197],{"class":104,"line":7962},[102,92192,55000],{"class":161},[102,92194,51428],{"class":112},[102,92196,60860],{"class":161},[102,92198,1279],{"class":112},[102,92200,92201,92203,92205,92207,92209],{"class":104,"line":7967},[102,92202,54686],{"class":161},[102,92204,51428],{"class":112},[102,92206,559],{"class":161},[102,92208,51483],{"class":108},[102,92210,1279],{"class":112},[102,92212,92213,92215,92217,92219],{"class":104,"line":7973},[102,92214,63961],{"class":161},[102,92216,51428],{"class":112},[102,92218,54728],{"class":161},[102,92220,1279],{"class":112},[102,92222,92223,92225,92227,92229],{"class":104,"line":8000},[102,92224,57277],{"class":161},[102,92226,51428],{"class":112},[102,92228,51583],{"class":161},[102,92230,1279],{"class":112},[102,92232,92233,92235,92237,92239],{"class":104,"line":8005},[102,92234,57407],{"class":161},[102,92236,51428],{"class":112},[102,92238,62061],{"class":161},[102,92240,1279],{"class":112},[102,92242,92243],{"class":104,"line":8011},[102,92244,2176],{"class":112},[102,92246,92247],{"class":104,"line":8023},[102,92248,2389],{"emptyLinePlaceholder":30},[102,92250,92251,92253,92255,92257],{"class":104,"line":8035},[102,92252,92087],{"class":1952},[102,92254,1387],{"class":51291},[102,92256,64015],{"class":1952},[102,92258,15562],{"class":112},[102,92260,92261,92263,92265,92268],{"class":104,"line":8047},[102,92262,57407],{"class":161},[102,92264,51428],{"class":112},[102,92266,92267],{"class":161},"#1286ff",[102,92269,1279],{"class":112},[102,92271,92272],{"class":104,"line":9706},[102,92273,2176],{"class":112},[102,92275,92276,92278,92280],{"class":104,"line":9731},[102,92277,52408],{"class":112},[102,92279,5116],{"class":51291},[102,92281,51298],{"class":112},[102,92283,92284,92286,92288],{"class":104,"line":9754},[102,92285,51776],{"class":112},[102,92287,51325],{"class":51291},[102,92289,51298],{"class":112},[102,92291,92292],{"class":104,"line":9778},[102,92293,2389],{"emptyLinePlaceholder":30},[102,92295,92296,92298,92300],{"class":104,"line":9783},[102,92297,1023],{"class":112},[102,92299,51791],{"class":51291},[102,92301,51298],{"class":112},[102,92303,92304,92306,92308,92310,92312,92315],{"class":104,"line":9788},[102,92305,52135],{"class":112},[102,92307,51602],{"class":51291},[102,92309,53477],{"class":1952},[102,92311,158],{"class":112},[102,92313,92314],{"class":217},"\"container\"",[102,92316,51298],{"class":112},[102,92318,92319,92321,92323,92325,92327,92330],{"class":104,"line":9793},[102,92320,51332],{"class":112},[102,92322,51602],{"class":51291},[102,92324,53477],{"class":1952},[102,92326,158],{"class":112},[102,92328,92329],{"class":217},"\"header\"",[102,92331,51298],{"class":112},[102,92333,92334,92336,92338,92340,92342,92345],{"class":104,"line":9802},[102,92335,55225],{"class":112},[102,92337,351],{"class":51291},[102,92339,61048],{"class":1952},[102,92341,158],{"class":112},[102,92343,92344],{"class":217},"\"http:\u002F\u002Fpip.itcast.cn\"",[102,92346,51298],{"class":112},[102,92348,92349,92351,92353,92355,92357,92360,92362,92364,92366],{"class":104,"line":9807},[102,92350,55293],{"class":112},[102,92352,1451],{"class":51291},[102,92354,55230],{"class":1952},[102,92356,158],{"class":112},[102,92358,92359],{"class":217},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[102,92361,55238],{"class":1952},[102,92363,158],{"class":112},[102,92365,7642],{"class":217},[102,92367,59118],{"class":112},[102,92369,92370,92372,92374],{"class":104,"line":9813},[102,92371,55398],{"class":112},[102,92373,351],{"class":51291},[102,92375,51298],{"class":112},[102,92377,92378,92380,92382],{"class":104,"line":9834},[102,92379,51767],{"class":112},[102,92381,51602],{"class":51291},[102,92383,51298],{"class":112},[102,92385,92386,92388,92390,92392,92394,92397],{"class":104,"line":9840},[102,92387,51332],{"class":112},[102,92389,51602],{"class":51291},[102,92391,53477],{"class":1952},[102,92393,158],{"class":112},[102,92395,92396],{"class":217},"\"video\"",[102,92398,51298],{"class":112},[102,92400,92401,92403,92405,92407,92409,92412,92415,92417,92419],{"class":104,"line":9854},[102,92402,55225],{"class":112},[102,92404,28174],{"class":51291},[102,92406,55230],{"class":1952},[102,92408,158],{"class":112},[102,92410,92411],{"class":217},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[102,92413,92414],{"class":1952}," controls",[102,92416,55305],{"class":112},[102,92418,28174],{"class":51291},[102,92420,51298],{"class":112},[102,92422,92423,92425,92427],{"class":104,"line":9860},[102,92424,51767],{"class":112},[102,92426,51602],{"class":51291},[102,92428,51298],{"class":112},[102,92430,92431,92433,92435,92437,92439,92442],{"class":104,"line":9887},[102,92432,51332],{"class":112},[102,92434,51602],{"class":51291},[102,92436,53477],{"class":1952},[102,92438,158],{"class":112},[102,92440,92441],{"class":217},"\"elevator\"",[102,92443,51298],{"class":112},[102,92445,92446,92448,92450,92452,92454,92456,92459,92461,92463,92466,92468],{"class":104,"line":9896},[102,92447,55225],{"class":112},[102,92449,351],{"class":51291},[102,92451,61048],{"class":1952},[102,92453,158],{"class":112},[102,92455,64227],{"class":217},[102,92457,92458],{"class":1952}," data-ref",[102,92460,158],{"class":112},[102,92462,92396],{"class":217},[102,92464,92465],{"class":112},">视频介绍\u003C\u002F",[102,92467,351],{"class":51291},[102,92469,51298],{"class":112},[102,92471,92472,92474,92476,92478,92480,92482,92484,92486,92489,92492,92494],{"class":104,"line":9902},[102,92473,55225],{"class":112},[102,92475,351],{"class":51291},[102,92477,61048],{"class":1952},[102,92479,158],{"class":112},[102,92481,64227],{"class":217},[102,92483,92458],{"class":1952},[102,92485,158],{"class":112},[102,92487,92488],{"class":217},"\"intro\"",[102,92490,92491],{"class":112},">课程简介\u003C\u002F",[102,92493,351],{"class":51291},[102,92495,51298],{"class":112},[102,92497,92498,92500,92502,92504,92506,92508,92510,92512,92515,92518,92520],{"class":104,"line":9910},[102,92499,55225],{"class":112},[102,92501,351],{"class":51291},[102,92503,61048],{"class":1952},[102,92505,158],{"class":112},[102,92507,64227],{"class":217},[102,92509,92458],{"class":1952},[102,92511,158],{"class":112},[102,92513,92514],{"class":217},"\"outline\"",[102,92516,92517],{"class":112},">评论列表\u003C\u002F",[102,92519,351],{"class":51291},[102,92521,51298],{"class":112},[102,92523,92524,92526,92528],{"class":104,"line":9915},[102,92525,51767],{"class":112},[102,92527,51602],{"class":51291},[102,92529,51298],{"class":112},[102,92531,92532,92534,92536],{"class":104,"line":16594},[102,92533,52408],{"class":112},[102,92535,51602],{"class":51291},[102,92537,51298],{"class":112},[102,92539,92540,92542,92544,92546,92548,92551,92553,92555],{"class":104,"line":16600},[102,92541,52135],{"class":112},[102,92543,51804],{"class":51291},[102,92545,55230],{"class":1952},[102,92547,158],{"class":112},[102,92549,92550],{"class":217},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[102,92552,55305],{"class":112},[102,92554,51804],{"class":51291},[102,92556,51298],{"class":112},[102,92558,92559,92561,92563],{"class":104,"line":16623},[102,92560,52135],{"class":112},[102,92562,51804],{"class":51291},[102,92564,51298],{"class":112},[102,92566,92567],{"class":104,"line":16629},[102,92568,92569],{"class":171},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[102,92571,92572,92574,92576,92578,92580,92582,92584,92587],{"class":104,"line":16652},[102,92573,11211],{"class":108},[102,92575,92046],{"class":161},[102,92577,13554],{"class":108},[102,92579,54387],{"class":112},[102,92581,54390],{"class":1952},[102,92583,113],{"class":112},[102,92585,92586],{"class":217},"'video'",[102,92588,119],{"class":112},[102,92590,92591],{"class":104,"line":16666},[102,92592,92593],{"class":171},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[102,92595,92596,92599,92601,92603,92605,92608,92610],{"class":104,"line":16686},[102,92597,92598],{"class":112},"    video.ontimeupdate ",[102,92600,158],{"class":108},[102,92602,88346],{"class":112},[102,92604,91164],{"class":1952},[102,92606,92607],{"class":112},"(() ",[102,92609,84713],{"class":108},[102,92611,15562],{"class":112},[102,92613,92614],{"class":104,"line":16692},[102,92615,92616],{"class":171},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[102,92618,92619],{"class":104,"line":16703},[102,92620,92621],{"class":171},"      \u002F\u002F 控制台输出当前的时间\n",[102,92623,92624,92627],{"class":104,"line":16726},[102,92625,92626],{"class":171},"      \u002F\u002F console.log(video.currentTime)",[102,92628,92629],{"class":171},"  \u002F\u002F获得当前的视频时间\n",[102,92631,92632],{"class":104,"line":16748},[102,92633,92634],{"class":171},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[102,92636,92637,92639,92641,92643,92646],{"class":104,"line":16753},[102,92638,74674],{"class":112},[102,92640,71645],{"class":1952},[102,92642,113],{"class":112},[102,92644,92645],{"class":217},"'currentTime'",[102,92647,92648],{"class":112},", video.currentTime)\n",[102,92650,92651,92653,92655],{"class":104,"line":16759},[102,92652,54526],{"class":112},[102,92654,6400],{"class":161},[102,92656,119],{"class":112},[102,92658,92659],{"class":104,"line":16773},[102,92660,92661],{"class":171},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[102,92663,92664,92667,92670,92672,92675,92677],{"class":104,"line":16786},[102,92665,92666],{"class":112},"    video.",[102,92668,92669],{"class":1952},"onloadeddata",[102,92671,13554],{"class":108},[102,92673,92674],{"class":112}," () ",[102,92676,84713],{"class":108},[102,92678,15562],{"class":112},[102,92680,92681],{"class":104,"line":16791},[102,92682,60003],{"class":171},[102,92684,92685],{"class":104,"line":16805},[102,92686,92687],{"class":171},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[102,92689,92690,92693,92695,92698,92700,92702,92704,92706,92708],{"class":104,"line":16810},[102,92691,92692],{"class":112},"      video.currentTime ",[102,92694,158],{"class":108},[102,92696,92697],{"class":112}," localStorage.",[102,92699,71676],{"class":1952},[102,92701,113],{"class":112},[102,92703,92645],{"class":217},[102,92705,13704],{"class":112},[102,92707,71348],{"class":108},[102,92709,47324],{"class":161},[102,92711,92712],{"class":104,"line":16816},[102,92713,2176],{"class":112},[102,92715,92716,92718,92720],{"class":104,"line":16821},[102,92717,52408],{"class":112},[102,92719,51804],{"class":51291},[102,92721,51298],{"class":112},[102,92723,92724,92726,92728],{"class":104,"line":16835},[102,92725,51776],{"class":112},[102,92727,51791],{"class":51291},[102,92729,51298],{"class":112},[102,92731,92732],{"class":104,"line":16840},[102,92733,2389],{"emptyLinePlaceholder":30},[102,92735,92736,92738,92740],{"class":104,"line":16845},[102,92737,51776],{"class":112},[102,92739,50626],{"class":51291},[102,92741,51298],{"class":112},[5116,92743,92744],{},"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":23,"searchDepth":24,"depth":24,"links":92746},[92747,92752,92756,92757,92758,92763,92768,92769,92770,92771,92778,92783,92784,92794,92798,92799,92803],{"id":76682,"depth":24,"text":76683,"children":92748},[92749,92750,92751],{"id":76686,"depth":1168,"text":76687},{"id":76711,"depth":1168,"text":76712},{"id":76723,"depth":1168,"text":76724},{"id":76735,"depth":24,"text":76736,"children":92753},[92754,92755],{"id":76739,"depth":1168,"text":76740},{"id":76754,"depth":1168,"text":76755},{"id":76806,"depth":24,"text":76807},{"id":76850,"depth":24,"text":76851},{"id":76867,"depth":24,"text":76868,"children":92759},[92760,92761,92762],{"id":76871,"depth":1168,"text":76872},{"id":76884,"depth":1168,"text":76885},{"id":76989,"depth":1168,"text":76990},{"id":77278,"depth":24,"text":77279,"children":92764},[92765,92766,92767],{"id":77282,"depth":1168,"text":77283},{"id":77725,"depth":1168,"text":77726},{"id":78136,"depth":1168,"text":78137},{"id":78199,"depth":24,"text":78200},{"id":78278,"depth":24,"text":78279},{"id":78371,"depth":24,"text":78372},{"id":80216,"depth":24,"text":80217,"children":92772},[92773,92774,92775,92776,92777],{"id":80220,"depth":1168,"text":80221},{"id":80232,"depth":1168,"text":80233},{"id":80451,"depth":1168,"text":80452},{"id":80469,"depth":1168,"text":80470},{"id":80529,"depth":1168,"text":80530},{"id":84797,"depth":24,"text":84798,"children":92779},[92780,92781,92782],{"id":84801,"depth":1168,"text":84802},{"id":84819,"depth":1168,"text":84820},{"id":84845,"depth":1168,"text":84846},{"id":84854,"depth":24,"text":84855},{"id":84876,"depth":24,"text":84877,"children":92785},[92786,92787,92788,92789,92790,92791,92792,92793],{"id":84880,"depth":1168,"text":84881},{"id":85141,"depth":1168,"text":85142},{"id":85327,"depth":1168,"text":85328},{"id":85694,"depth":1168,"text":85695},{"id":85810,"depth":1168,"text":85811},{"id":85846,"depth":1168,"text":85847},{"id":85893,"depth":1168,"text":85894},{"id":85927,"depth":1168,"text":85928},{"id":87290,"depth":24,"text":87291,"children":92795},[92796,92797],{"id":87294,"depth":1168,"text":87295},{"id":87331,"depth":1168,"text":87332},{"id":88686,"depth":24,"text":88687},{"id":89057,"depth":24,"text":89058,"children":92800},[92801,92802],{"id":89061,"depth":1168,"text":89062},{"id":89095,"depth":1168,"text":89096},{"id":89824,"depth":24,"text":89825,"children":92804},[92805,92806,92807,92808],{"id":89828,"depth":1168,"text":89829},{"id":90786,"depth":1168,"text":90787},{"id":91728,"depth":1168,"text":91729},{"id":91802,"depth":1168,"text":91803},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76671,"description":27},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92815,"title":92816,"body":92817,"description":92828,"extension":28,"meta":92829,"navigation":30,"path":92831,"seo":92832,"stem":92833,"__hash__":92834},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92818,"toc":92826},[92819],[19,92820,92821,92822],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[351,92823,92824],{"href":92824,"rel":92825},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23855],{"title":23,"searchDepth":24,"depth":24,"links":92827},[],"三件套第三套学习",{"category":92830},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92816,"description":92828},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92836,"title":92837,"body":92838,"description":27,"extension":28,"meta":92943,"navigation":30,"path":92944,"seo":92945,"stem":92946,"__hash__":92947},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92839,"toc":92938},[92840,92847,92850,92853,92856,92860,92869,92872,92875,92879,92888,92891,92895,92898,92918,92921,92935],[19,92841,92842],{},[351,92843,92846],{"href":92844,"rel":92845},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23855],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92848,92837],{"id":92849},"_1安装",[19,92851,92852],{},"numpy是科学计算基础库,底层是C语言",[19,92854,92855],{},"三种方式：",[14,92857,92859],{"id":92858},"_11-通过pip安装","1.1 通过pip安装",[93,92861,92863],{"className":30369,"code":92862,"language":30371,"meta":23,"style":23},"pip install numpy\n",[99,92864,92865],{"__ignoreMap":23},[102,92866,92867],{"class":104,"line":105},[102,92868,92862],{"class":112},[19,92870,92871],{},"首选方式，自动处理依赖项",[19,92873,92874],{},"在提示系统命令符中使用cmd",[14,92876,92878],{"id":92877},"_12-通过anaconda安装","1.2 通过Anaconda安装",[93,92880,92882],{"className":30369,"code":92881,"language":30371,"meta":23,"style":23},"conda install numpy\n",[99,92883,92884],{"__ignoreMap":23},[102,92885,92886],{"class":104,"line":105},[102,92887,92881],{"class":112},[19,92889,92890],{},"自动解决环境依赖",[14,92892,92894],{"id":92893},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,92896,92897],{},"对于Debian\u002FUbuntu",[93,92899,92901],{"className":30369,"code":92900,"language":30371,"meta":23,"style":23},"sudo apt-get install python3-numpy\n",[99,92902,92903],{"__ignoreMap":23},[102,92904,92905,92908,92910,92913,92915],{"class":104,"line":105},[102,92906,92907],{"class":112},"sudo apt",[102,92909,645],{"class":108},[102,92911,92912],{"class":112},"get install python3",[102,92914,645],{"class":108},[102,92916,92917],{"class":112},"numpy\n",[19,92919,92920],{},"对于Fedora:",[93,92922,92924],{"className":30369,"code":92923,"language":30371,"meta":23,"style":23},"sudo dnf install python3-numpy\n",[99,92925,92926],{"__ignoreMap":23},[102,92927,92928,92931,92933],{"class":104,"line":105},[102,92929,92930],{"class":112},"sudo dnf install python3",[102,92932,645],{"class":108},[102,92934,92917],{"class":112},[5116,92936,92937],{},"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":23,"searchDepth":24,"depth":24,"links":92939},[92940,92941,92942],{"id":92858,"depth":24,"text":92859},{"id":92877,"depth":24,"text":92878},{"id":92893,"depth":24,"text":92894},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92837,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92949,"title":92950,"body":92951,"description":27,"extension":28,"meta":93064,"navigation":30,"path":93065,"seo":93066,"stem":93067,"__hash__":93068},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92952,"toc":93062},[92953,92956,92959,92962,92965,92968,92971,92974,92977,92980,93056,93059],[10,92954,92950],{"id":92955},"_10算数函数",[19,92957,92958],{},"加减乘除运算跟python基础语法没区别",[19,92960,92961],{},"除了python那种方法外还可以使用函数",[19,92963,92964],{},"加：np.add(a,b)",[19,92966,92967],{},"减：np.subtract(a,b)",[19,92969,92970],{},"乘：np.multiply(a,b)",[19,92972,92973],{},"除：np.divide(a,b) == a\u002Fb",[19,92975,92976],{},"取余：np.mod(a,b) == a%b",[19,92978,92979],{},"必须会的用法：",[93,92981,92983],{"className":30369,"code":92982,"language":30371,"meta":23,"style":23},"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",[99,92984,92985,93007,93028,93038,93051],{"__ignoreMap":23},[102,92986,92987,92989,92991,92994,92996,92999,93001,93003,93005],{"class":104,"line":105},[102,92988,351],{"class":112},[102,92990,158],{"class":108},[102,92992,92993],{"class":112},"np.arange(",[102,92995,533],{"class":161},[102,92997,92998],{"class":112},").reshape(",[102,93000,184],{"class":161},[102,93002,491],{"class":112},[102,93004,184],{"class":161},[102,93006,119],{"class":112},[102,93008,93009,93011,93013,93016,93018,93020,93022,93024,93026],{"class":104,"line":24},[102,93010,376],{"class":112},[102,93012,158],{"class":108},[102,93014,93015],{"class":112},"np.array([",[102,93017,559],{"class":161},[102,93019,491],{"class":112},[102,93021,559],{"class":161},[102,93023,491],{"class":112},[102,93025,559],{"class":161},[102,93027,4646],{"class":112},[102,93029,93030,93033,93035],{"class":104,"line":1168},[102,93031,93032],{"class":112},"result",[102,93034,158],{"class":108},[102,93036,93037],{"class":112},"np.empty_like(a)\n",[102,93039,93040,93043,93046,93048],{"class":104,"line":1183},[102,93041,93042],{"class":112},"np.add(a,b,",[102,93044,93045],{"class":5206},"out",[102,93047,158],{"class":108},[102,93049,93050],{"class":112},"result)\n",[102,93052,93053],{"class":104,"line":1189},[102,93054,93055],{"class":112},"result\n",[19,93057,93058],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5116,93060,93061],{},"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":23,"searchDepth":24,"depth":24,"links":93063},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92950,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93070,"title":93071,"body":93072,"description":27,"extension":28,"meta":93834,"navigation":30,"path":93835,"seo":93836,"stem":93837,"__hash__":93838},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93073,"toc":93821},[93074,93077,93080,93083,93087,93126,93130,93174,93234,93238,93241,93280,93283,93328,93332,93368,93372,93441,93445,93509,93513,93516,93519,93522,93525,93561,93565,93605,93609,93681,93684,93688,93751,93755,93818],[10,93075,93071],{"id":93076},"_11统计函数",[19,93078,93079],{},"sum max min mean",[19,93081,93082],{},"这些有axis参数，可以指定方向",[14,93084,93086],{"id":93085},"_111-sum求和函数","11.1 sum()求和函数",[93,93088,93090],{"className":30369,"code":93089,"language":30371,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[99,93091,93092,93097,93118],{"__ignoreMap":23},[102,93093,93094],{"class":104,"line":105},[102,93095,93096],{"class":171},"#创建一维数组\n",[102,93098,93099,93101,93103,93106,93108,93110,93112,93114,93116],{"class":104,"line":24},[102,93100,351],{"class":112},[102,93102,158],{"class":108},[102,93104,93105],{"class":112},"np.random.randint(",[102,93107,330],{"class":161},[102,93109,491],{"class":112},[102,93111,424],{"class":161},[102,93113,491],{"class":112},[102,93115,813],{"class":161},[102,93117,119],{"class":112},[102,93119,93120,93123],{"class":104,"line":1168},[102,93121,93122],{"class":112},"np.sum(a)",[102,93124,93125],{"class":171},"#求和\n",[14,93127,93129],{"id":93128},"_112-max求最大值函数","11.2 max()求最大值函数",[93,93131,93133],{"className":30369,"code":93132,"language":30371,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[99,93134,93135,93139,93159,93164,93169],{"__ignoreMap":23},[102,93136,93137],{"class":104,"line":105},[102,93138,93096],{"class":171},[102,93140,93141,93143,93145,93147,93149,93151,93153,93155,93157],{"class":104,"line":24},[102,93142,351],{"class":112},[102,93144,158],{"class":108},[102,93146,93105],{"class":112},[102,93148,330],{"class":161},[102,93150,491],{"class":112},[102,93152,424],{"class":161},[102,93154,491],{"class":112},[102,93156,813],{"class":161},[102,93158,119],{"class":112},[102,93160,93161],{"class":104,"line":1168},[102,93162,93163],{"class":112},"np.max(a)\n",[102,93165,93166],{"class":104,"line":1183},[102,93167,93168],{"class":171},"#最大索引(求最大元素的索引)arg\n",[102,93170,93171],{"class":104,"line":1189},[102,93172,93173],{"class":112},"np.argmax(a)\n",[93,93175,93177],{"className":30369,"code":93176,"language":30371,"meta":23,"style":23},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[99,93178,93179,93200,93220,93224],{"__ignoreMap":23},[102,93180,93181,93183,93185,93188,93190,93192,93194,93196,93198],{"class":104,"line":105},[102,93182,10909],{"class":112},[102,93184,158],{"class":108},[102,93186,93187],{"class":112}," np.array([",[102,93189,330],{"class":161},[102,93191,12425],{"class":112},[102,93193,432],{"class":161},[102,93195,12425],{"class":112},[102,93197,184],{"class":161},[102,93199,4646],{"class":112},[102,93201,93202,93204,93206,93208,93210,93212,93214,93216,93218],{"class":104,"line":24},[102,93203,10935],{"class":112},[102,93205,158],{"class":108},[102,93207,93187],{"class":112},[102,93209,184],{"class":161},[102,93211,12425],{"class":112},[102,93213,190],{"class":161},[102,93215,12425],{"class":112},[102,93217,406],{"class":161},[102,93219,4646],{"class":112},[102,93221,93222],{"class":104,"line":1168},[102,93223,2389],{"emptyLinePlaceholder":30},[102,93225,93226,93228,93231],{"class":104,"line":1183},[102,93227,30406],{"class":161},[102,93229,93230],{"class":112},"(np.maximum(a, b))   ",[102,93232,93233],{"class":171},"# [3 5 4]，每个位置上取较大值\n",[14,93235,93237],{"id":93236},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93239,93240],{},"①一维数组：",[93,93242,93244],{"className":30369,"code":93243,"language":30371,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[99,93245,93246,93250,93270,93275],{"__ignoreMap":23},[102,93247,93248],{"class":104,"line":105},[102,93249,93096],{"class":171},[102,93251,93252,93254,93256,93258,93260,93262,93264,93266,93268],{"class":104,"line":24},[102,93253,351],{"class":112},[102,93255,158],{"class":108},[102,93257,93105],{"class":112},[102,93259,330],{"class":161},[102,93261,491],{"class":112},[102,93263,424],{"class":161},[102,93265,491],{"class":112},[102,93267,813],{"class":161},[102,93269,119],{"class":112},[102,93271,93272],{"class":104,"line":1168},[102,93273,93274],{"class":171},"#求平均值\n",[102,93276,93277],{"class":104,"line":1183},[102,93278,93279],{"class":112},"np.mean(a)\n",[19,93281,93282],{},"②二维数组",[93,93284,93286],{"className":30369,"code":93285,"language":30371,"meta":23,"style":23},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[99,93287,93288,93293,93318,93323],{"__ignoreMap":23},[102,93289,93290],{"class":104,"line":105},[102,93291,93292],{"class":171},"#二维数组\n",[102,93294,93295,93298,93300,93302,93304,93306,93308,93310,93312,93314,93316],{"class":104,"line":24},[102,93296,93297],{"class":112},"aa",[102,93299,158],{"class":108},[102,93301,92993],{"class":112},[102,93303,330],{"class":161},[102,93305,491],{"class":112},[102,93307,636],{"class":161},[102,93309,92998],{"class":112},[102,93311,184],{"class":161},[102,93313,491],{"class":112},[102,93315,406],{"class":161},[102,93317,119],{"class":112},[102,93319,93320],{"class":104,"line":1168},[102,93321,93322],{"class":171},"#对数组中的所有数求平均\n",[102,93324,93325],{"class":104,"line":1183},[102,93326,93327],{"class":112},"np.mean(aa)\n",[14,93329,93331],{"id":93330},"_114-median求中位数函数","11.4 median()求中位数函数",[93,93333,93335],{"className":30369,"code":93334,"language":30371,"meta":23,"style":23},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[99,93336,93337,93342,93358,93363],{"__ignoreMap":23},[102,93338,93339],{"class":104,"line":105},[102,93340,93341],{"class":171},"#求中位数\n",[102,93343,93344,93346,93348,93350,93352,93354,93356],{"class":104,"line":24},[102,93345,376],{"class":112},[102,93347,158],{"class":108},[102,93349,92993],{"class":112},[102,93351,330],{"class":161},[102,93353,491],{"class":112},[102,93355,559],{"class":161},[102,93357,119],{"class":112},[102,93359,93360],{"class":104,"line":1168},[102,93361,93362],{"class":112},"np.median(b)\n",[102,93364,93365],{"class":104,"line":1183},[102,93366,93367],{"class":171},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93369,93371],{"id":93370},"_115-power求幂运算函数","11.5 power()求幂运算函数",[93,93373,93375],{"className":30369,"code":93374,"language":30371,"meta":23,"style":23},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[99,93376,93377,93393,93398,93403,93412,93417,93426],{"__ignoreMap":23},[102,93378,93379,93381,93383,93385,93387,93389,93391],{"class":104,"line":105},[102,93380,376],{"class":112},[102,93382,158],{"class":108},[102,93384,92993],{"class":112},[102,93386,330],{"class":161},[102,93388,491],{"class":112},[102,93390,559],{"class":161},[102,93392,119],{"class":112},[102,93394,93395],{"class":104,"line":24},[102,93396,93397],{"class":171},"#幂运算\n",[102,93399,93400],{"class":104,"line":1168},[102,93401,93402],{"class":171},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[102,93404,93405,93408,93410],{"class":104,"line":1183},[102,93406,93407],{"class":112},"np.power(b,",[102,93409,190],{"class":161},[102,93411,119],{"class":112},[102,93413,93414],{"class":104,"line":1189},[102,93415,93416],{"class":171},"#或者以下代码，将数据存储起来\n",[102,93418,93419,93421,93423],{"class":104,"line":1203},[102,93420,958],{"class":112},[102,93422,158],{"class":108},[102,93424,93425],{"class":112},"np.empty_like(b)\n",[102,93427,93428,93430,93432,93434,93436,93438],{"class":104,"line":1209},[102,93429,93407],{"class":112},[102,93431,190],{"class":161},[102,93433,491],{"class":112},[102,93435,93045],{"class":5206},[102,93437,158],{"class":108},[102,93439,93440],{"class":112},"y)\n",[14,93442,93444],{"id":93443},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[93,93446,93448],{"className":30369,"code":93447,"language":30371,"meta":23,"style":23},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[99,93449,93450,93466,93471,93476,93480,93498],{"__ignoreMap":23},[102,93451,93452,93454,93456,93458,93460,93462,93464],{"class":104,"line":105},[102,93453,376],{"class":112},[102,93455,158],{"class":108},[102,93457,92993],{"class":112},[102,93459,330],{"class":161},[102,93461,491],{"class":112},[102,93463,559],{"class":161},[102,93465,119],{"class":112},[102,93467,93468],{"class":104,"line":24},[102,93469,93470],{"class":171},"#开方\n",[102,93472,93473],{"class":104,"line":1168},[102,93474,93475],{"class":112},"np.sqrt(b)\n",[102,93477,93478],{"class":104,"line":1183},[102,93479,93416],{"class":171},[102,93481,93482,93484,93486,93489,93492,93494,93496],{"class":104,"line":1189},[102,93483,958],{"class":112},[102,93485,158],{"class":108},[102,93487,93488],{"class":112},"np.empty_like(b,",[102,93490,93491],{"class":5206},"dtype",[102,93493,158],{"class":108},[102,93495,152],{"class":161},[102,93497,119],{"class":112},[102,93499,93500,93503,93505,93507],{"class":104,"line":1203},[102,93501,93502],{"class":112},"np.sqrt(b,",[102,93504,93045],{"class":5206},[102,93506,158],{"class":108},[102,93508,93440],{"class":112},[14,93510,93512],{"id":93511},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93514,93515],{},"对数组中的元素累计求和，可指定轴",[19,93517,93518],{},"#累计求和的意思是：",[19,93520,93521],{},"a = np.array([1, 2, 3, 4])",[19,93523,93524],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[93,93526,93528],{"className":30369,"code":93527,"language":30371,"meta":23,"style":23},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[99,93529,93530,93546,93551,93556],{"__ignoreMap":23},[102,93531,93532,93534,93536,93538,93540,93542,93544],{"class":104,"line":105},[102,93533,376],{"class":112},[102,93535,158],{"class":108},[102,93537,92993],{"class":112},[102,93539,330],{"class":161},[102,93541,491],{"class":112},[102,93543,559],{"class":161},[102,93545,119],{"class":112},[102,93547,93548],{"class":104,"line":24},[102,93549,93550],{"class":112},"np.cumsum(b)\n",[102,93552,93553],{"class":104,"line":1168},[102,93554,93555],{"class":171},"#结果：\n",[102,93557,93558],{"class":104,"line":1183},[102,93559,93560],{"class":171},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93562,93564],{"id":93563},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[93,93566,93568],{"className":30369,"code":93567,"language":30371,"meta":23,"style":23},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[99,93569,93570,93586,93591,93596,93600],{"__ignoreMap":23},[102,93571,93572,93574,93576,93578,93580,93582,93584],{"class":104,"line":105},[102,93573,376],{"class":112},[102,93575,158],{"class":108},[102,93577,92993],{"class":112},[102,93579,330],{"class":161},[102,93581,491],{"class":112},[102,93583,559],{"class":161},[102,93585,119],{"class":112},[102,93587,93588],{"class":104,"line":24},[102,93589,93590],{"class":171},"#对数组中的元素累计求积，可指定轴\n",[102,93592,93593],{"class":104,"line":1168},[102,93594,93595],{"class":112},"np.cumprod(b)\n",[102,93597,93598],{"class":104,"line":1183},[102,93599,93555],{"class":171},[102,93601,93602],{"class":104,"line":1189},[102,93603,93604],{"class":171},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93606,93608],{"id":93607},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[93,93610,93612],{"className":30369,"code":93611,"language":30371,"meta":23,"style":23},"#删除数组中的重复数据，并对数据进行排序\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",[99,93613,93614,93619,93667,93672,93676],{"__ignoreMap":23},[102,93615,93616],{"class":104,"line":105},[102,93617,93618],{"class":171},"#删除数组中的重复数据，并对数据进行排序\n",[102,93620,93621,93623,93625,93627,93629,93631,93633,93635,93637,93639,93641,93643,93645,93647,93649,93651,93653,93655,93657,93659,93661,93663,93665],{"class":104,"line":24},[102,93622,351],{"class":112},[102,93624,158],{"class":108},[102,93626,93015],{"class":112},[102,93628,330],{"class":161},[102,93630,491],{"class":112},[102,93632,190],{"class":161},[102,93634,491],{"class":112},[102,93636,184],{"class":161},[102,93638,491],{"class":112},[102,93640,611],{"class":161},[102,93642,491],{"class":112},[102,93644,184],{"class":161},[102,93646,491],{"class":112},[102,93648,559],{"class":161},[102,93650,491],{"class":112},[102,93652,310],{"class":161},[102,93654,491],{"class":112},[102,93656,304],{"class":161},[102,93658,491],{"class":112},[102,93660,888],{"class":161},[102,93662,491],{"class":112},[102,93664,406],{"class":161},[102,93666,4646],{"class":112},[102,93668,93669],{"class":104,"line":1168},[102,93670,93671],{"class":112},"np.unique(a)\n",[102,93673,93674],{"class":104,"line":1183},[102,93675,93555],{"class":171},[102,93677,93678],{"class":104,"line":1189},[102,93679,93680],{"class":171},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93682,93683],{},"升序形式排序",[14,93685,93687],{"id":93686},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[93,93689,93691],{"className":30369,"code":93690,"language":30371,"meta":23,"style":23},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[99,93692,93693,93741,93746],{"__ignoreMap":23},[102,93694,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725,93727,93729,93731,93733,93735,93737,93739],{"class":104,"line":105},[102,93696,351],{"class":112},[102,93698,158],{"class":108},[102,93700,93015],{"class":112},[102,93702,330],{"class":161},[102,93704,491],{"class":112},[102,93706,190],{"class":161},[102,93708,491],{"class":112},[102,93710,184],{"class":161},[102,93712,491],{"class":112},[102,93714,611],{"class":161},[102,93716,491],{"class":112},[102,93718,184],{"class":161},[102,93720,491],{"class":112},[102,93722,559],{"class":161},[102,93724,491],{"class":112},[102,93726,310],{"class":161},[102,93728,491],{"class":112},[102,93730,304],{"class":161},[102,93732,491],{"class":112},[102,93734,888],{"class":161},[102,93736,491],{"class":112},[102,93738,406],{"class":161},[102,93740,4646],{"class":112},[102,93742,93743],{"class":104,"line":24},[102,93744,93745],{"class":171},"#返回数组中非零元素的索引\n",[102,93747,93748],{"class":104,"line":1168},[102,93749,93750],{"class":112},"np.nonzero(a)\n",[14,93752,93754],{"id":93753},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[93,93756,93758],{"className":30369,"code":93757,"language":30371,"meta":23,"style":23},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[99,93759,93760,93808,93813],{"__ignoreMap":23},[102,93761,93762,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806],{"class":104,"line":105},[102,93763,351],{"class":112},[102,93765,158],{"class":108},[102,93767,93015],{"class":112},[102,93769,330],{"class":161},[102,93771,491],{"class":112},[102,93773,190],{"class":161},[102,93775,491],{"class":112},[102,93777,184],{"class":161},[102,93779,491],{"class":112},[102,93781,611],{"class":161},[102,93783,491],{"class":112},[102,93785,184],{"class":161},[102,93787,491],{"class":112},[102,93789,559],{"class":161},[102,93791,491],{"class":112},[102,93793,310],{"class":161},[102,93795,491],{"class":112},[102,93797,304],{"class":161},[102,93799,491],{"class":112},[102,93801,888],{"class":161},[102,93803,491],{"class":112},[102,93805,406],{"class":161},[102,93807,4646],{"class":112},[102,93809,93810],{"class":104,"line":24},[102,93811,93812],{"class":171},"#计算一组数中最大值与最小值的差，可指定轴\n",[102,93814,93815],{"class":104,"line":1168},[102,93816,93817],{"class":112},"np.ptp(a)\n",[5116,93819,93820],{},"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":23,"searchDepth":24,"depth":24,"links":93822},[93823,93824,93825,93826,93827,93828,93829,93830,93831,93832,93833],{"id":93085,"depth":24,"text":93086},{"id":93128,"depth":24,"text":93129},{"id":93236,"depth":24,"text":93237},{"id":93330,"depth":24,"text":93331},{"id":93370,"depth":24,"text":93371},{"id":93443,"depth":24,"text":93444},{"id":93511,"depth":24,"text":93512},{"id":93563,"depth":24,"text":93564},{"id":93607,"depth":24,"text":93608},{"id":93686,"depth":24,"text":93687},{"id":93753,"depth":24,"text":93754},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93071,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93840,"title":93841,"body":93842,"description":27,"extension":28,"meta":94497,"navigation":30,"path":94498,"seo":94499,"stem":94500,"__hash__":94501},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93843,"toc":94485},[93844,93847,93851,93854,94070,94074,94077,94286,94290,94356,94361,94365,94368,94371,94409,94413,94416,94421,94425,94428,94431,94436,94440,94443,94447,94450,94453,94458,94462,94465,94468,94473,94477,94482],[10,93845,93841],{"id":93846},"_12其他常用函数",[14,93848,93850],{"id":93849},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,93852,93853],{},"将数组的数据按照行列复制扩展",[93,93855,93857],{"className":30369,"code":93856,"language":30371,"meta":23,"style":23},"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",[99,93858,93859,93875,93884,93888,93893,93898,93911,93915,93920,93925,93930,93934,93939,93963,93975,93979,93983,93988,93993,93998,94003,94007,94020,94024,94028,94033,94038,94043,94048,94053,94057,94061,94066],{"__ignoreMap":23},[102,93860,93861,93863,93865,93867,93869,93871,93873],{"class":104,"line":105},[102,93862,351],{"class":112},[102,93864,158],{"class":108},[102,93866,92993],{"class":112},[102,93868,330],{"class":161},[102,93870,491],{"class":112},[102,93872,432],{"class":161},[102,93874,119],{"class":112},[102,93876,93877,93880,93882],{"class":104,"line":24},[102,93878,93879],{"class":112},"np.tile(a,",[102,93881,190],{"class":161},[102,93883,119],{"class":112},[102,93885,93886],{"class":104,"line":1168},[102,93887,93555],{"class":171},[102,93889,93890],{"class":104,"line":1183},[102,93891,93892],{"class":171},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[102,93894,93895],{"class":104,"line":1189},[102,93896,93897],{"class":171},"#行复制两次，列复制三次\n",[102,93899,93900,93903,93905,93907,93909],{"class":104,"line":1203},[102,93901,93902],{"class":112},"np.tile(a,(",[102,93904,190],{"class":161},[102,93906,491],{"class":112},[102,93908,184],{"class":161},[102,93910,30488],{"class":112},[102,93912,93913],{"class":104,"line":1209},[102,93914,93555],{"class":171},[102,93916,93917],{"class":104,"line":1300},[102,93918,93919],{"class":217},"'''\n",[102,93921,93922],{"class":104,"line":1306},[102,93923,93924],{"class":217},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[102,93926,93927],{"class":104,"line":1318},[102,93928,93929],{"class":217},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[102,93931,93932],{"class":104,"line":1601},[102,93933,93919],{"class":217},[102,93935,93936],{"class":104,"line":1606},[102,93937,93938],{"class":171},"#创建二维数组\n",[102,93940,93941,93943,93945,93947,93949,93951,93953,93955,93957,93959,93961],{"class":104,"line":1612},[102,93942,93297],{"class":112},[102,93944,158],{"class":108},[102,93946,92993],{"class":112},[102,93948,330],{"class":161},[102,93950,491],{"class":112},[102,93952,636],{"class":161},[102,93954,92998],{"class":112},[102,93956,406],{"class":161},[102,93958,491],{"class":112},[102,93960,184],{"class":161},[102,93962,119],{"class":112},[102,93964,93965,93968,93970,93972],{"class":104,"line":1617},[102,93966,93967],{"class":112},"np.tile(aa,",[102,93969,190],{"class":161},[102,93971,542],{"class":112},[102,93973,93974],{"class":171},"#一个数的时候就是行\n",[102,93976,93977],{"class":104,"line":1631},[102,93978,93555],{"class":171},[102,93980,93981],{"class":104,"line":1636},[102,93982,93919],{"class":217},[102,93984,93985],{"class":104,"line":1642},[102,93986,93987],{"class":217},"array([[ 1,  2,  3,  1,  2,  3],\n",[102,93989,93990],{"class":104,"line":1663},[102,93991,93992],{"class":217},"       [ 4,  5,  6,  4,  5,  6],\n",[102,93994,93995],{"class":104,"line":1668},[102,93996,93997],{"class":217},"       [ 7,  8,  9,  7,  8,  9],\n",[102,93999,94000],{"class":104,"line":1682},[102,94001,94002],{"class":217},"       [10, 11, 12, 10, 11, 12]])\n",[102,94004,94005],{"class":104,"line":1687},[102,94006,93919],{"class":217},[102,94008,94009,94012,94014,94016,94018],{"class":104,"line":1716},[102,94010,94011],{"class":112},"np.tile(aa,(",[102,94013,190],{"class":161},[102,94015,491],{"class":112},[102,94017,184],{"class":161},[102,94019,30488],{"class":112},[102,94021,94022],{"class":104,"line":1721},[102,94023,93555],{"class":171},[102,94025,94026],{"class":104,"line":1738},[102,94027,93919],{"class":217},[102,94029,94030],{"class":104,"line":1743},[102,94031,94032],{"class":217},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[102,94034,94035],{"class":104,"line":1748},[102,94036,94037],{"class":217},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[102,94039,94040],{"class":104,"line":1753},[102,94041,94042],{"class":217},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[102,94044,94045],{"class":104,"line":1767},[102,94046,94047],{"class":217},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[102,94049,94050],{"class":104,"line":1772},[102,94051,94052],{"class":217},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[102,94054,94055],{"class":104,"line":2566},[102,94056,94037],{"class":217},[102,94058,94059],{"class":104,"line":2580},[102,94060,94042],{"class":217},[102,94062,94063],{"class":104,"line":2588},[102,94064,94065],{"class":217},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[102,94067,94068],{"class":104,"line":2593},[102,94069,93919],{"class":217},[14,94071,94073],{"id":94072},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94075,94076],{},"repeat()将数组中的每个元素重复若干次",[93,94078,94080],{"className":30369,"code":94079,"language":30371,"meta":23,"style":23},"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",[99,94081,94082,94098,94107,94111,94116,94140,94145,94154,94158,94163,94167,94172,94188,94192,94196,94201,94206,94211,94215,94220,94224,94229,94234,94238,94254,94258,94262,94267,94272,94277,94282],{"__ignoreMap":23},[102,94083,94084,94086,94088,94090,94092,94094,94096],{"class":104,"line":105},[102,94085,351],{"class":112},[102,94087,158],{"class":108},[102,94089,92993],{"class":112},[102,94091,330],{"class":161},[102,94093,491],{"class":112},[102,94095,432],{"class":161},[102,94097,119],{"class":112},[102,94099,94100,94103,94105],{"class":104,"line":24},[102,94101,94102],{"class":112},"np.repeat(a,",[102,94104,184],{"class":161},[102,94106,119],{"class":112},[102,94108,94109],{"class":104,"line":1168},[102,94110,93555],{"class":171},[102,94112,94113],{"class":104,"line":1183},[102,94114,94115],{"class":171},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[102,94117,94118,94120,94122,94124,94126,94128,94130,94132,94134,94136,94138],{"class":104,"line":1189},[102,94119,93297],{"class":112},[102,94121,158],{"class":108},[102,94123,92993],{"class":112},[102,94125,330],{"class":161},[102,94127,491],{"class":112},[102,94129,636],{"class":161},[102,94131,92998],{"class":112},[102,94133,406],{"class":161},[102,94135,491],{"class":112},[102,94137,184],{"class":161},[102,94139,119],{"class":112},[102,94141,94142],{"class":104,"line":1203},[102,94143,94144],{"class":171},"#这个重复之后二维变成一维\n",[102,94146,94147,94150,94152],{"class":104,"line":1209},[102,94148,94149],{"class":112},"np.repeat(aa,",[102,94151,190],{"class":161},[102,94153,119],{"class":112},[102,94155,94156],{"class":104,"line":1300},[102,94157,93919],{"class":217},[102,94159,94160],{"class":104,"line":1306},[102,94161,94162],{"class":217},"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",[102,94164,94165],{"class":104,"line":1318},[102,94166,93919],{"class":217},[102,94168,94169],{"class":104,"line":1601},[102,94170,94171],{"class":171},"#指定axis\n",[102,94173,94174,94176,94178,94180,94182,94184,94186],{"class":104,"line":1606},[102,94175,94149],{"class":112},[102,94177,190],{"class":161},[102,94179,491],{"class":112},[102,94181,47505],{"class":5206},[102,94183,158],{"class":108},[102,94185,304],{"class":161},[102,94187,119],{"class":112},[102,94189,94190],{"class":104,"line":1612},[102,94191,93555],{"class":171},[102,94193,94194],{"class":104,"line":1617},[102,94195,93919],{"class":217},[102,94197,94198],{"class":104,"line":1631},[102,94199,94200],{"class":217},"array([[ 1,  2,  3],\n",[102,94202,94203],{"class":104,"line":1636},[102,94204,94205],{"class":217},"       [ 1,  2,  3],\n",[102,94207,94208],{"class":104,"line":1642},[102,94209,94210],{"class":217},"       [ 4,  5,  6],\n",[102,94212,94213],{"class":104,"line":1663},[102,94214,94210],{"class":217},[102,94216,94217],{"class":104,"line":1668},[102,94218,94219],{"class":217},"       [ 7,  8,  9],\n",[102,94221,94222],{"class":104,"line":1682},[102,94223,94219],{"class":217},[102,94225,94226],{"class":104,"line":1687},[102,94227,94228],{"class":217},"       [10, 11, 12],\n",[102,94230,94231],{"class":104,"line":1716},[102,94232,94233],{"class":217},"       [10, 11, 12]])\n",[102,94235,94236],{"class":104,"line":1721},[102,94237,93919],{"class":217},[102,94239,94240,94242,94244,94246,94248,94250,94252],{"class":104,"line":1738},[102,94241,94149],{"class":112},[102,94243,190],{"class":161},[102,94245,491],{"class":112},[102,94247,47505],{"class":5206},[102,94249,158],{"class":108},[102,94251,330],{"class":161},[102,94253,119],{"class":112},[102,94255,94256],{"class":104,"line":1743},[102,94257,93555],{"class":171},[102,94259,94260],{"class":104,"line":1748},[102,94261,93919],{"class":217},[102,94263,94264],{"class":104,"line":1753},[102,94265,94266],{"class":217},"array([[ 1,  1,  2,  2,  3,  3],\n",[102,94268,94269],{"class":104,"line":1767},[102,94270,94271],{"class":217},"       [ 4,  4,  5,  5,  6,  6],\n",[102,94273,94274],{"class":104,"line":1772},[102,94275,94276],{"class":217},"       [ 7,  7,  8,  8,  9,  9],\n",[102,94278,94279],{"class":104,"line":2566},[102,94280,94281],{"class":217},"       [10, 10, 11, 11, 12, 12]])\n",[102,94283,94284],{"class":104,"line":2580},[102,94285,93919],{"class":217},[14,94287,94289],{"id":94288},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[93,94291,94293],{"className":30369,"code":94292,"language":30371,"meta":23,"style":23},"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",[99,94294,94295,94311,94316,94328,94332,94337,94347,94351],{"__ignoreMap":23},[102,94296,94297,94299,94301,94303,94305,94307,94309],{"class":104,"line":105},[102,94298,351],{"class":112},[102,94300,158],{"class":108},[102,94302,92993],{"class":112},[102,94304,330],{"class":161},[102,94306,491],{"class":112},[102,94308,432],{"class":161},[102,94310,119],{"class":112},[102,94312,94313],{"class":104,"line":24},[102,94314,94315],{"class":171},"#array([，2，3，4])\n",[102,94317,94318,94321,94323,94325],{"class":104,"line":1168},[102,94319,94320],{"class":112},"np.roll(a,",[102,94322,190],{"class":161},[102,94324,542],{"class":112},[102,94326,94327],{"class":171},"#传正数向后调多少位，传负数向前调多少位\n",[102,94329,94330],{"class":104,"line":1183},[102,94331,93555],{"class":171},[102,94333,94334],{"class":104,"line":1189},[102,94335,94336],{"class":171},"#array([3, 4, 1, 2])\n",[102,94338,94339,94341,94343,94345],{"class":104,"line":1203},[102,94340,94320],{"class":112},[102,94342,645],{"class":108},[102,94344,330],{"class":161},[102,94346,119],{"class":112},[102,94348,94349],{"class":104,"line":1209},[102,94350,93555],{"class":171},[102,94352,94353],{"class":104,"line":1300},[102,94354,94355],{"class":171},"#array([2, 3, 4, 1])\n",[19,94357,94358],{},[1451,94359],{"alt":23,"src":94360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94362,94364],{"id":94363},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94366,94367],{},"resize()重新调整数组的大小",[19,94369,94370],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[93,94372,94374],{"className":30369,"code":94373,"language":30371,"meta":23,"style":23},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[99,94375,94376,94381,94394],{"__ignoreMap":23},[102,94377,94378],{"class":104,"line":105},[102,94379,94380],{"class":171},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[102,94382,94383,94386,94388,94390,94392],{"class":104,"line":24},[102,94384,94385],{"class":112},"np.resize(aa,(",[102,94387,190],{"class":161},[102,94389,491],{"class":112},[102,94391,457],{"class":161},[102,94393,30488],{"class":112},[102,94395,94396,94398,94400,94402,94404,94406],{"class":104,"line":1168},[102,94397,94385],{"class":112},[102,94399,190],{"class":161},[102,94401,491],{"class":112},[102,94403,533],{"class":161},[102,94405,82762],{"class":112},[102,94407,94408],{"class":171},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94410,94412],{"id":94411},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94414,94415],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94417,94418],{},[1451,94419],{"alt":23,"src":94420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94422,94424],{"id":94423},"_126-保存加载文件","12.6 保存加载文件",[19,94426,94427],{},"savetxt():将数据保存到txt文件中",[19,94429,94430],{},"loadtxt():从文件加载数据",[19,94432,94433],{},[1451,94434],{"alt":23,"src":94435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94437,94439],{"id":94438},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94441,94442],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94444,94446],{"id":94445},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94448,94449],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94451,94452],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94454,94455],{},[1451,94456],{"alt":23,"src":94457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94459,94461],{"id":94460},"_129-where语句","12.9 where语句",[19,94463,94464],{},"np.where(条件,x,y)",[19,94466,94467],{},"如果条件为True,对应值为x,否则对应值为y",[19,94469,94470],{},[1451,94471],{"alt":23,"src":94472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94474,94476],{"id":94475},"_1210-dot矩阵","12.10 dot()矩阵",[19,94478,94479],{},[1451,94480],{"alt":23,"src":94481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5116,94483,94484],{},"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":23,"searchDepth":24,"depth":24,"links":94486},[94487,94488,94489,94490,94491,94492,94493,94494,94495,94496],{"id":93849,"depth":24,"text":93850},{"id":94072,"depth":24,"text":94073},{"id":94288,"depth":24,"text":94289},{"id":94363,"depth":24,"text":94364},{"id":94411,"depth":24,"text":94412},{"id":94423,"depth":24,"text":94424},{"id":94438,"depth":24,"text":94439},{"id":94445,"depth":24,"text":94446},{"id":94460,"depth":24,"text":94461},{"id":94475,"depth":24,"text":94476},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93841,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94503,"title":94504,"body":94505,"description":27,"extension":28,"meta":94858,"navigation":30,"path":94859,"seo":94860,"stem":94861,"__hash__":94862},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94506,"toc":94856},[94507,94510,94513,94516,94519,94522,94587,94589,94853],[10,94508,94504],{"id":94509},"_13数组排序",[19,94511,94512],{},"排序主要用到的方法是np.sort和np.argsort",[19,94514,94515],{},"其中np.sort()对数组直接排序",[19,94517,94518],{},"而np.argsort()是返回排序后的原始索引",[19,94520,94521],{},"①一维数组",[93,94523,94525],{"className":30369,"code":94524,"language":30371,"meta":23,"style":23},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[99,94526,94527,94531,94571,94579],{"__ignoreMap":23},[102,94528,94529],{"class":104,"line":105},[102,94530,93096],{"class":171},[102,94532,94533,94535,94537,94539,94541,94543,94545,94547,94549,94551,94553,94555,94557,94559,94561,94563,94565,94567,94569],{"class":104,"line":24},[102,94534,351],{"class":112},[102,94536,158],{"class":108},[102,94538,93015],{"class":112},[102,94540,184],{"class":161},[102,94542,491],{"class":112},[102,94544,611],{"class":161},[102,94546,491],{"class":112},[102,94548,508],{"class":161},[102,94550,491],{"class":112},[102,94552,888],{"class":161},[102,94554,491],{"class":112},[102,94556,392],{"class":161},[102,94558,491],{"class":112},[102,94560,1006],{"class":161},[102,94562,491],{"class":112},[102,94564,457],{"class":161},[102,94566,491],{"class":112},[102,94568,559],{"class":161},[102,94570,4646],{"class":112},[102,94572,94573,94576],{"class":104,"line":1168},[102,94574,94575],{"class":112},"np.sort(a)",[102,94577,94578],{"class":171},"#升序排序\n",[102,94580,94581,94584],{"class":104,"line":1183},[102,94582,94583],{"class":112},"np.argsort(a)",[102,94585,94586],{"class":171},"#按照元素大小来索引排序\n",[19,94588,93282],{},[93,94590,94592],{"className":30369,"code":94591,"language":30371,"meta":23,"style":23},"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",[99,94593,94594,94606,94632,94637,94641,94646,94651,94656,94661,94665,94673,94677,94682,94687,94692,94697,94701,94706,94719,94723,94728,94733,94738,94743,94747,94752,94764,94768,94772,94776,94780,94784,94788,94793,94808,94813,94822,94827,94831,94835,94840,94844,94849],{"__ignoreMap":23},[102,94595,94596,94599,94601,94603],{"class":104,"line":105},[102,94597,94598],{"class":112},"np.random.seed(",[102,94600,304],{"class":161},[102,94602,542],{"class":112},[102,94604,94605],{"class":171},"#保证每次值一样\n",[102,94607,94608,94610,94612,94614,94616,94618,94620,94622,94624,94626,94628,94630],{"class":104,"line":24},[102,94609,93297],{"class":112},[102,94611,158],{"class":108},[102,94613,93105],{"class":112},[102,94615,424],{"class":161},[102,94617,491],{"class":112},[102,94619,31487],{"class":5206},[102,94621,158],{"class":108},[102,94623,113],{"class":112},[102,94625,406],{"class":161},[102,94627,491],{"class":112},[102,94629,457],{"class":161},[102,94631,30488],{"class":112},[102,94633,94634],{"class":104,"line":1168},[102,94635,94636],{"class":171},"#原数组：\n",[102,94638,94639],{"class":104,"line":1183},[102,94640,93919],{"class":217},[102,94642,94643],{"class":104,"line":1189},[102,94644,94645],{"class":217},"array([[44, 47, 64, 67, 67,  9],\n",[102,94647,94648],{"class":104,"line":1203},[102,94649,94650],{"class":217},"       [83, 21, 36, 87, 70, 88],\n",[102,94652,94653],{"class":104,"line":1209},[102,94654,94655],{"class":217},"       [88, 12, 58, 65, 39, 87],\n",[102,94657,94658],{"class":104,"line":1300},[102,94659,94660],{"class":217},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[102,94662,94663],{"class":104,"line":1306},[102,94664,93919],{"class":217},[102,94666,94667,94670],{"class":104,"line":1318},[102,94668,94669],{"class":112},"np.sort(aa)",[102,94671,94672],{"class":171},"#每行进行了排序\n",[102,94674,94675],{"class":104,"line":1601},[102,94676,93919],{"class":217},[102,94678,94679],{"class":104,"line":1606},[102,94680,94681],{"class":217},"array([[ 9, 44, 47, 64, 67, 67],\n",[102,94683,94684],{"class":104,"line":1612},[102,94685,94686],{"class":217},"       [21, 36, 70, 83, 87, 88],\n",[102,94688,94689],{"class":104,"line":1617},[102,94690,94691],{"class":217},"       [12, 39, 58, 65, 87, 88],\n",[102,94693,94694],{"class":104,"line":1631},[102,94695,94696],{"class":217},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[102,94698,94699],{"class":104,"line":1636},[102,94700,93919],{"class":217},[102,94702,94703],{"class":104,"line":1642},[102,94704,94705],{"class":171},"#axis=0时\n",[102,94707,94708,94711,94713,94715,94717],{"class":104,"line":1663},[102,94709,94710],{"class":112},"np.sort(aa,",[102,94712,47505],{"class":5206},[102,94714,158],{"class":108},[102,94716,304],{"class":161},[102,94718,119],{"class":112},[102,94720,94721],{"class":104,"line":1668},[102,94722,93919],{"class":217},[102,94724,94725],{"class":104,"line":1682},[102,94726,94727],{"class":217},"array([[44, 12, 36, 37, 25,  9],\n",[102,94729,94730],{"class":104,"line":1687},[102,94731,94732],{"class":217},"       [46, 21, 58, 65, 39, 77],\n",[102,94734,94735],{"class":104,"line":1716},[102,94736,94737],{"class":217},"       [83, 47, 64, 67, 67, 87],\n",[102,94739,94740],{"class":104,"line":1721},[102,94741,94742],{"class":217},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[102,94744,94745],{"class":104,"line":1738},[102,94746,93919],{"class":217},[102,94748,94749],{"class":104,"line":1743},[102,94750,94751],{"class":171},"#axis=1时,为默认值\n",[102,94753,94754,94756,94758,94760,94762],{"class":104,"line":1748},[102,94755,94710],{"class":112},[102,94757,47505],{"class":5206},[102,94759,158],{"class":108},[102,94761,330],{"class":161},[102,94763,119],{"class":112},[102,94765,94766],{"class":104,"line":1753},[102,94767,93919],{"class":217},[102,94769,94770],{"class":104,"line":1767},[102,94771,94681],{"class":217},[102,94773,94774],{"class":104,"line":1772},[102,94775,94686],{"class":217},[102,94777,94778],{"class":104,"line":2566},[102,94779,94691],{"class":217},[102,94781,94782],{"class":104,"line":2580},[102,94783,94696],{"class":217},[102,94785,94786],{"class":104,"line":2588},[102,94787,93919],{"class":217},[102,94789,94790],{"class":104,"line":2593},[102,94791,94792],{"class":171},"#按最后一列排序\n",[102,94794,94795,94797,94799,94802,94804,94806],{"class":104,"line":2599},[102,94796,376],{"class":112},[102,94798,158],{"class":108},[102,94800,94801],{"class":112},"aa[:,",[102,94803,645],{"class":108},[102,94805,330],{"class":161},[102,94807,33237],{"class":112},[102,94809,94810],{"class":104,"line":2605},[102,94811,94812],{"class":171},"#获取最后一列排好序的索引\n",[102,94814,94815,94817,94819],{"class":104,"line":2610},[102,94816,74049],{"class":112},[102,94818,158],{"class":108},[102,94820,94821],{"class":112},"np.argsort(b)\n",[102,94823,94824],{"class":104,"line":7938},[102,94825,94826],{"class":112},"aa[index]\n",[102,94828,94829],{"class":104,"line":7962},[102,94830,93919],{"class":217},[102,94832,94833],{"class":104,"line":7967},[102,94834,94645],{"class":217},[102,94836,94837],{"class":104,"line":7973},[102,94838,94839],{"class":217},"       [46, 88, 81, 37, 25, 77],\n",[102,94841,94842],{"class":104,"line":8000},[102,94843,94655],{"class":217},[102,94845,94846],{"class":104,"line":8005},[102,94847,94848],{"class":217},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[102,94850,94851],{"class":104,"line":8011},[102,94852,93919],{"class":217},[5116,94854,94855],{},"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":23,"searchDepth":24,"depth":24,"links":94857},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94504,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94864,"title":94865,"body":94866,"description":27,"extension":28,"meta":94896,"navigation":30,"path":94897,"seo":94898,"stem":94899,"__hash__":94900},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94867,"toc":94894},[94868,94871,94874,94877,94880,94883,94886,94889],[10,94869,94865],{"id":94870},"_14广播机制",[19,94872,94873],{},"广播的规则：",[19,94875,94876],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,94878,94879],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,94881,94882],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,94884,94885],{},"3.如果没有维度形状为1，则会引发异常",[19,94887,94888],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,94890,94891],{},[1451,94892],{"alt":23,"src":94893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":23,"searchDepth":24,"depth":24,"links":94895},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94865,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94902,"title":94903,"body":94904,"description":27,"extension":28,"meta":95002,"navigation":30,"path":95003,"seo":95004,"stem":95005,"__hash__":95006},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94905,"toc":95000},[94906,94909,94912,94997],[10,94907,94903],{"id":94908},"_15比较掩码",[19,94910,94911],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[93,94913,94915],{"className":30369,"code":94914,"language":30371,"meta":23,"style":23},"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",[99,94916,94917,94963,94974,94988,94992],{"__ignoreMap":23},[102,94918,94919,94921,94923,94926,94928,94930,94932,94934,94936,94938,94940,94942,94944,94946,94948,94950,94952,94954,94956,94958,94960],{"class":104,"line":105},[102,94920,351],{"class":112},[102,94922,158],{"class":108},[102,94924,94925],{"class":112},"np.array([[",[102,94927,330],{"class":161},[102,94929,491],{"class":112},[102,94931,190],{"class":161},[102,94933,491],{"class":112},[102,94935,184],{"class":161},[102,94937,48021],{"class":112},[102,94939,585],{"class":161},[102,94941,491],{"class":112},[102,94943,611],{"class":161},[102,94945,491],{"class":112},[102,94947,636],{"class":161},[102,94949,48021],{"class":112},[102,94951,838],{"class":161},[102,94953,491],{"class":112},[102,94955,863],{"class":161},[102,94957,491],{"class":112},[102,94959,888],{"class":161},[102,94961,94962],{"class":112},"]])\n",[102,94964,94965,94967,94969,94971],{"class":104,"line":24},[102,94966,351],{"class":112},[102,94968,1023],{"class":108},[102,94970,813],{"class":161},[102,94972,94973],{"class":171},"#结果是一个由True,False组成的数组\n",[102,94975,94976,94979,94981,94983,94985],{"class":104,"line":1168},[102,94977,94978],{"class":112},"a[a",[102,94980,1023],{"class":108},[102,94982,813],{"class":161},[102,94984,1053],{"class":112},[102,94986,94987],{"class":171},"#小于20的元素会存到这个数组中\n",[102,94989,94990],{"class":104,"line":1183},[102,94991,93555],{"class":171},[102,94993,94994],{"class":104,"line":1189},[102,94995,94996],{"class":171},"#array([ 1,  2,  3, 11, 12, 13])\n",[5116,94998,94999],{},"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":23,"searchDepth":24,"depth":24,"links":95001},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94903,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95008,"title":95009,"body":95010,"description":27,"extension":28,"meta":95102,"navigation":30,"path":95103,"seo":95104,"stem":95105,"__hash__":95106},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95011,"toc":95100},[95012,95015,95018,95021,95024,95027,95092,95097],[10,95013,95009],{"id":95014},"_16魔法命令time",[19,95016,95017],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95019,95020],{},"%:行模式",[19,95022,95023],{},"%%:单元格模式",[19,95025,95026],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[93,95028,95030],{"className":30369,"code":95029,"language":30371,"meta":23,"style":23},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[99,95031,95032,95037,95044,95049,95058,95071,95075,95083],{"__ignoreMap":23},[102,95033,95034],{"class":104,"line":105},[102,95035,95036],{"class":171},"#程序执行时间\n",[102,95038,95039,95041],{"class":104,"line":24},[102,95040,30383],{"class":108},[102,95042,95043],{"class":112}," time \n",[102,95045,95046],{"class":104,"line":1168},[102,95047,95048],{"class":171},"#获取时间\n",[102,95050,95051,95054,95056],{"class":104,"line":1183},[102,95052,95053],{"class":112},"start",[102,95055,158],{"class":108},[102,95057,32409],{"class":112},[102,95059,95060,95063,95066,95068],{"class":104,"line":1189},[102,95061,95062],{"class":112},"time.sleep(",[102,95064,95065],{"class":161},"0.4",[102,95067,542],{"class":112},[102,95069,95070],{"class":171},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[102,95072,95073],{"class":104,"line":1203},[102,95074,95048],{"class":171},[102,95076,95077,95079,95081],{"class":104,"line":1209},[102,95078,45792],{"class":112},[102,95080,158],{"class":108},[102,95082,32409],{"class":112},[102,95084,95085,95087,95089],{"class":104,"line":1300},[102,95086,45792],{"class":112},[102,95088,645],{"class":108},[102,95090,95091],{"class":112},"start\n",[19,95093,95094],{},[1451,95095],{"alt":23,"src":95096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5116,95098,95099],{},"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":23,"searchDepth":24,"depth":24,"links":95101},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95009,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95108,"title":95109,"body":95110,"description":27,"extension":28,"meta":95145,"navigation":30,"path":95146,"seo":95147,"stem":95148,"__hash__":95149},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95111,"toc":95143},[95112,95115,95118,95121,95124,95127,95130,95133,95138],[10,95113,95109],{"id":95114},"_17魔法命令timeit",[19,95116,95117],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95119,95120],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95122,95123],{},"单元格模式：",[19,95125,95126],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95128,95129],{},"初始化语句执行次数由轮数来决定",[19,95131,95132],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95134,95135],{},[1451,95136],{"alt":23,"src":95137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95139,95140],{},[1451,95141],{"alt":23,"src":95142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":23,"searchDepth":24,"depth":24,"links":95144},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95109,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95151,"title":95152,"body":95153,"description":27,"extension":28,"meta":95171,"navigation":30,"path":95172,"seo":95173,"stem":95174,"__hash__":95175},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95154,"toc":95169},[95155,95158,95161,95164],[10,95156,95152],{"id":95157},"_18魔法命令writefile和run",[19,95159,95160],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95162,95163],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95165,95166],{},[1451,95167],{"alt":23,"src":95168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":23,"searchDepth":24,"depth":24,"links":95170},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95152,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95177,"title":95178,"body":95179,"description":27,"extension":28,"meta":95232,"navigation":30,"path":95233,"seo":95234,"stem":95235,"__hash__":95236},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95180,"toc":95230},[95181,95184,95187,95189,95192,95195,95200,95203,95206,95209,95212,95215,95218,95221,95224,95227],[10,95182,95178],{"id":95183},"_19魔法命令memit",[19,95185,95186],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95188,24590],{},[19,95190,95191],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95193,95194],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95196,95197],{},[1451,95198],{"alt":23,"src":95199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95201,95202],{},"补充：",[19,95204,95205],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95207,95208],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95210,95211],{},"解决方法：",[19,95213,95214],{},"1.cmd",[19,95216,95217],{},"2.依次输入以下代码：",[19,95219,95220],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95222,95223],{},"pip install --upgrade ipython",[19,95225,95226],{},"#升级 memory_profiler 和 setuptools",[19,95228,95229],{},"pip install --upgrade memory_profiler setuptools",{"title":23,"searchDepth":24,"depth":24,"links":95231},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95178,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95238,"title":95239,"body":95240,"description":27,"extension":28,"meta":96886,"navigation":30,"path":96887,"seo":96888,"stem":96889,"__hash__":96890},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95241,"toc":96856},[95242,95245,95249,95253,95314,95317,95322,95326,95331,95336,95341,95346,95349,95354,95358,95362,95395,95398,95401,95404,95456,95459,95495,95498,95540,95544,95565,95567,95604,95606,95611,95613,95618,95622,95625,95653,95657,95661,95714,95718,95810,95814,95818,95821,95826,95830,95855,95860,95864,95867,95870,95873,95876,95879,95882,95885,95897,95901,95905,95908,95940,95943,95966,95969,95995,95998,96024,96027,96061,96064,96126,96130,96133,96137,96140,96166,96169,96172,96177,96180,96249,96251,96256,96317,96320,96331,96337,96342,96346,96349,96362,96366,96381,96383,96406,96408,96434,96437,96440,96443,96491,96493,96498,96502,96506,96533,96537,96564,96567,96572,96577,96667,96671,96729,96734,96737,96740,96782,96786,96842,96847,96850,96853],[10,95243,95239],{"id":95244},"_2创建数组",[14,95246,95248],{"id":95247},"_21-array函数创建数组","2.1 array()函数创建数组",[73,95250,95252],{"id":95251},"_221-函数语句","2.2.1 函数语句",[93,95254,95256],{"className":30369,"code":95255,"language":30371,"meta":23,"style":23},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[99,95257,95258],{"__ignoreMap":23},[102,95259,95260,95263,95266,95268,95270,95272,95274,95276,95279,95281,95284,95286,95289,95291,95293,95295,95298,95300,95303,95305,95308,95310,95312],{"class":104,"line":105},[102,95261,95262],{"class":112},"numpy.array(",[102,95264,95265],{"class":161},"object",[102,95267,12425],{"class":112},[102,95269,93491],{"class":5206},[102,95271,13554],{"class":108},[102,95273,38924],{"class":161},[102,95275,12425],{"class":112},[102,95277,95278],{"class":5206},"copy",[102,95280,13554],{"class":108},[102,95282,95283],{"class":161}," True",[102,95285,12425],{"class":112},[102,95287,95288],{"class":5206},"order",[102,95290,13554],{"class":108},[102,95292,38924],{"class":161},[102,95294,12425],{"class":112},[102,95296,95297],{"class":5206},"subok",[102,95299,13554],{"class":108},[102,95301,95302],{"class":161}," False",[102,95304,12425],{"class":112},[102,95306,95307],{"class":5206},"ndmin",[102,95309,13554],{"class":108},[102,95311,4082],{"class":161},[102,95313,119],{"class":112},[19,95315,95316],{},"参数：",[19,95318,95319],{},[1451,95320],{"alt":23,"src":95321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[73,95323,95325],{"id":95324},"_222-实例","2.2.2 实例",[19,95327,95328],{},[1451,95329],{"alt":23,"src":95330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95332,95333],{},[1451,95334],{"alt":23,"src":95335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95337,95338],{},[1451,95339],{"alt":23,"src":95340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95342,95343],{},[1451,95344],{"alt":23,"src":95345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95347,95348],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95350,95351],{},[1451,95352],{"alt":23,"src":95353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95355,95357],{"id":95356},"_22-随机数创建数组","2.2 随机数创建数组",[73,95359,95361],{"id":95360},"_221-random语句","2.2.1 random语句",[93,95363,95365],{"className":30369,"code":95364,"language":30371,"meta":23,"style":23},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[99,95366,95367,95372,95377,95385,95390],{"__ignoreMap":23},[102,95368,95369],{"class":104,"line":105},[102,95370,95371],{"class":171},"#random.random()\n",[102,95373,95374],{"class":104,"line":24},[102,95375,95376],{"class":171},"#确定随机种子,就是每次运行结果是相同的\n",[102,95378,95379,95381,95383],{"class":104,"line":1168},[102,95380,94598],{"class":112},[102,95382,304],{"class":161},[102,95384,119],{"class":112},[102,95386,95387],{"class":104,"line":1183},[102,95388,95389],{"class":112},"np.random.random()\n",[102,95391,95392],{"class":104,"line":1189},[102,95393,95394],{"class":171},"#生成一个随机的数目\n",[19,95396,95397],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95399,95400],{},"可以指定数组形状 size",[19,95402,95403],{},"①生成一维数组",[93,95405,95407],{"className":30369,"code":95406,"language":30371,"meta":23,"style":23},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[99,95408,95409,95414,95427,95432,95448],{"__ignoreMap":23},[102,95410,95411],{"class":104,"line":105},[102,95412,95413],{"class":171},"#random.random(size())\n",[102,95415,95416,95419,95421,95423,95425],{"class":104,"line":24},[102,95417,95418],{"class":112},"np.random.random(",[102,95420,31487],{"class":5206},[102,95422,158],{"class":108},[102,95424,432],{"class":161},[102,95426,119],{"class":112},[102,95428,95429],{"class":104,"line":1168},[102,95430,95431],{"class":171},"#生成一位的五个元素\n",[102,95433,95434,95436,95438,95440,95442,95444,95446],{"class":104,"line":1183},[102,95435,351],{"class":112},[102,95437,158],{"class":108},[102,95439,95418],{"class":112},[102,95441,31487],{"class":5206},[102,95443,158],{"class":108},[102,95445,406],{"class":161},[102,95447,119],{"class":112},[102,95449,95450,95453],{"class":104,"line":1189},[102,95451,95452],{"class":112},"a.shape ",[102,95454,95455],{"class":171},"#输出数组形状\n",[19,95457,95458],{},"②生成二维数组",[93,95460,95462],{"className":30369,"code":95461,"language":30371,"meta":23,"style":23},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[99,95463,95464,95468,95490],{"__ignoreMap":23},[102,95465,95466],{"class":104,"line":105},[102,95467,93292],{"class":171},[102,95469,95470,95472,95474,95476,95478,95480,95482,95484,95486,95488],{"class":104,"line":24},[102,95471,93297],{"class":112},[102,95473,158],{"class":108},[102,95475,95418],{"class":112},[102,95477,31487],{"class":5206},[102,95479,158],{"class":108},[102,95481,113],{"class":112},[102,95483,406],{"class":161},[102,95485,491],{"class":112},[102,95487,432],{"class":161},[102,95489,30488],{"class":112},[102,95491,95492],{"class":104,"line":1168},[102,95493,95494],{"class":171},"#生成四行五列的数组\n",[19,95496,95497],{},"③生成三维数组",[93,95499,95501],{"className":30369,"code":95500,"language":30371,"meta":23,"style":23},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[99,95502,95503,95508,95535],{"__ignoreMap":23},[102,95504,95505],{"class":104,"line":105},[102,95506,95507],{"class":171},"#三维数组\n",[102,95509,95510,95513,95515,95517,95519,95521,95523,95525,95527,95529,95531,95533],{"class":104,"line":24},[102,95511,95512],{"class":112},"aaa",[102,95514,158],{"class":108},[102,95516,95418],{"class":112},[102,95518,31487],{"class":5206},[102,95520,158],{"class":108},[102,95522,113],{"class":112},[102,95524,190],{"class":161},[102,95526,491],{"class":112},[102,95528,184],{"class":161},[102,95530,491],{"class":112},[102,95532,406],{"class":161},[102,95534,30488],{"class":112},[102,95536,95537],{"class":104,"line":1168},[102,95538,95539],{"class":112},"aaa.shape\n",[73,95541,95543],{"id":95542},"_222-randint语句","2.2.2 randint语句",[93,95545,95547],{"className":30369,"code":95546,"language":30371,"meta":23,"style":23},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[99,95548,95549,95554],{"__ignoreMap":23},[102,95550,95551],{"class":104,"line":105},[102,95552,95553],{"class":171},"#生成随机的整数 random.randint(low,high,size)\n",[102,95555,95556,95558,95560,95562],{"class":104,"line":24},[102,95557,93105],{"class":112},[102,95559,432],{"class":161},[102,95561,13704],{"class":112},[102,95563,95564],{"class":171},"#0~5中的随机一个数\n",[19,95566,95403],{},[93,95568,95570],{"className":30369,"code":95569,"language":30371,"meta":23,"style":23},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[99,95571,95572,95577,95599],{"__ignoreMap":23},[102,95573,95574],{"class":104,"line":105},[102,95575,95576],{"class":171},"#一维\n",[102,95578,95579,95581,95583,95585,95587,95589,95591,95593,95595,95597],{"class":104,"line":24},[102,95580,93105],{"class":112},[102,95582,330],{"class":161},[102,95584,491],{"class":112},[102,95586,585],{"class":161},[102,95588,491],{"class":112},[102,95590,31487],{"class":5206},[102,95592,158],{"class":108},[102,95594,113],{"class":112},[102,95596,559],{"class":161},[102,95598,30488],{"class":112},[102,95600,95601],{"class":104,"line":1168},[102,95602,95603],{"class":171},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95605,95458],{},[19,95607,95608],{},[1451,95609],{"alt":23,"src":95610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95612,95497],{},[19,95614,95615],{},[1451,95616],{"alt":23,"src":95617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[73,95619,95621],{"id":95620},"_222-rand语句","2.2.2 rand语句",[19,95623,95624],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[93,95626,95628],{"className":30369,"code":95627,"language":30371,"meta":23,"style":23},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[99,95629,95630,95643,95648],{"__ignoreMap":23},[102,95631,95632,95635,95637,95639,95641],{"class":104,"line":105},[102,95633,95634],{"class":112},"np.random.rand(",[102,95636,424],{"class":161},[102,95638,491],{"class":112},[102,95640,559],{"class":161},[102,95642,119],{"class":112},[102,95644,95645],{"class":104,"line":24},[102,95646,95647],{"class":171},"#第一个参数100：行数，表示有100个样本\n",[102,95649,95650],{"class":104,"line":1168},[102,95651,95652],{"class":171},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95654,95656],{"id":95655},"_23-arange创建数组","2.3 arange()创建数组",[73,95658,95660],{"id":95659},"_231-函数语句","2.3.1 函数语句",[93,95662,95664],{"className":30369,"code":95663,"language":30371,"meta":23,"style":23},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[99,95665,95666,95680,95685,95690,95695,95700,95705,95710],{"__ignoreMap":23},[102,95667,95668,95671,95673,95675,95678],{"class":104,"line":105},[102,95669,95670],{"class":112},"numpy.arange([start,] stop[, step], ",[102,95672,93491],{"class":5206},[102,95674,158],{"class":108},[102,95676,95677],{"class":161},"None",[102,95679,119],{"class":112},[102,95681,95682],{"class":104,"line":24},[102,95683,95684],{"class":171},"#参数\n",[102,95686,95687],{"class":104,"line":1168},[102,95688,95689],{"class":217},"\"\"\"\n",[102,95691,95692],{"class":104,"line":1183},[102,95693,95694],{"class":217},"start:起始值，可选，默认从 0 开始。\n",[102,95696,95697],{"class":104,"line":1189},[102,95698,95699],{"class":217},"stop:结束值（不包含该值）。\n",[102,95701,95702],{"class":104,"line":1203},[102,95703,95704],{"class":217},"step:步长，可选，默认是 1。可以为浮点数。\n",[102,95706,95707],{"class":104,"line":1209},[102,95708,95709],{"class":217},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[102,95711,95712],{"class":104,"line":1300},[102,95713,95689],{"class":217},[73,95715,95717],{"id":95716},"_232-实例","2.3.2 实例",[93,95719,95721],{"className":30369,"code":95720,"language":30371,"meta":23,"style":23},"#创建一维数组\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",[99,95722,95723,95727,95751,95756,95761,95765,95788,95792,95796,95801,95806],{"__ignoreMap":23},[102,95724,95725],{"class":104,"line":105},[102,95726,93096],{"class":171},[102,95728,95729,95731,95733,95735,95737,95739,95741,95743,95745,95747,95749],{"class":104,"line":24},[102,95730,92993],{"class":112},[102,95732,330],{"class":161},[102,95734,491],{"class":112},[102,95736,838],{"class":161},[102,95738,491],{"class":112},[102,95740,330],{"class":161},[102,95742,491],{"class":112},[102,95744,93491],{"class":5206},[102,95746,158],{"class":108},[102,95748,116],{"class":161},[102,95750,119],{"class":112},[102,95752,95753],{"class":104,"line":1168},[102,95754,95755],{"class":171},"#输出结果：\n",[102,95757,95758],{"class":104,"line":1183},[102,95759,95760],{"class":171},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[102,95762,95763],{"class":104,"line":1189},[102,95764,93938],{"class":171},[102,95766,95767,95770,95772,95774,95776,95779,95781,95783,95785],{"class":104,"line":1203},[102,95768,95769],{"class":112},"np.array([np.arange(",[102,95771,330],{"class":161},[102,95773,491],{"class":112},[102,95775,406],{"class":161},[102,95777,95778],{"class":112},"),np.arange(",[102,95780,406],{"class":161},[102,95782,491],{"class":112},[102,95784,482],{"class":161},[102,95786,95787],{"class":112},")])\n",[102,95789,95790],{"class":104,"line":1209},[102,95791,93555],{"class":171},[102,95793,95794],{"class":104,"line":1300},[102,95795,95689],{"class":217},[102,95797,95798],{"class":104,"line":1306},[102,95799,95800],{"class":217},"array([[1, 2, 3],\n",[102,95802,95803],{"class":104,"line":1318},[102,95804,95805],{"class":217},"       [4, 5, 6]])\n",[102,95807,95808],{"class":104,"line":1601},[102,95809,95689],{"class":217},[14,95811,95813],{"id":95812},"_24-生态分布","2.4 生态分布",[73,95815,95817],{"id":95816},"_241-标准正态分布","2.4.1 标准正态分布",[19,95819,95820],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,95822,95823],{},[1451,95824],{"alt":23,"src":95825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[73,95827,95829],{"id":95828},"_242-常规正态分布","2.4.2 常规正态分布",[93,95831,95833],{"className":30369,"code":95832,"language":30371,"meta":23,"style":23},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[99,95834,95835,95840,95845,95850],{"__ignoreMap":23},[102,95836,95837],{"class":104,"line":105},[102,95838,95839],{"class":112},"random.normal(loc,scale,size)也可以生成正态分布\n",[102,95841,95842],{"class":104,"line":24},[102,95843,95844],{"class":171},"#loc:期望\n",[102,95846,95847],{"class":104,"line":1168},[102,95848,95849],{"class":171},"#scale:方差\n",[102,95851,95852],{"class":104,"line":1183},[102,95853,95854],{"class":171},"#size:用于确定是几维的数列\n",[19,95856,95857],{},[1451,95858],{"alt":23,"src":95859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,95861,95863],{"id":95862},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,95865,95866],{},"ndim:秩，维度个数",[19,95868,95869],{},"size:数组元素的个数",[19,95871,95872],{},"shape:数组的形状",[19,95874,95875],{},"dtype:数组元素的类型",[19,95877,95878],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,95880,95881],{},"他们都是属性，通过数组.属性的形式来确定",[19,95883,95884],{},"如果需要输出多个可以通过以下方式：",[93,95886,95888],{"className":30369,"code":95887,"language":30371,"meta":23,"style":23},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[99,95889,95890],{"__ignoreMap":23},[102,95891,95892,95894],{"class":104,"line":105},[102,95893,30406],{"class":161},[102,95895,95896],{"class":112},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,95898,95900],{"id":95899},"_26-其他方式创建数组","2.6 其他方式创建数组",[73,95902,95904],{"id":95903},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,95906,95907],{},"①创建一维数组",[93,95909,95911],{"className":30369,"code":95910,"language":30371,"meta":23,"style":23},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[99,95912,95913,95922,95926,95931,95936],{"__ignoreMap":23},[102,95914,95915,95918,95920],{"class":104,"line":105},[102,95916,95917],{"class":112},"np.zeros(",[102,95919,559],{"class":161},[102,95921,119],{"class":112},[102,95923,95924],{"class":104,"line":24},[102,95925,95689],{"class":217},[102,95927,95928],{"class":104,"line":1168},[102,95929,95930],{"class":217},"输出结果：\n",[102,95932,95933],{"class":104,"line":1183},[102,95934,95935],{"class":217},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[102,95937,95938],{"class":104,"line":1189},[102,95939,95689],{"class":217},[19,95941,95942],{},"上方代码等价于：",[93,95944,95946],{"className":30369,"code":95945,"language":30371,"meta":23,"style":23},"np.zeros(shape=(10))#创建10个元素的0数组\n",[99,95947,95948],{"__ignoreMap":23},[102,95949,95950,95952,95955,95957,95959,95961,95963],{"class":104,"line":105},[102,95951,95917],{"class":112},[102,95953,95954],{"class":5206},"shape",[102,95956,158],{"class":108},[102,95958,113],{"class":112},[102,95960,559],{"class":161},[102,95962,82762],{"class":112},[102,95964,95965],{"class":171},"#创建10个元素的0数组\n",[19,95967,95968],{},"也可以指定类型",[93,95970,95972],{"className":30369,"code":95971,"language":30371,"meta":23,"style":23},"#指定类型\nnp.zeros(5,dtype=int)\n",[99,95973,95974,95979],{"__ignoreMap":23},[102,95975,95976],{"class":104,"line":105},[102,95977,95978],{"class":171},"#指定类型\n",[102,95980,95981,95983,95985,95987,95989,95991,95993],{"class":104,"line":24},[102,95982,95917],{"class":112},[102,95984,432],{"class":161},[102,95986,491],{"class":112},[102,95988,93491],{"class":5206},[102,95990,158],{"class":108},[102,95992,116],{"class":161},[102,95994,119],{"class":112},[19,95996,95997],{},"②创建二维数组",[93,95999,96001],{"className":30369,"code":96000,"language":30371,"meta":23,"style":23},"np.zeros((3,4),dtype=int)\n",[99,96002,96003],{"__ignoreMap":23},[102,96004,96005,96008,96010,96012,96014,96016,96018,96020,96022],{"class":104,"line":105},[102,96006,96007],{"class":112},"np.zeros((",[102,96009,184],{"class":161},[102,96011,491],{"class":112},[102,96013,406],{"class":161},[102,96015,42247],{"class":112},[102,96017,93491],{"class":5206},[102,96019,158],{"class":108},[102,96021,116],{"class":161},[102,96023,119],{"class":112},[19,96025,96026],{},"③创建三维数组",[93,96028,96030],{"className":30369,"code":96029,"language":30371,"meta":23,"style":23},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[99,96031,96032,96037],{"__ignoreMap":23},[102,96033,96034],{"class":104,"line":105},[102,96035,96036],{"class":171},"#创建三维数组\n",[102,96038,96039,96041,96043,96045,96047,96049,96051,96053,96055,96057,96059],{"class":104,"line":24},[102,96040,96007],{"class":112},[102,96042,184],{"class":161},[102,96044,491],{"class":112},[102,96046,406],{"class":161},[102,96048,491],{"class":112},[102,96050,432],{"class":161},[102,96052,42247],{"class":112},[102,96054,93491],{"class":5206},[102,96056,158],{"class":108},[102,96058,116],{"class":161},[102,96060,119],{"class":112},[19,96062,96063],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[93,96065,96067],{"className":30369,"code":96066,"language":30371,"meta":23,"style":23},"#使用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",[99,96068,96069,96074,96089,96094,96099,96121],{"__ignoreMap":23},[102,96070,96071],{"class":104,"line":105},[102,96072,96073],{"class":171},"#使用zeros_like将创建的一维数组变成全0的数组\n",[102,96075,96076,96078,96080,96082,96084,96086],{"class":104,"line":24},[102,96077,351],{"class":112},[102,96079,158],{"class":108},[102,96081,92993],{"class":112},[102,96083,406],{"class":161},[102,96085,542],{"class":112},[102,96087,96088],{"class":171},"#这个得到的结果：一维数组0，1，2，3\n",[102,96090,96091],{"class":104,"line":1168},[102,96092,96093],{"class":112},"np.zeros_like(a)\n",[102,96095,96096],{"class":104,"line":1183},[102,96097,96098],{"class":171},"#使用zeros_like将创建的二维数组变成全0的数组\n",[102,96100,96101,96103,96105,96107,96109,96111,96113,96115,96117,96119],{"class":104,"line":1189},[102,96102,93297],{"class":112},[102,96104,158],{"class":108},[102,96106,95418],{"class":112},[102,96108,31487],{"class":5206},[102,96110,158],{"class":108},[102,96112,113],{"class":112},[102,96114,406],{"class":161},[102,96116,491],{"class":112},[102,96118,432],{"class":161},[102,96120,30488],{"class":112},[102,96122,96123],{"class":104,"line":1203},[102,96124,96125],{"class":112},"np.zeros_like(aa)\n",[73,96127,96129],{"id":96128},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96131,96132],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[73,96134,96136],{"id":96135},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96138,96139],{},"①empty()用法",[93,96141,96143],{"className":30369,"code":96142,"language":30371,"meta":23,"style":23},"numpy.empty(shape,dtype=float,order='c')\n",[99,96144,96145],{"__ignoreMap":23},[102,96146,96147,96150,96152,96154,96156,96158,96160,96162,96164],{"class":104,"line":105},[102,96148,96149],{"class":112},"numpy.empty(shape,",[102,96151,93491],{"class":5206},[102,96153,158],{"class":108},[102,96155,152],{"class":161},[102,96157,491],{"class":112},[102,96159,95288],{"class":5206},[102,96161,158],{"class":108},[102,96163,76019],{"class":217},[102,96165,119],{"class":112},[19,96167,96168],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96170,96171],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96173,96174],{},[1451,96175],{"alt":23,"src":96176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96178,96179],{},"②empty()用法",[93,96181,96183],{"className":30369,"code":96182,"language":30371,"meta":23,"style":23},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[99,96184,96185,96206,96218,96239,96244],{"__ignoreMap":23},[102,96186,96187,96189,96191,96194,96196,96198,96200,96202,96204],{"class":104,"line":105},[102,96188,958],{"class":112},[102,96190,158],{"class":108},[102,96192,96193],{"class":112},"np.empty(",[102,96195,559],{"class":161},[102,96197,491],{"class":112},[102,96199,93491],{"class":5206},[102,96201,158],{"class":108},[102,96203,116],{"class":161},[102,96205,119],{"class":112},[102,96207,96208,96210,96212,96214,96216],{"class":104,"line":24},[102,96209,933],{"class":112},[102,96211,158],{"class":108},[102,96213,92993],{"class":112},[102,96215,432],{"class":161},[102,96217,119],{"class":112},[102,96219,96220,96223,96225,96228,96230,96232,96235,96237],{"class":104,"line":1168},[102,96221,96222],{"class":112},"np.add(",[102,96224,190],{"class":161},[102,96226,96227],{"class":112},",x,",[102,96229,93045],{"class":5206},[102,96231,158],{"class":108},[102,96233,96234],{"class":112},"y[:",[102,96236,432],{"class":161},[102,96238,4646],{"class":112},[102,96240,96241],{"class":104,"line":1183},[102,96242,96243],{"class":171},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[102,96245,96246],{"class":104,"line":1189},[102,96247,96248],{"class":112},"y\n",[19,96250,11504],{},[19,96252,96253],{},[1451,96254],{"alt":23,"src":96255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[93,96257,96259],{"className":30369,"code":96258,"language":30371,"meta":23,"style":23},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[99,96260,96261,96277,96297,96312],{"__ignoreMap":23},[102,96262,96263,96265,96267,96269,96271,96273,96275],{"class":104,"line":105},[102,96264,933],{"class":112},[102,96266,158],{"class":108},[102,96268,92993],{"class":112},[102,96270,330],{"class":161},[102,96272,491],{"class":112},[102,96274,457],{"class":161},[102,96276,119],{"class":112},[102,96278,96279,96281,96283,96285,96287,96289,96291,96293,96295],{"class":104,"line":24},[102,96280,958],{"class":112},[102,96282,158],{"class":108},[102,96284,96193],{"class":112},[102,96286,432],{"class":161},[102,96288,491],{"class":112},[102,96290,93491],{"class":5206},[102,96292,158],{"class":108},[102,96294,116],{"class":161},[102,96296,119],{"class":112},[102,96298,96299,96302,96304,96306,96308,96310],{"class":104,"line":1168},[102,96300,96301],{"class":112},"np.add(x,",[102,96303,190],{"class":161},[102,96305,491],{"class":112},[102,96307,93045],{"class":5206},[102,96309,158],{"class":108},[102,96311,93440],{"class":112},[102,96313,96314],{"class":104,"line":1183},[102,96315,96316],{"class":171},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96318,96319],{},"③empty_like()",[19,96321,96322],{},[262,96323,96324,96325,96330],{},"创建一个",[262,96326,96327],{},[262,96328,96329],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96332,96333,96336],{},[99,96334,96335],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96338,96339],{},[1451,96340],{"alt":23,"src":96341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[73,96343,96345],{"id":96344},"_264-用法","2.6.4 ？？用法",[19,96347,96348],{},"当想查看一个函数的参数时，可以通过？？来实现",[93,96350,96352],{"className":30369,"code":96351,"language":30371,"meta":23,"style":23},"np.full??\n",[99,96353,96354],{"__ignoreMap":23},[102,96355,96356,96359],{"class":104,"line":105},[102,96357,96358],{"class":112},"np.full",[102,96360,96361],{"class":77394},"??\n",[73,96363,96365],{"id":96364},"_265-full创建数组","2.6.5 full()创建数组",[93,96367,96369],{"className":30369,"code":96368,"language":30371,"meta":23,"style":23},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[99,96370,96371,96376],{"__ignoreMap":23},[102,96372,96373],{"class":104,"line":105},[102,96374,96375],{"class":112},"full(shape,fill_value)\n",[102,96377,96378],{"class":104,"line":24},[102,96379,96380],{"class":112},"创建全为某个指定值的数组\n",[19,96382,94521],{},[93,96384,96386],{"className":30369,"code":96385,"language":30371,"meta":23,"style":23},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[99,96387,96388,96393],{"__ignoreMap":23},[102,96389,96390],{"class":104,"line":105},[102,96391,96392],{"class":171},"#创建一个一维数组,以20进行填充\n",[102,96394,96395,96398,96400,96402,96404],{"class":104,"line":24},[102,96396,96397],{"class":112},"np.full(",[102,96399,559],{"class":161},[102,96401,491],{"class":112},[102,96403,813],{"class":161},[102,96405,119],{"class":112},[19,96407,93282],{},[93,96409,96411],{"className":30369,"code":96410,"language":30371,"meta":23,"style":23},"#创建二维数组\nnp.full((3,5),11)\n",[99,96412,96413,96417],{"__ignoreMap":23},[102,96414,96415],{"class":104,"line":105},[102,96416,93938],{"class":171},[102,96418,96419,96422,96424,96426,96428,96430,96432],{"class":104,"line":24},[102,96420,96421],{"class":112},"np.full((",[102,96423,184],{"class":161},[102,96425,491],{"class":112},[102,96427,432],{"class":161},[102,96429,42247],{"class":112},[102,96431,585],{"class":161},[102,96433,119],{"class":112},[19,96435,96436],{},"③full_like用法",[19,96438,96439],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96441,96442],{},"这里是指定填充而已",[93,96444,96446],{"className":30369,"code":96445,"language":30371,"meta":23,"style":23},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[99,96447,96448,96453,96477,96482],{"__ignoreMap":23},[102,96449,96450],{"class":104,"line":105},[102,96451,96452],{"class":171},"#创建一个指定形状数组\n",[102,96454,96455,96457,96459,96461,96463,96465,96467,96469,96471,96473,96475],{"class":104,"line":24},[102,96456,351],{"class":112},[102,96458,158],{"class":108},[102,96460,92993],{"class":112},[102,96462,330],{"class":161},[102,96464,491],{"class":112},[102,96466,438],{"class":161},[102,96468,92998],{"class":112},[102,96470,406],{"class":161},[102,96472,491],{"class":112},[102,96474,533],{"class":161},[102,96476,119],{"class":112},[102,96478,96479],{"class":104,"line":1168},[102,96480,96481],{"class":171},"#进行指定填充\n",[102,96483,96484,96487,96489],{"class":104,"line":1183},[102,96485,96486],{"class":112},"np.full_like(a,",[102,96488,559],{"class":161},[102,96490,119],{"class":112},[19,96492,11504],{},[19,96494,96495],{},[1451,96496],{"alt":23,"src":96497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[73,96499,96501],{"id":96500},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21988,96503,96505],{"id":96504},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[93,96507,96509],{"className":30369,"code":96508,"language":30371,"meta":23,"style":23},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[99,96510,96511,96528],{"__ignoreMap":23},[102,96512,96513,96516,96518,96520,96522,96524,96526],{"class":104,"line":105},[102,96514,96515],{"class":112},"np.eye(",[102,96517,406],{"class":161},[102,96519,491],{"class":112},[102,96521,93491],{"class":5206},[102,96523,158],{"class":108},[102,96525,116],{"class":161},[102,96527,119],{"class":112},[102,96529,96530],{"class":104,"line":24},[102,96531,96532],{"class":171},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21988,96534,96536],{"id":96535},"_2662-法2identity","2.6.6.2 法2：identity()",[93,96538,96540],{"className":30369,"code":96539,"language":30371,"meta":23,"style":23},"#identity()\nnp.identity(5,dtype=int)\n",[99,96541,96542,96547],{"__ignoreMap":23},[102,96543,96544],{"class":104,"line":105},[102,96545,96546],{"class":171},"#identity()\n",[102,96548,96549,96552,96554,96556,96558,96560,96562],{"class":104,"line":24},[102,96550,96551],{"class":112},"np.identity(",[102,96553,432],{"class":161},[102,96555,491],{"class":112},[102,96557,93491],{"class":5206},[102,96559,158],{"class":108},[102,96561,116],{"class":161},[102,96563,119],{"class":112},[19,96565,96566],{},"两个函数是有区别的",[19,96568,96569],{},[1451,96570],{"alt":23,"src":96571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96573,96574],{},[1451,96575],{"alt":23,"src":96576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[93,96578,96580],{"className":30369,"code":96579,"language":30371,"meta":23,"style":23},"# 创建一个 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",[99,96581,96582,96587,96599,96604,96609,96614,96619,96623,96628,96648,96652,96657,96662],{"__ignoreMap":23},[102,96583,96584],{"class":104,"line":105},[102,96585,96586],{"class":171},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[102,96588,96589,96591,96593,96595,96597],{"class":104,"line":24},[102,96590,96515],{"class":112},[102,96592,184],{"class":161},[102,96594,12425],{"class":112},[102,96596,406],{"class":161},[102,96598,119],{"class":112},[102,96600,96601],{"class":104,"line":1168},[102,96602,96603],{"class":171},"# 输出:\n",[102,96605,96606],{"class":104,"line":1183},[102,96607,96608],{"class":171},"# [[1. 0. 0. 0.]\n",[102,96610,96611],{"class":104,"line":1189},[102,96612,96613],{"class":171},"#  [0. 1. 0. 0.]\n",[102,96615,96616],{"class":104,"line":1203},[102,96617,96618],{"class":171},"#  [0. 0. 1. 0.]]\n",[102,96620,96621],{"class":104,"line":1209},[102,96622,2389],{"emptyLinePlaceholder":30},[102,96624,96625],{"class":104,"line":1300},[102,96626,96627],{"class":171},"# 对角线向上偏移1\n",[102,96629,96630,96632,96634,96636,96638,96640,96642,96644,96646],{"class":104,"line":1306},[102,96631,96515],{"class":112},[102,96633,184],{"class":161},[102,96635,12425],{"class":112},[102,96637,406],{"class":161},[102,96639,12425],{"class":112},[102,96641,606],{"class":5206},[102,96643,158],{"class":108},[102,96645,330],{"class":161},[102,96647,119],{"class":112},[102,96649,96650],{"class":104,"line":1318},[102,96651,96603],{"class":171},[102,96653,96654],{"class":104,"line":1601},[102,96655,96656],{"class":171},"# [[0. 1. 0. 0.]\n",[102,96658,96659],{"class":104,"line":1606},[102,96660,96661],{"class":171},"#  [0. 0. 1. 0.]\n",[102,96663,96664],{"class":104,"line":1612},[102,96665,96666],{"class":171},"#  [0. 0. 0. 1.]]\n",[73,96668,96670],{"id":96669},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[93,96672,96674],{"className":30369,"code":96673,"language":30371,"meta":23,"style":23},"#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",[99,96675,96676,96681,96685,96690,96695,96700,96705,96710,96715,96720,96725],{"__ignoreMap":23},[102,96677,96678],{"class":104,"line":105},[102,96679,96680],{"class":171},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[102,96682,96683],{"class":104,"line":24},[102,96684,95689],{"class":217},[102,96686,96687],{"class":104,"line":1168},[102,96688,96689],{"class":217},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[102,96691,96692],{"class":104,"line":1183},[102,96693,96694],{"class":217},"参数介绍：\n",[102,96696,96697],{"class":104,"line":1189},[102,96698,96699],{"class":217},"start：序列的起始值\n",[102,96701,96702],{"class":104,"line":1203},[102,96703,96704],{"class":217},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[102,96706,96707],{"class":104,"line":1209},[102,96708,96709],{"class":217},"num：要生长的等步长的样本数量，默认为50\n",[102,96711,96712],{"class":104,"line":1300},[102,96713,96714],{"class":217},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[102,96716,96717],{"class":104,"line":1306},[102,96718,96719],{"class":217},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[102,96721,96722],{"class":104,"line":1318},[102,96723,96724],{"class":217},"dtype：ndarry的数据类型\n",[102,96726,96727],{"class":104,"line":1601},[102,96728,95689],{"class":217},[19,96730,96731],{},[1451,96732],{"alt":23,"src":96733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,96735,96736],{},"这里num=是可以省略的",[19,96738,96739],{},"也就是下方两行代码结果是一模一样的",[93,96741,96743],{"className":30369,"code":96742,"language":30371,"meta":23,"style":23},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[99,96744,96745,96762],{"__ignoreMap":23},[102,96746,96747,96750,96752,96754,96756,96758,96760],{"class":104,"line":105},[102,96748,96749],{"class":112},"np.linspace(",[102,96751,330],{"class":161},[102,96753,491],{"class":112},[102,96755,432],{"class":161},[102,96757,491],{"class":112},[102,96759,432],{"class":161},[102,96761,119],{"class":112},[102,96763,96764,96766,96768,96770,96772,96774,96776,96778,96780],{"class":104,"line":24},[102,96765,96749],{"class":112},[102,96767,330],{"class":161},[102,96769,491],{"class":112},[102,96771,432],{"class":161},[102,96773,491],{"class":112},[102,96775,1654],{"class":5206},[102,96777,158],{"class":108},[102,96779,432],{"class":161},[102,96781,119],{"class":112},[73,96783,96785],{"id":96784},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[93,96787,96789],{"className":30369,"code":96788,"language":30371,"meta":23,"style":23},"#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",[99,96790,96791,96796,96800,96805,96810,96815,96820,96824,96829,96834,96838],{"__ignoreMap":23},[102,96792,96793],{"class":104,"line":105},[102,96794,96795],{"class":171},"#logspace函数用于创建一个等比数列，格式如下：\n",[102,96797,96798],{"class":104,"line":24},[102,96799,95689],{"class":217},[102,96801,96802],{"class":104,"line":1168},[102,96803,96804],{"class":217},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[102,96806,96807],{"class":104,"line":1183},[102,96808,96809],{"class":217},"参数为：\n",[102,96811,96812],{"class":104,"line":1189},[102,96813,96814],{"class":217},"start:序列的起始位置为：base**start\n",[102,96816,96817],{"class":104,"line":1203},[102,96818,96819],{"class":217},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[102,96821,96822],{"class":104,"line":1209},[102,96823,96709],{"class":217},[102,96825,96826],{"class":104,"line":1300},[102,96827,96828],{"class":217},"endpoint：是否包含 stop 这个值，默认是 True\n",[102,96830,96831],{"class":104,"line":1306},[102,96832,96833],{"class":217},"base：对数的底数，默认是 10（常见对数）\n",[102,96835,96836],{"class":104,"line":1318},[102,96837,96724],{"class":217},[102,96839,96840],{"class":104,"line":1601},[102,96841,95689],{"class":217},[19,96843,96844],{},[1451,96845],{"alt":23,"src":96846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,96848,96849],{},"logspace()函数中的num参数也是可以不写num=的",[19,96851,96852],{},"endpoint是不可以省略的",[5116,96854,96855],{},"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":23,"searchDepth":24,"depth":24,"links":96857},[96858,96862,96867,96871,96875,96876],{"id":95247,"depth":24,"text":95248,"children":96859},[96860,96861],{"id":95251,"depth":1168,"text":95252},{"id":95324,"depth":1168,"text":95325},{"id":95356,"depth":24,"text":95357,"children":96863},[96864,96865,96866],{"id":95360,"depth":1168,"text":95361},{"id":95542,"depth":1168,"text":95543},{"id":95620,"depth":1168,"text":95621},{"id":95655,"depth":24,"text":95656,"children":96868},[96869,96870],{"id":95659,"depth":1168,"text":95660},{"id":95716,"depth":1168,"text":95717},{"id":95812,"depth":24,"text":95813,"children":96872},[96873,96874],{"id":95816,"depth":1168,"text":95817},{"id":95828,"depth":1168,"text":95829},{"id":95862,"depth":24,"text":95863},{"id":95899,"depth":24,"text":95900,"children":96877},[96878,96879,96880,96881,96882,96883,96884,96885],{"id":95903,"depth":1168,"text":95904},{"id":96128,"depth":1168,"text":96129},{"id":96135,"depth":1168,"text":96136},{"id":96344,"depth":1168,"text":96345},{"id":96364,"depth":1168,"text":96365},{"id":96500,"depth":1168,"text":96501},{"id":96669,"depth":1168,"text":96670},{"id":96784,"depth":1168,"text":96785},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95239,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96892,"title":96893,"body":96894,"description":27,"extension":28,"meta":96987,"navigation":30,"path":96988,"seo":96989,"stem":96990,"__hash__":96991},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96895,"toc":96985},[96896,96899,96902,96905,96908,96911,96914,96917,96920,96923,96926,96929,96931,96934,96937,96942,96945,96948,96982],[10,96897,96893],{"id":96898},"_20魔法命令mprun",[19,96900,96901],{},"逐行分析数据内存的使用情况",[19,96903,96904],{},"语法格式：",[19,96906,96907],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,96909,96910],{},"分析结果列如下：",[19,96912,96913],{},"Line行号",[19,96915,96916],{},"Mem usage内存使用大小",[19,96918,96919],{},"increment内存增量",[19,96921,96922],{},"Line content代码内容",[19,96924,96925],{},"补充说明：",[19,96927,96928],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,96930,95194],{},[19,96932,96933],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,96935,96936],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,96938,96939],{},[1451,96940],{"alt":23,"src":96941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,96943,96944],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,96946,96947],{},"这时候需要重新加载模块",[93,96949,96951],{"className":30369,"code":96950,"language":30371,"meta":23,"style":23},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[99,96952,96953,96958,96965,96970],{"__ignoreMap":23},[102,96954,96955],{"class":104,"line":105},[102,96956,96957],{"class":171},"#重新加载模块\n",[102,96959,96960,96962],{"class":104,"line":24},[102,96961,30383],{"class":108},[102,96963,96964],{"class":112}," importlib\n",[102,96966,96967],{"class":104,"line":1168},[102,96968,96969],{"class":112},"importlib.reload(mprun_test)\n",[102,96971,96972,96974,96977,96979],{"class":104,"line":1183},[102,96973,441],{"class":108},[102,96975,96976],{"class":112},"mprun ",[102,96978,645],{"class":108},[102,96980,96981],{"class":112},"f mprun_test.fun_test mprun_test.fun_test()\n",[5116,96983,96984],{},"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":23,"searchDepth":24,"depth":24,"links":96986},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96893,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96993,"title":96994,"body":96995,"description":27,"extension":28,"meta":97012,"navigation":30,"path":97013,"seo":97014,"stem":97015,"__hash__":97016},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96996,"toc":97010},[96997,97000,97005],[10,96998,96994],{"id":96999},"_3一维数组的索引和切片",[19,97001,97002],{},[1451,97003],{"alt":23,"src":97004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97006,97007],{},[1451,97008],{"alt":23,"src":97009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":23,"searchDepth":24,"depth":24,"links":97011},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96994,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97018,"title":97019,"body":97020,"description":27,"extension":28,"meta":97503,"navigation":30,"path":97504,"seo":97505,"stem":97506,"__hash__":97507},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97021,"toc":97501},[97022,97025,97028,97033,97066,97069,97107,97110,97144,97147,97252,97255,97292,97295,97396,97399,97450,97453,97495,97498],[10,97023,97019],{"id":97024},"_4二维数组的索引与切片",[19,97026,97027],{},"①获取指定单个元素",[19,97029,97030],{},[1451,97031],{"alt":23,"src":97032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[93,97034,97036],{"className":30369,"code":97035,"language":30371,"meta":23,"style":23},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[99,97037,97038,97043,97048,97053],{"__ignoreMap":23},[102,97039,97040],{"class":104,"line":105},[102,97041,97042],{"class":171},"#获取元素9\n",[102,97044,97045],{"class":104,"line":24},[102,97046,97047],{"class":171},"#先获取所在行，再获取所在列\n",[102,97049,97050],{"class":104,"line":1168},[102,97051,97052],{"class":171},"#数组[行索引号，列索引号]\n",[102,97054,97055,97058,97060,97062,97064],{"class":104,"line":1183},[102,97056,97057],{"class":112},"a[",[102,97059,330],{"class":161},[102,97061,491],{"class":112},[102,97063,190],{"class":161},[102,97065,33237],{"class":112},[19,97067,97068],{},"②获取整行元素",[93,97070,97072],{"className":30369,"code":97071,"language":30371,"meta":23,"style":23},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[99,97073,97074,97079,97084,97092,97097],{"__ignoreMap":23},[102,97075,97076],{"class":104,"line":105},[102,97077,97078],{"class":171},"#获取整行 数组[行索引号]\n",[102,97080,97081],{"class":104,"line":24},[102,97082,97083],{"class":171},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[102,97085,97086,97088,97090],{"class":104,"line":1168},[102,97087,97057],{"class":112},[102,97089,190],{"class":161},[102,97091,33237],{"class":112},[102,97093,97094],{"class":104,"line":1183},[102,97095,97096],{"class":171},"#也可以负索引获取一行\n",[102,97098,97099,97101,97103,97105],{"class":104,"line":1189},[102,97100,97057],{"class":112},[102,97102,645],{"class":108},[102,97104,330],{"class":161},[102,97106,33237],{"class":112},[19,97108,97109],{},"③获取整列元素",[93,97111,97113],{"className":30369,"code":97112,"language":30371,"meta":23,"style":23},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[99,97114,97115,97120,97129,97134],{"__ignoreMap":23},[102,97116,97117],{"class":104,"line":105},[102,97118,97119],{"class":171},"#获取整列 数组名[:,列索引]\n",[102,97121,97122,97125,97127],{"class":104,"line":24},[102,97123,97124],{"class":112},"a[:,",[102,97126,190],{"class":161},[102,97128,33237],{"class":112},[102,97130,97131],{"class":104,"line":1168},[102,97132,97133],{"class":171},"#也可以负索引获取一列\n",[102,97135,97136,97138,97140,97142],{"class":104,"line":1183},[102,97137,97124],{"class":112},[102,97139,645],{"class":108},[102,97141,330],{"class":161},[102,97143,33237],{"class":112},[19,97145,97146],{},"④部分行部分列的元素",[93,97148,97150],{"className":30369,"code":97149,"language":30371,"meta":23,"style":23},"#部分行部分列 数组名[行切片，列切片]\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",[99,97151,97152,97157,97167,97171,97175,97180,97185,97189,97201,97205,97209,97214,97219,97224,97229,97233,97238],{"__ignoreMap":23},[102,97153,97154],{"class":104,"line":105},[102,97155,97156],{"class":171},"#部分行部分列 数组名[行切片，列切片]\n",[102,97158,97159,97162,97164],{"class":104,"line":24},[102,97160,97161],{"class":112},"a[:",[102,97163,190],{"class":161},[102,97165,97166],{"class":112},",:]\n",[102,97168,97169],{"class":104,"line":1168},[102,97170,93555],{"class":171},[102,97172,97173],{"class":104,"line":1183},[102,97174,93919],{"class":217},[102,97176,97177],{"class":104,"line":1189},[102,97178,97179],{"class":217},"array([[ 1,  2,  3,  4,  5,  6],\n",[102,97181,97182],{"class":104,"line":1203},[102,97183,97184],{"class":217},"       [ 7,  8,  9, 10, 11, 12]])\n",[102,97186,97187],{"class":104,"line":1209},[102,97188,93919],{"class":217},[102,97190,97191,97193,97195,97197,97199],{"class":104,"line":1300},[102,97192,97124],{"class":112},[102,97194,330],{"class":161},[102,97196,972],{"class":112},[102,97198,406],{"class":161},[102,97200,33237],{"class":112},[102,97202,97203],{"class":104,"line":1306},[102,97204,93555],{"class":171},[102,97206,97207],{"class":104,"line":1318},[102,97208,93919],{"class":217},[102,97210,97211],{"class":104,"line":1601},[102,97212,97213],{"class":217},"array([[ 2,  3,  4],\n",[102,97215,97216],{"class":104,"line":1606},[102,97217,97218],{"class":217},"       [ 8,  9, 10],\n",[102,97220,97221],{"class":104,"line":1612},[102,97222,97223],{"class":217},"       [14, 15, 16],\n",[102,97225,97226],{"class":104,"line":1617},[102,97227,97228],{"class":217},"       [20, 21, 22]])\n",[102,97230,97231],{"class":104,"line":1631},[102,97232,93919],{"class":217},[102,97234,97235],{"class":104,"line":1636},[102,97236,97237],{"class":171},"#对列行同时进行切片，使用了step参数\n",[102,97239,97240,97243,97245,97248,97250],{"class":104,"line":1642},[102,97241,97242],{"class":112},"a[::",[102,97244,190],{"class":161},[102,97246,97247],{"class":112},",::",[102,97249,190],{"class":161},[102,97251,33237],{"class":112},[19,97253,97254],{},"⑤同时获取两个元素",[93,97256,97258],{"className":30369,"code":97257,"language":30371,"meta":23,"style":23},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[99,97259,97260,97265,97270],{"__ignoreMap":23},[102,97261,97262],{"class":104,"line":105},[102,97263,97264],{"class":171},"#同时获取第三行第二列，第四行第一列\n",[102,97266,97267],{"class":104,"line":24},[102,97268,97269],{"class":171},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[102,97271,97272,97275,97277,97279,97281,97283,97285,97287,97289],{"class":104,"line":1168},[102,97273,97274],{"class":112},"a[(",[102,97276,190],{"class":161},[102,97278,491],{"class":112},[102,97280,184],{"class":161},[102,97282,42238],{"class":112},[102,97284,330],{"class":161},[102,97286,491],{"class":112},[102,97288,304],{"class":161},[102,97290,97291],{"class":112},")]\n",[19,97293,97294],{},"⑥切片，对行进行反向获取",[93,97296,97298],{"className":30369,"code":97297,"language":30371,"meta":23,"style":23},"#切片 对所有行进行反向获取\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",[99,97299,97300,97305,97315,97319,97323,97328,97333,97338,97343,97347,97352,97368,97372,97377,97382,97387,97392],{"__ignoreMap":23},[102,97301,97302],{"class":104,"line":105},[102,97303,97304],{"class":171},"#切片 对所有行进行反向获取\n",[102,97306,97307,97309,97311,97313],{"class":104,"line":24},[102,97308,97242],{"class":112},[102,97310,645],{"class":108},[102,97312,330],{"class":161},[102,97314,33237],{"class":112},[102,97316,97317],{"class":104,"line":1168},[102,97318,93555],{"class":171},[102,97320,97321],{"class":104,"line":1183},[102,97322,93919],{"class":217},[102,97324,97325],{"class":104,"line":1189},[102,97326,97327],{"class":217},"array([[19, 20, 21, 22, 23, 24],\n",[102,97329,97330],{"class":104,"line":1203},[102,97331,97332],{"class":217},"       [13, 14, 15, 16, 17, 18],\n",[102,97334,97335],{"class":104,"line":1209},[102,97336,97337],{"class":217},"       [ 7,  8,  9, 10, 11, 12],\n",[102,97339,97340],{"class":104,"line":1300},[102,97341,97342],{"class":217},"       [ 1,  2,  3,  4,  5,  6]])\n",[102,97344,97345],{"class":104,"line":1306},[102,97346,93919],{"class":217},[102,97348,97349],{"class":104,"line":1318},[102,97350,97351],{"class":171},"#对行列都进行反向切片获取\n",[102,97353,97354,97356,97358,97360,97362,97364,97366],{"class":104,"line":1601},[102,97355,97242],{"class":112},[102,97357,645],{"class":108},[102,97359,330],{"class":161},[102,97361,97247],{"class":112},[102,97363,645],{"class":108},[102,97365,330],{"class":161},[102,97367,33237],{"class":112},[102,97369,97370],{"class":104,"line":1606},[102,97371,93919],{"class":217},[102,97373,97374],{"class":104,"line":1612},[102,97375,97376],{"class":217},"array([[24, 23, 22, 21, 20, 19],\n",[102,97378,97379],{"class":104,"line":1617},[102,97380,97381],{"class":217},"       [18, 17, 16, 15, 14, 13],\n",[102,97383,97384],{"class":104,"line":1631},[102,97385,97386],{"class":217},"       [12, 11, 10,  9,  8,  7],\n",[102,97388,97389],{"class":104,"line":1636},[102,97390,97391],{"class":217},"       [ 6,  5,  4,  3,  2,  1]])\n",[102,97393,97394],{"class":104,"line":1642},[102,97395,93919],{"class":217},[19,97397,97398],{},"⑦修改元素",[93,97400,97402],{"className":30369,"code":97401,"language":30371,"meta":23,"style":23},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[99,97403,97404,97409,97427,97432],{"__ignoreMap":23},[102,97405,97406],{"class":104,"line":105},[102,97407,97408],{"class":171},"#获取前两行和前两列\n",[102,97410,97411,97414,97416,97418,97420,97423,97425],{"class":104,"line":24},[102,97412,97413],{"class":112},"sub_a",[102,97415,158],{"class":108},[102,97417,97161],{"class":112},[102,97419,190],{"class":161},[102,97421,97422],{"class":112},",:",[102,97424,190],{"class":161},[102,97426,33237],{"class":112},[102,97428,97429],{"class":104,"line":1168},[102,97430,97431],{"class":171},"#修改sub_a第一个元素的值\n",[102,97433,97434,97437,97439,97441,97443,97445,97447],{"class":104,"line":1183},[102,97435,97436],{"class":112},"sub_a[",[102,97438,304],{"class":161},[102,97440,491],{"class":112},[102,97442,304],{"class":161},[102,97444,1053],{"class":112},[102,97446,158],{"class":108},[102,97448,97449],{"class":161},"100\n",[19,97451,97452],{},"⑧数组复制copy()",[93,97454,97456],{"className":30369,"code":97455,"language":30371,"meta":23,"style":23},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[99,97457,97458,97463,97473,97478],{"__ignoreMap":23},[102,97459,97460],{"class":104,"line":105},[102,97461,97462],{"class":171},"#数组复制\n",[102,97464,97465,97468,97470],{"class":104,"line":24},[102,97466,97467],{"class":112},"copy_a",[102,97469,158],{"class":108},[102,97471,97472],{"class":112},"np.copy(sub_a)\n",[102,97474,97475],{"class":104,"line":1168},[102,97476,97477],{"class":171},"#修改copy_a后不影响原数组\n",[102,97479,97480,97483,97485,97487,97489,97491,97493],{"class":104,"line":1183},[102,97481,97482],{"class":112},"copy_a[",[102,97484,304],{"class":161},[102,97486,491],{"class":112},[102,97488,304],{"class":161},[102,97490,1053],{"class":112},[102,97492,158],{"class":108},[102,97494,97449],{"class":161},[19,97496,97497],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5116,97499,97500],{},"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":23,"searchDepth":24,"depth":24,"links":97502},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97019,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97509,"title":97510,"body":97511,"description":27,"extension":28,"meta":98003,"navigation":30,"path":98004,"seo":98005,"stem":98006,"__hash__":98007},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97512,"toc":97995},[97513,97516,97520,97523,97526,97579,97582,97607,97610,97629,97649,97652,97668,97672,97718,97722,97764,97768,97771,97774,97777,97780,97783,97845,97905,97909,97912,97969,97973,97978,97987,97992],[10,97514,97510],{"id":97515},"_5改变数组的维度",[14,97517,97519],{"id":97518},"_51-使用reshape","5.1 使用reshape()",[19,97521,97522],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97524,97525],{},"①一维数组转换为二维数组",[93,97527,97529],{"className":30369,"code":97528,"language":30371,"meta":23,"style":23},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[99,97530,97531,97547,97552,97557,97562],{"__ignoreMap":23},[102,97532,97533,97535,97537,97539,97541,97543,97545],{"class":104,"line":105},[102,97534,351],{"class":112},[102,97536,158],{"class":108},[102,97538,92993],{"class":112},[102,97540,330],{"class":161},[102,97542,491],{"class":112},[102,97544,636],{"class":161},[102,97546,119],{"class":112},[102,97548,97549],{"class":104,"line":24},[102,97550,97551],{"class":171},"#将一维数组进行转换\n",[102,97553,97554],{"class":104,"line":1168},[102,97555,97556],{"class":171},"#注意点：元素个数不可以变\n",[102,97558,97559],{"class":104,"line":1183},[102,97560,97561],{"class":171},"#转换维度要保持一致，不一致就异常！！！\n",[102,97563,97564,97566,97568,97571,97573,97575,97577],{"class":104,"line":1189},[102,97565,93297],{"class":112},[102,97567,158],{"class":108},[102,97569,97570],{"class":112},"a.reshape(",[102,97572,190],{"class":161},[102,97574,491],{"class":112},[102,97576,457],{"class":161},[102,97578,119],{"class":112},[19,97580,97581],{},"②一维数组转换为三维数组",[93,97583,97585],{"className":30369,"code":97584,"language":30371,"meta":23,"style":23},"aaa=a.reshape(2,3,2)\n",[99,97586,97587],{"__ignoreMap":23},[102,97588,97589,97591,97593,97595,97597,97599,97601,97603,97605],{"class":104,"line":105},[102,97590,95512],{"class":112},[102,97592,158],{"class":108},[102,97594,97570],{"class":112},[102,97596,190],{"class":161},[102,97598,491],{"class":112},[102,97600,184],{"class":161},[102,97602,491],{"class":112},[102,97604,190],{"class":161},[102,97606,119],{"class":112},[19,97608,97609],{},"③二维数组转化为一维数组",[93,97611,97613],{"className":30369,"code":97612,"language":30371,"meta":23,"style":23},"#知道元素个数：\naa.reshape(12)\n",[99,97614,97615,97620],{"__ignoreMap":23},[102,97616,97617],{"class":104,"line":105},[102,97618,97619],{"class":171},"#知道元素个数：\n",[102,97621,97622,97625,97627],{"class":104,"line":24},[102,97623,97624],{"class":112},"aa.reshape(",[102,97626,611],{"class":161},[102,97628,119],{"class":112},[93,97630,97632],{"className":30369,"code":97631,"language":30371,"meta":23,"style":23},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[99,97633,97634,97639],{"__ignoreMap":23},[102,97635,97636],{"class":104,"line":105},[102,97637,97638],{"class":171},"#不知道元素个数，参数传递-1\n",[102,97640,97641,97643,97645,97647],{"class":104,"line":24},[102,97642,97624],{"class":112},[102,97644,645],{"class":108},[102,97646,330],{"class":161},[102,97648,119],{"class":112},[19,97650,97651],{},"④三维数组转换为一维数组",[93,97653,97655],{"className":30369,"code":97654,"language":30371,"meta":23,"style":23},"aaa.reshape(-1)\n",[99,97656,97657],{"__ignoreMap":23},[102,97658,97659,97662,97664,97666],{"class":104,"line":105},[102,97660,97661],{"class":112},"aaa.reshape(",[102,97663,645],{"class":108},[102,97665,330],{"class":161},[102,97667,119],{"class":112},[14,97669,97671],{"id":97670},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[93,97673,97675],{"className":30369,"code":97674,"language":30371,"meta":23,"style":23},"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",[99,97676,97677,97704,97709,97713],{"__ignoreMap":23},[102,97678,97679,97681,97683,97685,97687,97689,97691,97693,97695,97697,97699,97701],{"class":104,"line":105},[102,97680,93297],{"class":112},[102,97682,158],{"class":108},[102,97684,92993],{"class":112},[102,97686,330],{"class":161},[102,97688,491],{"class":112},[102,97690,636],{"class":161},[102,97692,92998],{"class":112},[102,97694,190],{"class":161},[102,97696,491],{"class":112},[102,97698,457],{"class":161},[102,97700,542],{"class":112},[102,97702,97703],{"class":171},"#转换为2行6列的数组\n",[102,97705,97706],{"class":104,"line":24},[102,97707,97708],{"class":112},"aa.revel()\n",[102,97710,97711],{"class":104,"line":1168},[102,97712,93555],{"class":171},[102,97714,97715],{"class":104,"line":1183},[102,97716,97717],{"class":171},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97719,97721],{"id":97720},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[93,97723,97725],{"className":30369,"code":97724,"language":30371,"meta":23,"style":23},"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",[99,97726,97727,97751,97756,97760],{"__ignoreMap":23},[102,97728,97729,97731,97733,97735,97737,97739,97741,97743,97745,97747,97749],{"class":104,"line":105},[102,97730,93297],{"class":112},[102,97732,158],{"class":108},[102,97734,92993],{"class":112},[102,97736,330],{"class":161},[102,97738,491],{"class":112},[102,97740,636],{"class":161},[102,97742,92998],{"class":112},[102,97744,190],{"class":161},[102,97746,491],{"class":112},[102,97748,457],{"class":161},[102,97750,119],{"class":112},[102,97752,97753],{"class":104,"line":24},[102,97754,97755],{"class":112},"aa.flatten()\n",[102,97757,97758],{"class":104,"line":1168},[102,97759,93555],{"class":171},[102,97761,97762],{"class":104,"line":1183},[102,97763,97717],{"class":171},[14,97765,97767],{"id":97766},"_54-使用resize","5.4 使用resize()",[19,97769,97770],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,97772,97773],{},"通过resize方法可以改变数组的维度",[19,97775,97776],{},"#resize修改数组维度",[19,97778,97779],{},"#以元组的形式指定形状",[19,97781,97782],{},"#改变的是原数组",[93,97784,97786],{"className":30369,"code":97785,"language":30371,"meta":23,"style":23},"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",[99,97787,97788,97804,97824,97837,97841],{"__ignoreMap":23},[102,97789,97790,97792,97794,97796,97798,97800,97802],{"class":104,"line":105},[102,97791,351],{"class":112},[102,97793,158],{"class":108},[102,97795,92993],{"class":112},[102,97797,330],{"class":161},[102,97799,491],{"class":112},[102,97801,636],{"class":161},[102,97803,119],{"class":112},[102,97805,97806,97809,97811,97813,97815,97817,97819,97821],{"class":104,"line":24},[102,97807,97808],{"class":112},"a.shape",[102,97810,158],{"class":108},[102,97812,113],{"class":112},[102,97814,190],{"class":161},[102,97816,491],{"class":112},[102,97818,457],{"class":161},[102,97820,542],{"class":112},[102,97822,97823],{"class":171},"#改变了原数组\n",[102,97825,97826,97828,97830,97833,97835],{"class":104,"line":1168},[102,97827,351],{"class":112},[102,97829,158],{"class":108},[102,97831,97832],{"class":112},"resize((",[102,97834,611],{"class":161},[102,97836,30488],{"class":112},[102,97838,97839],{"class":104,"line":1183},[102,97840,93555],{"class":171},[102,97842,97843],{"class":104,"line":1189},[102,97844,97717],{"class":171},[93,97846,97848],{"className":30369,"code":97847,"language":30371,"meta":23,"style":23},"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",[99,97849,97850,97863,97867,97871,97876,97881,97886,97891,97896,97901],{"__ignoreMap":23},[102,97851,97852,97855,97857,97859,97861],{"class":104,"line":105},[102,97853,97854],{"class":112},"a.resize((",[102,97856,457],{"class":161},[102,97858,491],{"class":112},[102,97860,190],{"class":161},[102,97862,30488],{"class":112},[102,97864,97865],{"class":104,"line":24},[102,97866,93555],{"class":171},[102,97868,97869],{"class":104,"line":1168},[102,97870,93919],{"class":217},[102,97872,97873],{"class":104,"line":1183},[102,97874,97875],{"class":217},"array([[ 1,  2],\n",[102,97877,97878],{"class":104,"line":1189},[102,97879,97880],{"class":217},"       [ 3,  4],\n",[102,97882,97883],{"class":104,"line":1203},[102,97884,97885],{"class":217},"       [ 5,  6],\n",[102,97887,97888],{"class":104,"line":1209},[102,97889,97890],{"class":217},"       [ 7,  8],\n",[102,97892,97893],{"class":104,"line":1300},[102,97894,97895],{"class":217},"       [ 9, 10],\n",[102,97897,97898],{"class":104,"line":1306},[102,97899,97900],{"class":217},"       [11, 12]])\n",[102,97902,97903],{"class":104,"line":1318},[102,97904,93919],{"class":217},[14,97906,97908],{"id":97907},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,97910,97911],{},"改变了原数组",[93,97913,97915],{"className":30369,"code":97914,"language":30371,"meta":23,"style":23},"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",[99,97916,97917,97933,97949,97953,97957,97961,97965],{"__ignoreMap":23},[102,97918,97919,97921,97923,97925,97927,97929,97931],{"class":104,"line":105},[102,97920,351],{"class":112},[102,97922,158],{"class":108},[102,97924,92993],{"class":112},[102,97926,330],{"class":161},[102,97928,491],{"class":112},[102,97930,636],{"class":161},[102,97932,119],{"class":112},[102,97934,97935,97937,97939,97941,97943,97945,97947],{"class":104,"line":24},[102,97936,97808],{"class":112},[102,97938,158],{"class":108},[102,97940,113],{"class":112},[102,97942,190],{"class":161},[102,97944,491],{"class":112},[102,97946,457],{"class":161},[102,97948,119],{"class":112},[102,97950,97951],{"class":104,"line":1168},[102,97952,93555],{"class":171},[102,97954,97955],{"class":104,"line":1183},[102,97956,93919],{"class":217},[102,97958,97959],{"class":104,"line":1189},[102,97960,97179],{"class":217},[102,97962,97963],{"class":104,"line":1203},[102,97964,97184],{"class":217},[102,97966,97967],{"class":104,"line":1209},[102,97968,93919],{"class":217},[14,97970,97972],{"id":97971},"_56-重要比较","5.6 重要比较：",[19,97974,97975],{},[1451,97976],{"alt":23,"src":97977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,97979,97980,97981,97983,97984,97986],{},"口诀：NumPy 函数要么用 ",[99,97982,95954],{},"，要么用 ",[99,97985,31487],{},"，创建结构用 shape，造数据用 size",[19,97988,97989],{},[1451,97990],{"alt":23,"src":97991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5116,97993,97994],{},"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":23,"searchDepth":24,"depth":24,"links":97996},[97997,97998,97999,98000,98001,98002],{"id":97518,"depth":24,"text":97519},{"id":97670,"depth":24,"text":97671},{"id":97720,"depth":24,"text":97721},{"id":97766,"depth":24,"text":97767},{"id":97907,"depth":24,"text":97908},{"id":97971,"depth":24,"text":97972},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97510,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98009,"title":98010,"body":98011,"description":27,"extension":28,"meta":99083,"navigation":30,"path":99084,"seo":99085,"stem":99086,"__hash__":99087},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98012,"toc":99077},[98013,98016,98020,98023,98026,98029,98094,98097,98137,98140,98222,98225,98230,98252,98254,98259,98264,98267,98270,98425,98428,98630,98634,98637,98640,98708,98710,98715,98718,98721,98801,98805,98808,98810,98883,98885,98890,98892,98972,98976,98979,98982,98985,98988,98991,98994,99074],[10,98014,98010],{"id":98015},"_6数组的拼接",[14,98017,98019],{"id":98018},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98021,98022],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98024,98025],{},"函数内部传两个数列构成的数列或者元组",[19,98027,98028],{},"①一维数组的拼接",[93,98030,98032],{"className":30369,"code":98031,"language":30371,"meta":23,"style":23},"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",[99,98033,98034,98054,98074,98079,98084,98089],{"__ignoreMap":23},[102,98035,98036,98038,98040,98042,98044,98046,98048,98050,98052],{"class":104,"line":105},[102,98037,351],{"class":112},[102,98039,158],{"class":108},[102,98041,93015],{"class":112},[102,98043,330],{"class":161},[102,98045,491],{"class":112},[102,98047,190],{"class":161},[102,98049,491],{"class":112},[102,98051,184],{"class":161},[102,98053,4646],{"class":112},[102,98055,98056,98058,98060,98062,98064,98066,98068,98070,98072],{"class":104,"line":24},[102,98057,376],{"class":112},[102,98059,158],{"class":108},[102,98061,93015],{"class":112},[102,98063,406],{"class":161},[102,98065,491],{"class":112},[102,98067,432],{"class":161},[102,98069,491],{"class":112},[102,98071,457],{"class":161},[102,98073,4646],{"class":112},[102,98075,98076],{"class":104,"line":1168},[102,98077,98078],{"class":171},"#调用concatenate进行数组拼接\n",[102,98080,98081],{"class":104,"line":1183},[102,98082,98083],{"class":112},"np.concatenate((a,b))\n",[102,98085,98086],{"class":104,"line":1189},[102,98087,98088],{"class":171},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[102,98090,98091],{"class":104,"line":1203},[102,98092,98093],{"class":171},"#np.concatenate([a,b])\n",[19,98095,98096],{},"②一维多个数组拼接",[93,98098,98100],{"className":30369,"code":98099,"language":30371,"meta":23,"style":23},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[99,98101,98102,98107,98127,98132],{"__ignoreMap":23},[102,98103,98104],{"class":104,"line":105},[102,98105,98106],{"class":171},"#也可以多个数组进行拼接\n",[102,98108,98109,98111,98113,98115,98117,98119,98121,98123,98125],{"class":104,"line":24},[102,98110,401],{"class":112},[102,98112,158],{"class":108},[102,98114,93015],{"class":112},[102,98116,559],{"class":161},[102,98118,491],{"class":112},[102,98120,585],{"class":161},[102,98122,491],{"class":112},[102,98124,636],{"class":161},[102,98126,4646],{"class":112},[102,98128,98129],{"class":104,"line":1168},[102,98130,98131],{"class":112},"c\n",[102,98133,98134],{"class":104,"line":1183},[102,98135,98136],{"class":112},"np.concatenate((a,b,c))\n",[19,98138,98139],{},"③二维数组拼接",[93,98141,98143],{"className":30369,"code":98142,"language":30371,"meta":23,"style":23},"#二维数组使用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",[99,98144,98145,98150,98174,98199,98204,98209],{"__ignoreMap":23},[102,98146,98147],{"class":104,"line":105},[102,98148,98149],{"class":171},"#二维数组使用concatenate进行拼接\n",[102,98151,98152,98154,98156,98158,98160,98162,98164,98166,98168,98170,98172],{"class":104,"line":24},[102,98153,93297],{"class":112},[102,98155,158],{"class":108},[102,98157,92993],{"class":112},[102,98159,330],{"class":161},[102,98161,491],{"class":112},[102,98163,636],{"class":161},[102,98165,92998],{"class":112},[102,98167,184],{"class":161},[102,98169,491],{"class":112},[102,98171,406],{"class":161},[102,98173,119],{"class":112},[102,98175,98176,98179,98181,98183,98185,98187,98189,98191,98193,98195,98197],{"class":104,"line":1168},[102,98177,98178],{"class":112},"bb",[102,98180,158],{"class":108},[102,98182,92993],{"class":112},[102,98184,450],{"class":161},[102,98186,491],{"class":112},[102,98188,755],{"class":161},[102,98190,92998],{"class":112},[102,98192,184],{"class":161},[102,98194,491],{"class":112},[102,98196,406],{"class":161},[102,98198,119],{"class":112},[102,98200,98201],{"class":104,"line":1183},[102,98202,98203],{"class":171},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[102,98205,98206],{"class":104,"line":1189},[102,98207,98208],{"class":171},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[102,98210,98211,98214,98216,98218,98220],{"class":104,"line":1203},[102,98212,98213],{"class":112},"np.concatenate((aa,bb),",[102,98215,47505],{"class":5206},[102,98217,158],{"class":108},[102,98219,304],{"class":161},[102,98221,119],{"class":112},[19,98223,98224],{},"结果：",[19,98226,98227],{},[1451,98228],{"alt":23,"src":98229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[93,98231,98233],{"className":30369,"code":98232,"language":30371,"meta":23,"style":23},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[99,98234,98235,98240],{"__ignoreMap":23},[102,98236,98237],{"class":104,"line":105},[102,98238,98239],{"class":171},"#指定axis为1进行拼接\n",[102,98241,98242,98244,98246,98248,98250],{"class":104,"line":24},[102,98243,98213],{"class":112},[102,98245,47505],{"class":5206},[102,98247,158],{"class":108},[102,98249,330],{"class":161},[102,98251,119],{"class":112},[19,98253,98224],{},[19,98255,98256],{},[1451,98257],{"alt":23,"src":98258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98260,98261],{},[262,98262,98263],{},"二维数组总结：0竖着方向，1横着方向",[19,98265,98266],{},"④三维数组拼接",[19,98268,98269],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[93,98271,98273],{"className":30369,"code":98272,"language":30371,"meta":23,"style":23},"#两个三行六列\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",[99,98274,98275,98280,98308,98338,98343,98360,98365,98370,98375,98392,98397,98402,98407,98420],{"__ignoreMap":23},[102,98276,98277],{"class":104,"line":105},[102,98278,98279],{"class":171},"#两个三行六列\n",[102,98281,98282,98284,98286,98288,98290,98292,98294,98296,98298,98300,98302,98304,98306],{"class":104,"line":24},[102,98283,95512],{"class":112},[102,98285,158],{"class":108},[102,98287,92993],{"class":112},[102,98289,330],{"class":161},[102,98291,491],{"class":112},[102,98293,438],{"class":161},[102,98295,92998],{"class":112},[102,98297,190],{"class":161},[102,98299,491],{"class":112},[102,98301,184],{"class":161},[102,98303,491],{"class":112},[102,98305,457],{"class":161},[102,98307,119],{"class":112},[102,98309,98310,98313,98315,98317,98319,98321,98324,98326,98328,98330,98332,98334,98336],{"class":104,"line":1168},[102,98311,98312],{"class":112},"bbb",[102,98314,158],{"class":108},[102,98316,92993],{"class":112},[102,98318,450],{"class":161},[102,98320,491],{"class":112},[102,98322,98323],{"class":161},"137",[102,98325,92998],{"class":112},[102,98327,190],{"class":161},[102,98329,491],{"class":112},[102,98331,184],{"class":161},[102,98333,491],{"class":112},[102,98335,457],{"class":161},[102,98337,119],{"class":112},[102,98339,98340],{"class":104,"line":1183},[102,98341,98342],{"class":171},"#axis=0\n",[102,98344,98345,98347,98349,98352,98354,98356,98358],{"class":104,"line":1189},[102,98346,808],{"class":112},[102,98348,158],{"class":108},[102,98350,98351],{"class":112},"np.concatenate((aaa,bbb),",[102,98353,47505],{"class":5206},[102,98355,158],{"class":108},[102,98357,304],{"class":161},[102,98359,119],{"class":112},[102,98361,98362],{"class":104,"line":1203},[102,98363,98364],{"class":112},"s.shape\n",[102,98366,98367],{"class":104,"line":1209},[102,98368,98369],{"class":171},"#输出：(4,3,6)\n",[102,98371,98372],{"class":104,"line":1300},[102,98373,98374],{"class":171},"#axis=1\n",[102,98376,98377,98380,98382,98384,98386,98388,98390],{"class":104,"line":1306},[102,98378,98379],{"class":112},"ss",[102,98381,158],{"class":108},[102,98383,98351],{"class":112},[102,98385,47505],{"class":5206},[102,98387,158],{"class":108},[102,98389,330],{"class":161},[102,98391,119],{"class":112},[102,98393,98394],{"class":104,"line":1318},[102,98395,98396],{"class":112},"ss.shape\n",[102,98398,98399],{"class":104,"line":1601},[102,98400,98401],{"class":171},"#输出：(2,6,6)\n",[102,98403,98404],{"class":104,"line":1606},[102,98405,98406],{"class":171},"#axis=2\n",[102,98408,98409,98411,98413,98415,98417],{"class":104,"line":1612},[102,98410,98351],{"class":112},[102,98412,47505],{"class":5206},[102,98414,158],{"class":108},[102,98416,190],{"class":161},[102,98418,98419],{"class":112},").shape\n",[102,98421,98422],{"class":104,"line":1617},[102,98423,98424],{"class":171},"#输出：（2，3，12）\n",[19,98426,98427],{},"⑤四维数组拼接",[93,98429,98431],{"className":30369,"code":98430,"language":30371,"meta":23,"style":23},"#两个三行六列\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",[99,98432,98433,98437,98465,98493,98518,98544,98548,98561,98566,98570,98582,98587,98591,98603,98608,98613,98625],{"__ignoreMap":23},[102,98434,98435],{"class":104,"line":105},[102,98436,98279],{"class":171},[102,98438,98439,98441,98443,98445,98447,98449,98451,98453,98455,98457,98459,98461,98463],{"class":104,"line":24},[102,98440,95512],{"class":112},[102,98442,158],{"class":108},[102,98444,92993],{"class":112},[102,98446,330],{"class":161},[102,98448,491],{"class":112},[102,98450,438],{"class":161},[102,98452,92998],{"class":112},[102,98454,190],{"class":161},[102,98456,491],{"class":112},[102,98458,184],{"class":161},[102,98460,491],{"class":112},[102,98462,457],{"class":161},[102,98464,119],{"class":112},[102,98466,98467,98469,98471,98473,98475,98477,98479,98481,98483,98485,98487,98489,98491],{"class":104,"line":1168},[102,98468,98312],{"class":112},[102,98470,158],{"class":108},[102,98472,92993],{"class":112},[102,98474,450],{"class":161},[102,98476,491],{"class":112},[102,98478,98323],{"class":161},[102,98480,92998],{"class":112},[102,98482,190],{"class":161},[102,98484,491],{"class":112},[102,98486,184],{"class":161},[102,98488,491],{"class":112},[102,98490,457],{"class":161},[102,98492,119],{"class":112},[102,98494,98495,98498,98500,98502,98504,98506,98508,98510,98512,98514,98516],{"class":104,"line":1183},[102,98496,98497],{"class":112},"aaaa",[102,98499,158],{"class":108},[102,98501,97661],{"class":112},[102,98503,190],{"class":161},[102,98505,491],{"class":112},[102,98507,184],{"class":161},[102,98509,491],{"class":112},[102,98511,184],{"class":161},[102,98513,491],{"class":112},[102,98515,190],{"class":161},[102,98517,119],{"class":112},[102,98519,98520,98523,98525,98528,98530,98532,98534,98536,98538,98540,98542],{"class":104,"line":1189},[102,98521,98522],{"class":112},"bbbb",[102,98524,158],{"class":108},[102,98526,98527],{"class":112},"bbb.reshape(",[102,98529,190],{"class":161},[102,98531,491],{"class":112},[102,98533,184],{"class":161},[102,98535,491],{"class":112},[102,98537,184],{"class":161},[102,98539,491],{"class":112},[102,98541,190],{"class":161},[102,98543,119],{"class":112},[102,98545,98546],{"class":104,"line":1203},[102,98547,98342],{"class":171},[102,98549,98550,98553,98555,98557,98559],{"class":104,"line":1209},[102,98551,98552],{"class":112},"np.concatenate((aaaa,bbbb),",[102,98554,47505],{"class":5206},[102,98556,158],{"class":108},[102,98558,304],{"class":161},[102,98560,98419],{"class":112},[102,98562,98563],{"class":104,"line":1300},[102,98564,98565],{"class":171},"#结果：（4，3，3，2）\n",[102,98567,98568],{"class":104,"line":1306},[102,98569,98374],{"class":171},[102,98571,98572,98574,98576,98578,98580],{"class":104,"line":1318},[102,98573,98552],{"class":112},[102,98575,47505],{"class":5206},[102,98577,158],{"class":108},[102,98579,330],{"class":161},[102,98581,98419],{"class":112},[102,98583,98584],{"class":104,"line":1601},[102,98585,98586],{"class":171},"#结果：（2，6，3，2）\n",[102,98588,98589],{"class":104,"line":1606},[102,98590,98406],{"class":171},[102,98592,98593,98595,98597,98599,98601],{"class":104,"line":1612},[102,98594,98552],{"class":112},[102,98596,47505],{"class":5206},[102,98598,158],{"class":108},[102,98600,190],{"class":161},[102,98602,98419],{"class":112},[102,98604,98605],{"class":104,"line":1617},[102,98606,98607],{"class":171},"#结果：（2，3，6，2）\n",[102,98609,98610],{"class":104,"line":1631},[102,98611,98612],{"class":171},"#axis=3\n",[102,98614,98615,98617,98619,98621,98623],{"class":104,"line":1636},[102,98616,98552],{"class":112},[102,98618,47505],{"class":5206},[102,98620,158],{"class":108},[102,98622,184],{"class":161},[102,98624,98419],{"class":112},[102,98626,98627],{"class":104,"line":1642},[102,98628,98629],{"class":171},"#结果：（2，3，3，4）\n",[14,98631,98633],{"id":98632},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98635,98636],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98638,98639],{},"①二维数组",[93,98641,98643],{"className":30369,"code":98642,"language":30371,"meta":23,"style":23},"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",[99,98644,98645,98669,98693,98698,98703],{"__ignoreMap":23},[102,98646,98647,98649,98651,98653,98655,98657,98659,98661,98663,98665,98667],{"class":104,"line":105},[102,98648,93297],{"class":112},[102,98650,158],{"class":108},[102,98652,92993],{"class":112},[102,98654,330],{"class":161},[102,98656,491],{"class":112},[102,98658,636],{"class":161},[102,98660,92998],{"class":112},[102,98662,184],{"class":161},[102,98664,491],{"class":112},[102,98666,406],{"class":161},[102,98668,119],{"class":112},[102,98670,98671,98673,98675,98677,98679,98681,98683,98685,98687,98689,98691],{"class":104,"line":24},[102,98672,98178],{"class":112},[102,98674,158],{"class":108},[102,98676,92993],{"class":112},[102,98678,450],{"class":161},[102,98680,491],{"class":112},[102,98682,755],{"class":161},[102,98684,92998],{"class":112},[102,98686,184],{"class":161},[102,98688,491],{"class":112},[102,98690,406],{"class":161},[102,98692,119],{"class":112},[102,98694,98695],{"class":104,"line":1168},[102,98696,98697],{"class":112},"np.hstack((aa,bb))\n",[102,98699,98700],{"class":104,"line":1183},[102,98701,98702],{"class":171},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[102,98704,98705],{"class":104,"line":1189},[102,98706,98707],{"class":171},"#np.hstack([aa,bb])\n",[19,98709,98224],{},[19,98711,98712],{},[1451,98713],{"alt":23,"src":98714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98716,98717],{},"等效于concatenate()函数中axis=1时的情况",[19,98719,98720],{},"②三维数组",[93,98722,98724],{"className":30369,"code":98723,"language":30371,"meta":23,"style":23},"#两个三行六列\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",[99,98725,98726,98730,98758,98786,98791,98796],{"__ignoreMap":23},[102,98727,98728],{"class":104,"line":105},[102,98729,98279],{"class":171},[102,98731,98732,98734,98736,98738,98740,98742,98744,98746,98748,98750,98752,98754,98756],{"class":104,"line":24},[102,98733,95512],{"class":112},[102,98735,158],{"class":108},[102,98737,92993],{"class":112},[102,98739,330],{"class":161},[102,98741,491],{"class":112},[102,98743,438],{"class":161},[102,98745,92998],{"class":112},[102,98747,190],{"class":161},[102,98749,491],{"class":112},[102,98751,184],{"class":161},[102,98753,491],{"class":112},[102,98755,457],{"class":161},[102,98757,119],{"class":112},[102,98759,98760,98762,98764,98766,98768,98770,98772,98774,98776,98778,98780,98782,98784],{"class":104,"line":1168},[102,98761,98312],{"class":112},[102,98763,158],{"class":108},[102,98765,92993],{"class":112},[102,98767,450],{"class":161},[102,98769,491],{"class":112},[102,98771,98323],{"class":161},[102,98773,92998],{"class":112},[102,98775,190],{"class":161},[102,98777,491],{"class":112},[102,98779,184],{"class":161},[102,98781,491],{"class":112},[102,98783,457],{"class":161},[102,98785,119],{"class":112},[102,98787,98788],{"class":104,"line":1183},[102,98789,98790],{"class":171},"#使用hstack\n",[102,98792,98793],{"class":104,"line":1189},[102,98794,98795],{"class":112},"np.hstack((aaa,bbb)).shape\n",[102,98797,98798],{"class":104,"line":1203},[102,98799,98800],{"class":171},"#输出：（2，6，6）\n",[14,98802,98804],{"id":98803},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,98806,98807],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,98809,98639],{},[93,98811,98813],{"className":30369,"code":98812,"language":30371,"meta":23,"style":23},"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",[99,98814,98815,98839,98863,98868,98873,98878],{"__ignoreMap":23},[102,98816,98817,98819,98821,98823,98825,98827,98829,98831,98833,98835,98837],{"class":104,"line":105},[102,98818,93297],{"class":112},[102,98820,158],{"class":108},[102,98822,92993],{"class":112},[102,98824,330],{"class":161},[102,98826,491],{"class":112},[102,98828,636],{"class":161},[102,98830,92998],{"class":112},[102,98832,184],{"class":161},[102,98834,491],{"class":112},[102,98836,406],{"class":161},[102,98838,119],{"class":112},[102,98840,98841,98843,98845,98847,98849,98851,98853,98855,98857,98859,98861],{"class":104,"line":24},[102,98842,98178],{"class":112},[102,98844,158],{"class":108},[102,98846,92993],{"class":112},[102,98848,450],{"class":161},[102,98850,491],{"class":112},[102,98852,755],{"class":161},[102,98854,92998],{"class":112},[102,98856,184],{"class":161},[102,98858,491],{"class":112},[102,98860,406],{"class":161},[102,98862,119],{"class":112},[102,98864,98865],{"class":104,"line":1168},[102,98866,98867],{"class":171},"#vstack 垂直方向进行堆叠\n",[102,98869,98870],{"class":104,"line":1183},[102,98871,98872],{"class":112},"np.vstack((aa,bb))\n",[102,98874,98875],{"class":104,"line":1189},[102,98876,98877],{"class":171},"#与hstack传的参数类似，等价于：\n",[102,98879,98880],{"class":104,"line":1203},[102,98881,98882],{"class":112},"np.vstack([aa,bb])\n",[19,98884,98224],{},[19,98886,98887],{},[1451,98888],{"alt":23,"src":98889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,98891,98720],{},[93,98893,98895],{"className":30369,"code":98894,"language":30371,"meta":23,"style":23},"#两个三行六列\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",[99,98896,98897,98901,98929,98957,98962,98967],{"__ignoreMap":23},[102,98898,98899],{"class":104,"line":105},[102,98900,98279],{"class":171},[102,98902,98903,98905,98907,98909,98911,98913,98915,98917,98919,98921,98923,98925,98927],{"class":104,"line":24},[102,98904,95512],{"class":112},[102,98906,158],{"class":108},[102,98908,92993],{"class":112},[102,98910,330],{"class":161},[102,98912,491],{"class":112},[102,98914,438],{"class":161},[102,98916,92998],{"class":112},[102,98918,190],{"class":161},[102,98920,491],{"class":112},[102,98922,184],{"class":161},[102,98924,491],{"class":112},[102,98926,457],{"class":161},[102,98928,119],{"class":112},[102,98930,98931,98933,98935,98937,98939,98941,98943,98945,98947,98949,98951,98953,98955],{"class":104,"line":1168},[102,98932,98312],{"class":112},[102,98934,158],{"class":108},[102,98936,92993],{"class":112},[102,98938,450],{"class":161},[102,98940,491],{"class":112},[102,98942,98323],{"class":161},[102,98944,92998],{"class":112},[102,98946,190],{"class":161},[102,98948,491],{"class":112},[102,98950,184],{"class":161},[102,98952,491],{"class":112},[102,98954,457],{"class":161},[102,98956,119],{"class":112},[102,98958,98959],{"class":104,"line":1183},[102,98960,98961],{"class":171},"#使用vstack\n",[102,98963,98964],{"class":104,"line":1189},[102,98965,98966],{"class":112},"np.vstack((aaa,bbb)).shape\n",[102,98968,98969],{"class":104,"line":1203},[102,98970,98971],{"class":171},"#输出：（4，3，6）\n",[14,98973,98975],{"id":98974},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,98977,98978],{},"该方法是三维数组特有的方法",[19,98980,98981],{},"也就是说",[19,98983,98984],{},"一维数组拼接方法用：concatenate()",[19,98986,98987],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,98989,98990],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,98992,98993],{},"四维数组及多维数组只能用concatenate进行拼接",[93,98995,98997],{"className":30369,"code":98996,"language":30371,"meta":23,"style":23},"#两个三行六列\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",[99,98998,98999,99003,99031,99059,99064,99069],{"__ignoreMap":23},[102,99000,99001],{"class":104,"line":105},[102,99002,98279],{"class":171},[102,99004,99005,99007,99009,99011,99013,99015,99017,99019,99021,99023,99025,99027,99029],{"class":104,"line":24},[102,99006,95512],{"class":112},[102,99008,158],{"class":108},[102,99010,92993],{"class":112},[102,99012,330],{"class":161},[102,99014,491],{"class":112},[102,99016,438],{"class":161},[102,99018,92998],{"class":112},[102,99020,190],{"class":161},[102,99022,491],{"class":112},[102,99024,184],{"class":161},[102,99026,491],{"class":112},[102,99028,457],{"class":161},[102,99030,119],{"class":112},[102,99032,99033,99035,99037,99039,99041,99043,99045,99047,99049,99051,99053,99055,99057],{"class":104,"line":1168},[102,99034,98312],{"class":112},[102,99036,158],{"class":108},[102,99038,92993],{"class":112},[102,99040,450],{"class":161},[102,99042,491],{"class":112},[102,99044,98323],{"class":161},[102,99046,92998],{"class":112},[102,99048,190],{"class":161},[102,99050,491],{"class":112},[102,99052,184],{"class":161},[102,99054,491],{"class":112},[102,99056,457],{"class":161},[102,99058,119],{"class":112},[102,99060,99061],{"class":104,"line":1183},[102,99062,99063],{"class":171},"#使用dstack\n",[102,99065,99066],{"class":104,"line":1189},[102,99067,99068],{"class":112},"np.dstack((aaa,bbb)).shape\n",[102,99070,99071],{"class":104,"line":1203},[102,99072,99073],{"class":171},"#结果：（2，3，12）\n",[5116,99075,99076],{},"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":23,"searchDepth":24,"depth":24,"links":99078},[99079,99080,99081,99082],{"id":98018,"depth":24,"text":98019},{"id":98632,"depth":24,"text":98633},{"id":98803,"depth":24,"text":98804},{"id":98974,"depth":24,"text":98975},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98010,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99089,"title":99090,"body":99091,"description":27,"extension":28,"meta":99366,"navigation":30,"path":99367,"seo":99368,"stem":99369,"__hash__":99370},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99092,"toc":99364},[99093,99096,99099,99193,99196,99199,99202,99205,99208,99211,99214,99217,99361],[10,99094,99090],{"id":99095},"_7数组转置",[19,99097,99098],{},"使用transpose()函数",[93,99100,99102],{"className":30369,"code":99101,"language":30371,"meta":23,"style":23},"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",[99,99103,99104,99114,99138,99143,99148,99153,99158,99166,99170,99174,99179,99184,99189],{"__ignoreMap":23},[102,99105,99106,99108,99110,99112],{"class":104,"line":105},[102,99107,30383],{"class":108},[102,99109,31371],{"class":112},[102,99111,31374],{"class":108},[102,99113,31377],{"class":112},[102,99115,99116,99118,99120,99122,99124,99126,99128,99130,99132,99134,99136],{"class":104,"line":24},[102,99117,351],{"class":112},[102,99119,158],{"class":108},[102,99121,31708],{"class":112},[102,99123,330],{"class":161},[102,99125,491],{"class":112},[102,99127,636],{"class":161},[102,99129,92998],{"class":112},[102,99131,406],{"class":161},[102,99133,491],{"class":112},[102,99135,184],{"class":161},[102,99137,119],{"class":112},[102,99139,99140],{"class":104,"line":1168},[102,99141,99142],{"class":171},"#二维数组转置\n",[102,99144,99145],{"class":104,"line":1183},[102,99146,99147],{"class":171},"#调用transpose()函数\n",[102,99149,99150],{"class":104,"line":1189},[102,99151,99152],{"class":112},"a.transpose()\n",[102,99154,99155],{"class":104,"line":1203},[102,99156,99157],{"class":171},"#对于二维数组也可以采用.T来实现\n",[102,99159,99160,99163],{"class":104,"line":1209},[102,99161,99162],{"class":112},"a.T",[102,99164,99165],{"class":171},"#与上述代码一样\n",[102,99167,99168],{"class":104,"line":1300},[102,99169,93555],{"class":171},[102,99171,99172],{"class":104,"line":1306},[102,99173,93919],{"class":217},[102,99175,99176],{"class":104,"line":1318},[102,99177,99178],{"class":217},"array([[ 1,  4,  7, 10],\n",[102,99180,99181],{"class":104,"line":1601},[102,99182,99183],{"class":217},"       [ 2,  5,  8, 11],\n",[102,99185,99186],{"class":104,"line":1606},[102,99187,99188],{"class":217},"       [ 3,  6,  9, 12]])\n",[102,99190,99191],{"class":104,"line":1612},[102,99192,93919],{"class":217},[19,99194,99195],{},"也可以使用np.transpose()的形式",[19,99197,99198],{},"#多维数组进行转置 np.transpose()",[19,99200,99201],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99203,99204],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99206,99207],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99209,99210],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99212,99213],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99215,99216],{},"四维及以上的数组也是一样的道理",[93,99218,99220],{"className":30369,"code":99219,"language":30371,"meta":23,"style":23},"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",[99,99221,99222,99250,99255,99260,99265,99283,99288,99320,99325,99330,99335,99356],{"__ignoreMap":23},[102,99223,99224,99226,99228,99230,99232,99234,99236,99238,99240,99242,99244,99246,99248],{"class":104,"line":105},[102,99225,933],{"class":112},[102,99227,158],{"class":108},[102,99229,92993],{"class":112},[102,99231,330],{"class":161},[102,99233,491],{"class":112},[102,99235,438],{"class":161},[102,99237,92998],{"class":112},[102,99239,184],{"class":161},[102,99241,491],{"class":112},[102,99243,457],{"class":161},[102,99245,491],{"class":112},[102,99247,190],{"class":161},[102,99249,119],{"class":112},[102,99251,99252],{"class":104,"line":24},[102,99253,99254],{"class":112},"x.shape\n",[102,99256,99257],{"class":104,"line":1168},[102,99258,99259],{"class":171},"#结果：（3,6,2）\n",[102,99261,99262],{"class":104,"line":1183},[102,99263,99264],{"class":171},"#使用np.transpose()进行转置 变为(2,6,3)\n",[102,99266,99267,99270,99272,99274,99276,99278,99280],{"class":104,"line":1189},[102,99268,99269],{"class":112},"np.transpose(x,(",[102,99271,190],{"class":161},[102,99273,491],{"class":112},[102,99275,330],{"class":161},[102,99277,491],{"class":112},[102,99279,304],{"class":161},[102,99281,99282],{"class":112},")).shape\n",[102,99284,99285],{"class":104,"line":1203},[102,99286,99287],{"class":171},"#结果：(2,6,3)\n",[102,99289,99290,99292,99294,99296,99298,99300,99302,99304,99306,99308,99310,99312,99314,99316,99318],{"class":104,"line":1209},[102,99291,98497],{"class":112},[102,99293,158],{"class":108},[102,99295,92993],{"class":112},[102,99297,330],{"class":161},[102,99299,491],{"class":112},[102,99301,438],{"class":161},[102,99303,92998],{"class":112},[102,99305,184],{"class":161},[102,99307,491],{"class":112},[102,99309,190],{"class":161},[102,99311,491],{"class":112},[102,99313,330],{"class":161},[102,99315,491],{"class":112},[102,99317,457],{"class":161},[102,99319,119],{"class":112},[102,99321,99322],{"class":104,"line":1300},[102,99323,99324],{"class":112},"aaaa.shape\n",[102,99326,99327],{"class":104,"line":1306},[102,99328,99329],{"class":171},"#结果：（3，2，1，6）\n",[102,99331,99332],{"class":104,"line":1318},[102,99333,99334],{"class":171},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[102,99336,99337,99340,99342,99344,99346,99348,99350,99352,99354],{"class":104,"line":1601},[102,99338,99339],{"class":112},"np.transpose(aaaa,(",[102,99341,330],{"class":161},[102,99343,491],{"class":112},[102,99345,190],{"class":161},[102,99347,491],{"class":112},[102,99349,304],{"class":161},[102,99351,491],{"class":112},[102,99353,184],{"class":161},[102,99355,99282],{"class":112},[102,99357,99358],{"class":104,"line":1606},[102,99359,99360],{"class":171},"#结果：(2,1,3,6)\n",[5116,99362,99363],{},"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":23,"searchDepth":24,"depth":24,"links":99365},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99090,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99372,"title":99373,"body":99374,"description":27,"extension":28,"meta":100108,"navigation":30,"path":100109,"seo":100110,"stem":100111,"__hash__":100112},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99375,"toc":100106},[99376,99379,99382,99385,99388,99391,99394,99397,99400,99509,99512,99515,100103],[10,99377,99373],{"id":99378},"_8数组分割",[19,99380,99381],{},"split分割",[19,99383,99384],{},"numpy.split(ary,indics_or_sections,axis)",[19,99386,99387],{},"解释：",[19,99389,99390],{},"ary:被分割的数组",[19,99392,99393],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99395,99396],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99398,99399],{},"①一维数组的分割",[93,99401,99403],{"className":30369,"code":99402,"language":30371,"meta":23,"style":23},"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",[99,99404,99405,99421,99426,99435,99439,99444,99452,99456,99461,99466,99479,99483,99488,99500,99504],{"__ignoreMap":23},[102,99406,99407,99409,99411,99413,99415,99417,99419],{"class":104,"line":105},[102,99408,351],{"class":112},[102,99410,158],{"class":108},[102,99412,92993],{"class":112},[102,99414,330],{"class":161},[102,99416,491],{"class":112},[102,99418,533],{"class":161},[102,99420,119],{"class":112},[102,99422,99423],{"class":104,"line":24},[102,99424,99425],{"class":171},"#如果传入整数，必须能够平分，否则会报错\n",[102,99427,99428,99431,99433],{"class":104,"line":1168},[102,99429,99430],{"class":112},"np.split(a,",[102,99432,190],{"class":161},[102,99434,119],{"class":112},[102,99436,99437],{"class":104,"line":1183},[102,99438,93555],{"class":171},[102,99440,99441],{"class":104,"line":1189},[102,99442,99443],{"class":171},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[102,99445,99446,99448,99450],{"class":104,"line":1203},[102,99447,99430],{"class":112},[102,99449,406],{"class":161},[102,99451,119],{"class":112},[102,99453,99454],{"class":104,"line":1209},[102,99455,93555],{"class":171},[102,99457,99458],{"class":104,"line":1300},[102,99459,99460],{"class":171},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[102,99462,99463],{"class":104,"line":1306},[102,99464,99465],{"class":171},"#传入数组\n",[102,99467,99468,99471,99473,99475,99477],{"class":104,"line":1318},[102,99469,99470],{"class":112},"np.split(a,[",[102,99472,184],{"class":161},[102,99474,491],{"class":112},[102,99476,432],{"class":161},[102,99478,4646],{"class":112},[102,99480,99481],{"class":104,"line":1601},[102,99482,93555],{"class":171},[102,99484,99485],{"class":104,"line":1606},[102,99486,99487],{"class":171},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[102,99489,99490,99492,99494,99496,99498],{"class":104,"line":1612},[102,99491,99470],{"class":112},[102,99493,432],{"class":161},[102,99495,491],{"class":112},[102,99497,482],{"class":161},[102,99499,4646],{"class":112},[102,99501,99502],{"class":104,"line":1617},[102,99503,93555],{"class":171},[102,99505,99506],{"class":104,"line":1631},[102,99507,99508],{"class":171},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99510,99511],{},"②二维数组的分割",[19,99513,99514],{},"使用split()",[93,99516,99518],{"className":30369,"code":99517,"language":30371,"meta":23,"style":23},"#二维数组分割\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",[99,99519,99520,99525,99549,99554,99563,99567,99571,99576,99581,99586,99591,99596,99601,99606,99610,99623,99627,99631,99635,99639,99643,99648,99653,99658,99662,99667,99683,99687,99691,99696,99701,99706,99711,99716,99721,99726,99731,99736,99741,99746,99751,99756,99761,99766,99771,99776,99781,99785,99789,99809,99813,99817,99822,99827,99832,99837,99842,99847,99852,99857,99862,99867,99872,99877,99882,99887,99892,99897,99902,99907,99911,99916,99925,99929,99933,99937,99941,99945,99949,99953,99957,99961,99970,99974,99978,99982,99986,99990,99994,99998,100002,100006,100010,100014,100018,100022,100026,100030,100034,100038,100042,100046,100050,100054,100067,100071,100075,100079,100083,100087,100091,100095,100099],{"__ignoreMap":23},[102,99521,99522],{"class":104,"line":105},[102,99523,99524],{"class":171},"#二维数组分割\n",[102,99526,99527,99529,99531,99533,99535,99537,99539,99541,99543,99545,99547],{"class":104,"line":24},[102,99528,93297],{"class":112},[102,99530,158],{"class":108},[102,99532,92993],{"class":112},[102,99534,330],{"class":161},[102,99536,491],{"class":112},[102,99538,438],{"class":161},[102,99540,92998],{"class":112},[102,99542,457],{"class":161},[102,99544,491],{"class":112},[102,99546,457],{"class":161},[102,99548,119],{"class":112},[102,99550,99551],{"class":104,"line":1168},[102,99552,99553],{"class":171},"#默认axis=0  传入整数平均分,按行来的\n",[102,99555,99556,99559,99561],{"class":104,"line":1183},[102,99557,99558],{"class":112},"np.split(aa,",[102,99560,184],{"class":161},[102,99562,119],{"class":112},[102,99564,99565],{"class":104,"line":1189},[102,99566,95755],{"class":171},[102,99568,99569],{"class":104,"line":1203},[102,99570,93919],{"class":217},[102,99572,99573],{"class":104,"line":1209},[102,99574,99575],{"class":217},"[array([[ 1,  2,  3,  4,  5,  6],\n",[102,99577,99578],{"class":104,"line":1300},[102,99579,99580],{"class":217},"        [ 7,  8,  9, 10, 11, 12]]),\n",[102,99582,99583],{"class":104,"line":1306},[102,99584,99585],{"class":217}," array([[13, 14, 15, 16, 17, 18],\n",[102,99587,99588],{"class":104,"line":1318},[102,99589,99590],{"class":217},"        [19, 20, 21, 22, 23, 24]]),\n",[102,99592,99593],{"class":104,"line":1601},[102,99594,99595],{"class":217}," array([[25, 26, 27, 28, 29, 30],\n",[102,99597,99598],{"class":104,"line":1606},[102,99599,99600],{"class":217},"        [31, 32, 33, 34, 35, 36]])]\n",[102,99602,99603],{"class":104,"line":1612},[102,99604,99605],{"class":217}," '''\n",[102,99607,99608],{"class":104,"line":1617},[102,99609,99465],{"class":171},[102,99611,99612,99615,99617,99619,99621],{"class":104,"line":1631},[102,99613,99614],{"class":112},"np.split(aa,[",[102,99616,190],{"class":161},[102,99618,491],{"class":112},[102,99620,432],{"class":161},[102,99622,4646],{"class":112},[102,99624,99625],{"class":104,"line":1636},[102,99626,95755],{"class":171},[102,99628,99629],{"class":104,"line":1642},[102,99630,93919],{"class":217},[102,99632,99633],{"class":104,"line":1663},[102,99634,99575],{"class":217},[102,99636,99637],{"class":104,"line":1668},[102,99638,99580],{"class":217},[102,99640,99641],{"class":104,"line":1682},[102,99642,99585],{"class":217},[102,99644,99645],{"class":104,"line":1687},[102,99646,99647],{"class":217},"        [19, 20, 21, 22, 23, 24],\n",[102,99649,99650],{"class":104,"line":1716},[102,99651,99652],{"class":217},"        [25, 26, 27, 28, 29, 30]]),\n",[102,99654,99655],{"class":104,"line":1721},[102,99656,99657],{"class":217}," array([[31, 32, 33, 34, 35, 36]])]\n",[102,99659,99660],{"class":104,"line":1738},[102,99661,93919],{"class":217},[102,99663,99664],{"class":104,"line":1743},[102,99665,99666],{"class":171},"#axis=1 按照列来分\n",[102,99668,99669,99671,99673,99675,99677,99679,99681],{"class":104,"line":1748},[102,99670,99558],{"class":112},[102,99672,184],{"class":161},[102,99674,491],{"class":112},[102,99676,47505],{"class":5206},[102,99678,158],{"class":108},[102,99680,330],{"class":161},[102,99682,119],{"class":112},[102,99684,99685],{"class":104,"line":1753},[102,99686,95755],{"class":171},[102,99688,99689],{"class":104,"line":1767},[102,99690,93919],{"class":217},[102,99692,99693],{"class":104,"line":1772},[102,99694,99695],{"class":217},"[array([[ 1,  2],\n",[102,99697,99698],{"class":104,"line":2566},[102,99699,99700],{"class":217},"        [ 7,  8],\n",[102,99702,99703],{"class":104,"line":2580},[102,99704,99705],{"class":217},"        [13, 14],\n",[102,99707,99708],{"class":104,"line":2588},[102,99709,99710],{"class":217},"        [19, 20],\n",[102,99712,99713],{"class":104,"line":2593},[102,99714,99715],{"class":217},"        [25, 26],\n",[102,99717,99718],{"class":104,"line":2599},[102,99719,99720],{"class":217},"        [31, 32]]),\n",[102,99722,99723],{"class":104,"line":2605},[102,99724,99725],{"class":217}," array([[ 3,  4],\n",[102,99727,99728],{"class":104,"line":2610},[102,99729,99730],{"class":217},"        [ 9, 10],\n",[102,99732,99733],{"class":104,"line":7938},[102,99734,99735],{"class":217},"        [15, 16],\n",[102,99737,99738],{"class":104,"line":7962},[102,99739,99740],{"class":217},"        [21, 22],\n",[102,99742,99743],{"class":104,"line":7967},[102,99744,99745],{"class":217},"        [27, 28],\n",[102,99747,99748],{"class":104,"line":7973},[102,99749,99750],{"class":217},"        [33, 34]]),\n",[102,99752,99753],{"class":104,"line":8000},[102,99754,99755],{"class":217}," array([[ 5,  6],\n",[102,99757,99758],{"class":104,"line":8005},[102,99759,99760],{"class":217},"        [11, 12],\n",[102,99762,99763],{"class":104,"line":8011},[102,99764,99765],{"class":217},"        [17, 18],\n",[102,99767,99768],{"class":104,"line":8023},[102,99769,99770],{"class":217},"        [23, 24],\n",[102,99772,99773],{"class":104,"line":8035},[102,99774,99775],{"class":217},"        [29, 30],\n",[102,99777,99778],{"class":104,"line":8047},[102,99779,99780],{"class":217},"        [35, 36]])]\n",[102,99782,99783],{"class":104,"line":9706},[102,99784,99605],{"class":217},[102,99786,99787],{"class":104,"line":9731},[102,99788,99465],{"class":171},[102,99790,99791,99793,99795,99797,99799,99801,99803,99805,99807],{"class":104,"line":9754},[102,99792,99614],{"class":112},[102,99794,330],{"class":161},[102,99796,491],{"class":112},[102,99798,190],{"class":161},[102,99800,41600],{"class":112},[102,99802,47505],{"class":5206},[102,99804,158],{"class":108},[102,99806,330],{"class":161},[102,99808,119],{"class":112},[102,99810,99811],{"class":104,"line":9778},[102,99812,93555],{"class":171},[102,99814,99815],{"class":104,"line":9783},[102,99816,93919],{"class":217},[102,99818,99819],{"class":104,"line":9788},[102,99820,99821],{"class":217},"[array([[ 1],\n",[102,99823,99824],{"class":104,"line":9793},[102,99825,99826],{"class":217},"        [ 7],\n",[102,99828,99829],{"class":104,"line":9802},[102,99830,99831],{"class":217},"        [13],\n",[102,99833,99834],{"class":104,"line":9807},[102,99835,99836],{"class":217},"        [19],\n",[102,99838,99839],{"class":104,"line":9813},[102,99840,99841],{"class":217},"        [25],\n",[102,99843,99844],{"class":104,"line":9834},[102,99845,99846],{"class":217},"        [31]]),\n",[102,99848,99849],{"class":104,"line":9840},[102,99850,99851],{"class":217}," array([[ 2],\n",[102,99853,99854],{"class":104,"line":9854},[102,99855,99856],{"class":217},"        [ 8],\n",[102,99858,99859],{"class":104,"line":9860},[102,99860,99861],{"class":217},"        [14],\n",[102,99863,99864],{"class":104,"line":9887},[102,99865,99866],{"class":217},"        [20],\n",[102,99868,99869],{"class":104,"line":9896},[102,99870,99871],{"class":217},"        [26],\n",[102,99873,99874],{"class":104,"line":9902},[102,99875,99876],{"class":217},"        [32]]),\n",[102,99878,99879],{"class":104,"line":9910},[102,99880,99881],{"class":217}," array([[ 3,  4,  5,  6],\n",[102,99883,99884],{"class":104,"line":9915},[102,99885,99886],{"class":217},"        [ 9, 10, 11, 12],\n",[102,99888,99889],{"class":104,"line":16594},[102,99890,99891],{"class":217},"        [15, 16, 17, 18],\n",[102,99893,99894],{"class":104,"line":16600},[102,99895,99896],{"class":217},"        [21, 22, 23, 24],\n",[102,99898,99899],{"class":104,"line":16623},[102,99900,99901],{"class":217},"        [27, 28, 29, 30],\n",[102,99903,99904],{"class":104,"line":16629},[102,99905,99906],{"class":217},"        [33, 34, 35, 36]])]\n",[102,99908,99909],{"class":104,"line":16652},[102,99910,93919],{"class":217},[102,99912,99913],{"class":104,"line":16666},[102,99914,99915],{"class":171},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[102,99917,99918,99921,99923],{"class":104,"line":16686},[102,99919,99920],{"class":112},"np.vsplit(aa,",[102,99922,184],{"class":161},[102,99924,119],{"class":112},[102,99926,99927],{"class":104,"line":16692},[102,99928,93555],{"class":171},[102,99930,99931],{"class":104,"line":16703},[102,99932,93919],{"class":217},[102,99934,99935],{"class":104,"line":16726},[102,99936,99575],{"class":217},[102,99938,99939],{"class":104,"line":16748},[102,99940,99580],{"class":217},[102,99942,99943],{"class":104,"line":16753},[102,99944,99585],{"class":217},[102,99946,99947],{"class":104,"line":16759},[102,99948,99590],{"class":217},[102,99950,99951],{"class":104,"line":16773},[102,99952,99595],{"class":217},[102,99954,99955],{"class":104,"line":16786},[102,99956,99600],{"class":217},[102,99958,99959],{"class":104,"line":16791},[102,99960,93919],{"class":217},[102,99962,99963,99966,99968],{"class":104,"line":16805},[102,99964,99965],{"class":112},"np.hsplit(aa,",[102,99967,184],{"class":161},[102,99969,119],{"class":112},[102,99971,99972],{"class":104,"line":16810},[102,99973,93555],{"class":171},[102,99975,99976],{"class":104,"line":16816},[102,99977,93919],{"class":217},[102,99979,99980],{"class":104,"line":16821},[102,99981,99695],{"class":217},[102,99983,99984],{"class":104,"line":16835},[102,99985,99700],{"class":217},[102,99987,99988],{"class":104,"line":16840},[102,99989,99705],{"class":217},[102,99991,99992],{"class":104,"line":16845},[102,99993,99710],{"class":217},[102,99995,99996],{"class":104,"line":16859},[102,99997,99715],{"class":217},[102,99999,100000],{"class":104,"line":16871},[102,100001,99720],{"class":217},[102,100003,100004],{"class":104,"line":16876},[102,100005,99725],{"class":217},[102,100007,100008],{"class":104,"line":16889},[102,100009,99730],{"class":217},[102,100011,100012],{"class":104,"line":16894},[102,100013,99735],{"class":217},[102,100015,100016],{"class":104,"line":16899},[102,100017,99740],{"class":217},[102,100019,100020],{"class":104,"line":16904},[102,100021,99745],{"class":217},[102,100023,100024],{"class":104,"line":16917},[102,100025,99750],{"class":217},[102,100027,100028],{"class":104,"line":16922},[102,100029,99755],{"class":217},[102,100031,100032],{"class":104,"line":32624},[102,100033,99760],{"class":217},[102,100035,100036],{"class":104,"line":32630},[102,100037,99765],{"class":217},[102,100039,100040],{"class":104,"line":32636},[102,100041,99770],{"class":217},[102,100043,100044],{"class":104,"line":32642},[102,100045,99775],{"class":217},[102,100047,100048],{"class":104,"line":32648},[102,100049,99780],{"class":217},[102,100051,100052],{"class":104,"line":32659},[102,100053,93919],{"class":217},[102,100055,100056,100059,100061,100063,100065],{"class":104,"line":32665},[102,100057,100058],{"class":112},"np.vsplit(aa,[",[102,100060,190],{"class":161},[102,100062,491],{"class":112},[102,100064,432],{"class":161},[102,100066,4646],{"class":112},[102,100068,100069],{"class":104,"line":32685},[102,100070,93555],{"class":171},[102,100072,100073],{"class":104,"line":32691},[102,100074,93919],{"class":217},[102,100076,100077],{"class":104,"line":32702},[102,100078,99575],{"class":217},[102,100080,100081],{"class":104,"line":32708},[102,100082,99580],{"class":217},[102,100084,100085],{"class":104,"line":32714},[102,100086,99585],{"class":217},[102,100088,100089],{"class":104,"line":32720},[102,100090,99647],{"class":217},[102,100092,100093],{"class":104,"line":32726},[102,100094,99652],{"class":217},[102,100096,100097],{"class":104,"line":32732},[102,100098,99657],{"class":217},[102,100100,100101],{"class":104,"line":32738},[102,100102,99605],{"class":217},[5116,100104,100105],{},"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":23,"searchDepth":24,"depth":24,"links":100107},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99373,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100114,"title":100115,"body":100116,"description":27,"extension":28,"meta":100610,"navigation":30,"path":100611,"seo":100612,"stem":100613,"__hash__":100614},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100117,"toc":100601},[100118,100121,100124,100149,100153,100212,100264,100268,100270,100306,100360,100362,100400,100471,100475,100480,100484,100487,100520,100523,100527,100530,100533,100536,100539,100544,100548,100551,100554,100557,100560,100565,100569,100574,100577,100598],[10,100119,100115],{"id":100120},"_9数学函数",[19,100122,100123],{},"补充回顾：python的列表推导式",[93,100125,100127],{"className":30369,"code":100126,"language":30371,"meta":23,"style":23},"[1\u002Fi for i in a]\n",[99,100128,100129],{"__ignoreMap":23},[102,100130,100131,100133,100135,100137,100140,100142,100144,100146],{"class":104,"line":105},[102,100132,1003],{"class":112},[102,100134,330],{"class":161},[102,100136,697],{"class":108},[102,100138,100139],{"class":112},"i ",[102,100141,3014],{"class":108},[102,100143,9428],{"class":112},[102,100145,26034],{"class":108},[102,100147,100148],{"class":112}," a]\n",[14,100150,100152],{"id":100151},"_91-求倒数","9.1 求倒数",[93,100154,100156],{"className":30369,"code":100155,"language":30371,"meta":23,"style":23},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[99,100157,100158,100163,100191,100203],{"__ignoreMap":23},[102,100159,100160],{"class":104,"line":105},[102,100161,100162],{"class":171},"#数组求倒数\n",[102,100164,100165,100167,100169,100171,100173,100175,100177,100179,100181,100183,100185,100187,100189],{"class":104,"line":24},[102,100166,351],{"class":112},[102,100168,158],{"class":108},[102,100170,1003],{"class":112},[102,100172,330],{"class":161},[102,100174,491],{"class":112},[102,100176,190],{"class":161},[102,100178,491],{"class":112},[102,100180,184],{"class":161},[102,100182,491],{"class":112},[102,100184,406],{"class":161},[102,100186,491],{"class":112},[102,100188,432],{"class":161},[102,100190,33237],{"class":112},[102,100192,100193,100195,100197,100200],{"class":104,"line":1168},[102,100194,376],{"class":112},[102,100196,158],{"class":108},[102,100198,100199],{"class":112},"np.array(a)",[102,100201,100202],{"class":171},"#将列表转换为数组\n",[102,100204,100205,100207,100209],{"class":104,"line":1183},[102,100206,330],{"class":161},[102,100208,697],{"class":108},[102,100210,100211],{"class":112},"b\n",[93,100213,100215],{"className":30369,"code":100214,"language":30371,"meta":23,"style":23},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[99,100216,100217,100245,100254,100259],{"__ignoreMap":23},[102,100218,100219,100221,100223,100225,100227,100229,100231,100233,100235,100237,100239,100241,100243],{"class":104,"line":105},[102,100220,351],{"class":112},[102,100222,158],{"class":108},[102,100224,1003],{"class":112},[102,100226,330],{"class":161},[102,100228,491],{"class":112},[102,100230,190],{"class":161},[102,100232,491],{"class":112},[102,100234,184],{"class":161},[102,100236,491],{"class":112},[102,100238,406],{"class":161},[102,100240,491],{"class":112},[102,100242,432],{"class":161},[102,100244,33237],{"class":112},[102,100246,100247,100249,100251],{"class":104,"line":24},[102,100248,376],{"class":112},[102,100250,158],{"class":108},[102,100252,100253],{"class":112},"np.array(a)\n",[102,100255,100256],{"class":104,"line":1168},[102,100257,100258],{"class":171},"#调用numpy中的函数reciprocal()\n",[102,100260,100261],{"class":104,"line":1183},[102,100262,100263],{"class":112},"np.reciprocal(b)\n",[14,100265,100267],{"id":100266},"_92-求平方","9.2 求平方",[19,100269,94521],{},[93,100271,100273],{"className":30369,"code":100272,"language":30371,"meta":23,"style":23},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[99,100274,100275,100280,100285,100301],{"__ignoreMap":23},[102,100276,100277],{"class":104,"line":105},[102,100278,100279],{"class":171},"#square()，求平方\n",[102,100281,100282],{"class":104,"line":24},[102,100283,100284],{"class":171},"#一维数组\n",[102,100286,100287,100289,100291,100293,100295,100297,100299],{"class":104,"line":1168},[102,100288,351],{"class":112},[102,100290,158],{"class":108},[102,100292,92993],{"class":112},[102,100294,330],{"class":161},[102,100296,491],{"class":112},[102,100298,559],{"class":161},[102,100300,119],{"class":112},[102,100302,100303],{"class":104,"line":1183},[102,100304,100305],{"class":112},"np.square(a)\n",[93,100307,100309],{"className":30369,"code":100308,"language":30371,"meta":23,"style":23},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[99,100310,100311,100316,100321,100342],{"__ignoreMap":23},[102,100312,100313],{"class":104,"line":105},[102,100314,100315],{"class":171},"#或者通过循环遍历的形式来计算\n",[102,100317,100318],{"class":104,"line":24},[102,100319,100320],{"class":171},"#这是一个列表\n",[102,100322,100323,100326,100328,100330,100332,100334,100336,100339],{"class":104,"line":1168},[102,100324,100325],{"class":112},"[i",[102,100327,568],{"class":108},[102,100329,100139],{"class":112},[102,100331,3014],{"class":108},[102,100333,9428],{"class":112},[102,100335,26034],{"class":108},[102,100337,100338],{"class":112}," a]",[102,100340,100341],{"class":171},"#这个求完之后在数列当中\n",[102,100343,100344,100347,100349,100351,100353,100355,100357],{"class":104,"line":1183},[102,100345,100346],{"class":112},"np.array([i",[102,100348,568],{"class":108},[102,100350,100139],{"class":112},[102,100352,3014],{"class":108},[102,100354,9428],{"class":112},[102,100356,26034],{"class":108},[102,100358,100359],{"class":112}," a])\n",[19,100361,93282],{},[93,100363,100365],{"className":30369,"code":100364,"language":30371,"meta":23,"style":23},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[99,100366,100367,100371,100395],{"__ignoreMap":23},[102,100368,100369],{"class":104,"line":105},[102,100370,93292],{"class":171},[102,100372,100373,100375,100377,100379,100381,100383,100385,100387,100389,100391,100393],{"class":104,"line":24},[102,100374,93297],{"class":112},[102,100376,158],{"class":108},[102,100378,92993],{"class":112},[102,100380,330],{"class":161},[102,100382,491],{"class":112},[102,100384,636],{"class":161},[102,100386,92998],{"class":112},[102,100388,406],{"class":161},[102,100390,491],{"class":112},[102,100392,184],{"class":161},[102,100394,119],{"class":112},[102,100396,100397],{"class":104,"line":1168},[102,100398,100399],{"class":112},"np.square(aa)\n",[93,100401,100403],{"className":30369,"code":100402,"language":30371,"meta":23,"style":23},"#传统的方式\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",[99,100404,100405,100410,100419,100435,100451,100466],{"__ignoreMap":23},[102,100406,100407],{"class":104,"line":105},[102,100408,100409],{"class":171},"#传统的方式\n",[102,100411,100412,100414,100416],{"class":104,"line":24},[102,100413,98178],{"class":112},[102,100415,158],{"class":108},[102,100417,100418],{"class":112},"np.empty_like(aa)\n",[102,100420,100421,100423,100425,100427,100429,100431,100433],{"class":104,"line":1168},[102,100422,3014],{"class":108},[102,100424,9428],{"class":112},[102,100426,26034],{"class":108},[102,100428,32434],{"class":161},[102,100430,113],{"class":112},[102,100432,406],{"class":161},[102,100434,30777],{"class":112},[102,100436,100437,100439,100441,100443,100445,100447,100449],{"class":104,"line":1183},[102,100438,3190],{"class":108},[102,100440,9490],{"class":112},[102,100442,26034],{"class":108},[102,100444,32434],{"class":161},[102,100446,113],{"class":112},[102,100448,184],{"class":161},[102,100450,30777],{"class":112},[102,100452,100453,100456,100458,100461,100463],{"class":104,"line":1189},[102,100454,100455],{"class":112},"        bb[i,j]",[102,100457,158],{"class":108},[102,100459,100460],{"class":112},"aa[i,j]",[102,100462,568],{"class":108},[102,100464,100465],{"class":112},"aa[i,j]\n",[102,100467,100468],{"class":104,"line":1203},[102,100469,100470],{"class":112},"bb\n",[14,100472,100474],{"id":100473},"_93-求各元素的符号","9.3 求各元素的符号",[19,100476,100477],{},[1451,100478],{"alt":23,"src":100479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100481,100483],{"id":100482},"_94-modf函数","9.4 modf函数",[19,100485,100486],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[93,100488,100490],{"className":30369,"code":100489,"language":30371,"meta":23,"style":23},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[99,100491,100492,100515],{"__ignoreMap":23},[102,100493,100494,100496,100498,100500,100502,100504,100506,100508,100510,100513],{"class":104,"line":105},[102,100495,351],{"class":112},[102,100497,158],{"class":108},[102,100499,92993],{"class":112},[102,100501,645],{"class":108},[102,100503,559],{"class":161},[102,100505,491],{"class":112},[102,100507,559],{"class":161},[102,100509,491],{"class":112},[102,100511,100512],{"class":161},"0.3",[102,100514,119],{"class":112},[102,100516,100517],{"class":104,"line":24},[102,100518,100519],{"class":112},"np.modf(a)\n",[19,100521,100522],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100524,100526],{"id":100525},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100528,100529],{},"np.cell()",[19,100531,100532],{},"np.floor()",[19,100534,100535],{},"np.rint()",[19,100537,100538],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100540,100541],{},[1451,100542],{"alt":23,"src":100543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100545,100547],{"id":100546},"_96-around函数","9.6 around()函数",[19,100549,100550],{},"around()函数也可以实现对数的小数位数进行操作",[19,100552,100553],{},"其中的参数：",[19,100555,100556],{},"1.要传的数组",[19,100558,100559],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100561,100562],{},[1451,100563],{"alt":23,"src":100564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100566,100568],{"id":100567},"_97-三角函数","9.7 三角函数",[19,100570,100571],{},[1451,100572],{"alt":23,"src":100573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100575,100576],{},"引入图像模块非常重要",[93,100578,100580],{"className":30369,"code":100579,"language":30371,"meta":23,"style":23},"from matplotlib import pyplot as plt\n",[99,100581,100582],{"__ignoreMap":23},[102,100583,100584,100586,100589,100591,100594,100596],{"class":104,"line":105},[102,100585,30728],{"class":108},[102,100587,100588],{"class":112}," matplotlib ",[102,100590,30383],{"class":108},[102,100592,100593],{"class":112}," pyplot ",[102,100595,31374],{"class":108},[102,100597,31428],{"class":112},[5116,100599,100600],{},"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":23,"searchDepth":24,"depth":24,"links":100602},[100603,100604,100605,100606,100607,100608,100609],{"id":100151,"depth":24,"text":100152},{"id":100266,"depth":24,"text":100267},{"id":100473,"depth":24,"text":100474},{"id":100482,"depth":24,"text":100483},{"id":100525,"depth":24,"text":100526},{"id":100546,"depth":24,"text":100547},{"id":100567,"depth":24,"text":100568},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100115,"description":27},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100616,"title":100617,"body":100618,"description":27,"extension":28,"meta":100622,"navigation":30,"path":100623,"seo":100624,"stem":100625,"__hash__":100626},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100619,"toc":100620},[],{"title":23,"searchDepth":24,"depth":24,"links":100621},[],{"category":50411},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100617,"description":27},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100628,"title":100629,"body":100630,"description":23,"extension":28,"meta":102638,"navigation":30,"path":102639,"seo":102640,"stem":102641,"__hash__":102642},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100631,"toc":102614},[100632,100635,100639,100642,100645,100651,100654,100677,100680,100714,100717,100758,100762,100765,100858,100861,100905,100908,100925,100928,100942,100945,100948,100993,100996,101033,101037,101040,101046,101051,101071,101075,101078,101144,101147,101165,101169,101172,101201,101211,101217,101221,101224,101230,101241,101245,101248,101278,101281,101561,101564,101567,101578,101581,101584,101606,101613,101616,101634,101637,101640,101654,101662,101665,101691,101697,101700,101703,101713,101725,101745,101754,101774,101784,101808,101821,101835,101840,101881,101898,101923,101935,101955,101961,102006,102025,102042,102055,102071,102078,102090,102099,102134,102155,102180,102193,102217,102232,102257,102260,102281,102290,102293,102304,102308,102311,102317,102329,102336,102340,102343,102355,102358,102372,102375,102385,102395,102398,102438,102441,102445,102451,102454,102468,102472,102475,102508,102512,102515,102538,102546,102549,102555,102561,102564,102567,102595,102599,102602,102608,102611],[10,100633,100629],{"id":100634},"_1环境安装与第一个-mujoco-程序",[14,100636,100638],{"id":100637},"_1目标说明","1.目标说明",[19,100640,100641],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100643,100644],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[93,100646,100649],{"className":100647,"code":100648,"language":5177,"meta":23},[5175],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[99,100650,100648],{"__ignoreMap":23},[19,100652,100653],{},"需要掌握:",[56,100655,100656,100659,100662,100667,100672],{},[59,100657,100658],{},"Fedora 44 下 MuJoCo 的系统依赖",[59,100660,100661],{},"Python 虚拟环境创建",[59,100663,100664],{},[99,100665,100666],{},"mujoco.MjModel",[59,100668,100669],{},[99,100670,100671],{},"mujoco.MjData",[59,100673,100674],{},[99,100675,100676],{},"mujoco.mj_step(model, data)",[19,100678,100679],{},"MuJoCo 中最重要的两个对象:",[250,100681,100682,100692],{},[253,100683,100684],{},[256,100685,100686,100689],{},[259,100687,100688],{"align":23726},"对象",[259,100690,100691],{"align":23726},"含义",[297,100693,100694,100704],{},[256,100695,100696,100701],{},[302,100697,100698],{"align":23726},[99,100699,100700],{},"MjModel",[302,100702,100703],{"align":23726},"模型结构，来自 XML，基本不随时间变化",[256,100705,100706,100711],{},[302,100707,100708],{"align":23726},[99,100709,100710],{},"MjData",[302,100712,100713],{"align":23726},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100715,100716],{},"可以先用一个类比理解：",[250,100718,100719,100729],{},[253,100720,100721],{},[256,100722,100723,100726],{},[259,100724,100725],{"align":23726},"类比",[259,100727,100728],{"align":23726},"MuJoCo 对象",[297,100730,100731,100740,100749],{},[256,100732,100733,100736],{},[302,100734,100735],{"align":23726},"游戏地图和角色配置",[302,100737,100738],{"align":23726},[99,100739,100700],{},[256,100741,100742,100745],{},[302,100743,100744],{"align":23726},"游戏运行到当前帧的状态",[302,100746,100747],{"align":23726},[99,100748,100710],{},[256,100750,100751,100754],{},[302,100752,100753],{"align":23726},"前进一帧",[302,100755,100756],{"align":23726},[99,100757,100676],{},[14,100759,100761],{"id":100760},"_2环境与依赖安装","2.环境与依赖安装",[19,100763,100764],{},"Fedora 44 系统依赖:",[93,100766,100768],{"className":23812,"code":100767,"language":23814,"meta":23,"style":23},"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",[99,100769,100770,100782,100795,100808,100818,100828,100847],{"__ignoreMap":23},[102,100771,100772,100774,100776,100778,100780],{"class":104,"line":105},[102,100773,24567],{"class":1952},[102,100775,26306],{"class":217},[102,100777,23824],{"class":217},[102,100779,26391],{"class":161},[102,100781,24669],{"class":161},[102,100783,100784,100787,100790,100793],{"class":104,"line":24},[102,100785,100786],{"class":217},"  python3",[102,100788,100789],{"class":217}," python3-pip",[102,100791,100792],{"class":217}," python3-virtualenv",[102,100794,24669],{"class":161},[102,100796,100797,100800,100803,100806],{"class":104,"line":1168},[102,100798,100799],{"class":217},"  mesa-libGL",[102,100801,100802],{"class":217}," mesa-libGLU",[102,100804,100805],{"class":217}," mesa-dri-drivers",[102,100807,24669],{"class":161},[102,100809,100810,100813,100816],{"class":104,"line":1183},[102,100811,100812],{"class":217},"  libglvnd-glx",[102,100814,100815],{"class":217}," libglvnd-opengl",[102,100817,24669],{"class":161},[102,100819,100820,100823,100826],{"class":104,"line":1189},[102,100821,100822],{"class":217},"  glfw",[102,100824,100825],{"class":217}," glfw-devel",[102,100827,24669],{"class":161},[102,100829,100830,100833,100836,100839,100842,100845],{"class":104,"line":1203},[102,100831,100832],{"class":217},"  libX11",[102,100834,100835],{"class":217}," libXcursor",[102,100837,100838],{"class":217}," libXi",[102,100840,100841],{"class":217}," libXinerama",[102,100843,100844],{"class":217}," libXrandr",[102,100846,24669],{"class":161},[102,100848,100849,100852,100855],{"class":104,"line":1209},[102,100850,100851],{"class":217},"  gcc",[102,100853,100854],{"class":217}," gcc-c++",[102,100856,100857],{"class":217}," make\n",[19,100859,100860],{},"创建 Python 环境:",[93,100862,100864],{"className":23812,"code":100863,"language":23814,"meta":23,"style":23},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[99,100865,100866,100880,100888],{"__ignoreMap":23},[102,100867,100868,100871,100874,100877],{"class":104,"line":105},[102,100869,100870],{"class":1952},"python3",[102,100872,100873],{"class":161}," -m",[102,100875,100876],{"class":217}," venv",[102,100878,100879],{"class":217}," .venv\n",[102,100881,100882,100885],{"class":104,"line":24},[102,100883,100884],{"class":161},"source",[102,100886,100887],{"class":217}," .venv\u002Fbin\u002Factivate\n",[102,100889,100890,100892,100894,100897,100899,100902],{"class":104,"line":1168},[102,100891,30371],{"class":1952},[102,100893,100873],{"class":161},[102,100895,100896],{"class":217}," pip",[102,100898,23824],{"class":217},[102,100900,100901],{"class":161}," --upgrade",[102,100903,100904],{"class":217}," pip\n",[19,100906,100907],{},"pip 安装:",[93,100909,100911],{"className":23812,"code":100910,"language":23814,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy\n",[99,100912,100913],{"__ignoreMap":23},[102,100914,100915,100917,100919,100922],{"class":104,"line":105},[102,100916,23821],{"class":1952},[102,100918,23824],{"class":217},[102,100920,100921],{"class":217}," \"mujoco>=2.3\"",[102,100923,100924],{"class":217}," numpy\n",[19,100926,100927],{},"安装完成后，先做最小检查：",[93,100929,100931],{"className":23812,"code":100930,"language":23814,"meta":23,"style":23},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[99,100932,100933],{"__ignoreMap":23},[102,100934,100935,100937,100939],{"class":104,"line":105},[102,100936,30371],{"class":1952},[102,100938,30349],{"class":161},[102,100940,100941],{"class":217}," \"import mujoco; print(mujoco.__version__)\"\n",[19,100943,100944],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,100946,100947],{},"conda 安装:",[93,100949,100951],{"className":23812,"code":100950,"language":23814,"meta":23,"style":23},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[99,100952,100953,100973,100983],{"__ignoreMap":23},[102,100954,100955,100957,100959,100961,100964,100967,100970],{"class":104,"line":105},[102,100956,30321],{"class":1952},[102,100958,29167],{"class":217},[102,100960,25106],{"class":161},[102,100962,100963],{"class":217}," mujoco-study",[102,100965,100966],{"class":217}," python=",[102,100968,100969],{"class":161},"3.10",[102,100971,100972],{"class":161}," -y\n",[102,100974,100975,100977,100980],{"class":104,"line":24},[102,100976,30321],{"class":1952},[102,100978,100979],{"class":217}," activate",[102,100981,100982],{"class":217}," mujoco-study\n",[102,100984,100985,100987,100989,100991],{"class":104,"line":1168},[102,100986,23821],{"class":1952},[102,100988,23824],{"class":217},[102,100990,100921],{"class":217},[102,100992,100924],{"class":217},[19,100994,100995],{},"版本冲突说明:",[56,100997,100998,101004,101014,101023],{},[59,100999,101000,101001,28376],{},"不要安装 ",[99,101002,101003],{},"mujoco-py",[59,101005,101006,101007,101009,101010,101013],{},"如果旧项目里同时安装了 ",[99,101008,101003],{}," 和 ",[99,101011,101012],{},"mujoco","，建议新建干净虚拟环境。",[59,101015,101016,101019,101020,28376],{},[99,101017,101018],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[99,101021,101022],{},"~\u002F.mujoco\u002Fmujoco210",[59,101024,101025,101026,82530,101029,101032],{},"离屏渲染可能涉及 OpenGL 后端，",[99,101027,101028],{},"MUJOCO_GL=egl",[99,101030,101031],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101034,101036],{"id":101035},"_3核心概念解释","3.核心概念解释",[19,101038,101039],{},"MuJoCo 的基本执行流程:",[93,101041,101044],{"className":101042,"code":101043,"language":5177,"meta":23},[5175],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[99,101045,101043],{"__ignoreMap":23},[19,101047,101048,101050],{},[99,101049,100700],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101052,101053,101055,101056,325,101059,325,101062,325,101065,325,101068,28376],{},[99,101054,100710],{}," 存放仿真运行时状态，例如 ",[99,101057,101058],{},"data.time",[99,101060,101061],{},"data.qpos",[99,101063,101064],{},"data.qvel",[99,101066,101067],{},"data.ctrl",[99,101069,101070],{},"data.xpos",[73,101072,101074],{"id":101073},"xml-是什么","XML 是什么",[19,101076,101077],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[93,101079,101081],{"className":53058,"code":101080,"language":53060,"meta":23,"style":23},"\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",[99,101082,101083,101105,101136],{"__ignoreMap":23},[102,101084,101085,101087,101089,101091,101093,101095,101098,101100,101103],{"class":104,"line":105},[102,101086,1023],{"class":112},[102,101088,51791],{"class":51291},[102,101090,14910],{"class":1952},[102,101092,158],{"class":112},[102,101094,53482],{"class":217},[102,101096,101097],{"class":1952}," pos",[102,101099,158],{"class":112},[102,101101,101102],{"class":217},"\"0 0 1\"",[102,101104,51298],{"class":112},[102,101106,101107,101109,101112,101114,101116,101119,101121,101123,101125,101128,101130,101133],{"class":104,"line":24},[102,101108,52135],{"class":112},[102,101110,101111],{"class":51291},"geom",[102,101113,14910],{"class":1952},[102,101115,158],{"class":112},[102,101117,101118],{"class":217},"\"box_geom\"",[102,101120,53815],{"class":1952},[102,101122,158],{"class":112},[102,101124,53482],{"class":217},[102,101126,101127],{"class":1952}," size",[102,101129,158],{"class":112},[102,101131,101132],{"class":217},"\"0.1 0.1 0.1\"",[102,101134,101135],{"class":112},"\u002F>\n",[102,101137,101138,101140,101142],{"class":104,"line":1168},[102,101139,51776],{"class":112},[102,101141,51791],{"class":51291},[102,101143,51298],{"class":112},[19,101145,101146],{},"这段意思是：",[56,101148,101149,101155,101162],{},[59,101150,101151,101152,101154],{},"创建一个叫 ",[99,101153,53705],{}," 的刚体。",[59,101156,101157,101158,101161],{},"它初始放在 ",[99,101159,101160],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[59,101163,101164],{},"它里面有一个盒子形状的几何体。",[73,101166,101168],{"id":101167},"timestep-是什么","timestep 是什么",[19,101170,101171],{},"XML 里的：",[93,101173,101175],{"className":53058,"code":101174,"language":53060,"meta":23,"style":23},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[99,101176,101177],{"__ignoreMap":23},[102,101178,101179,101181,101183,101186,101188,101191,101194,101196,101199],{"class":104,"line":105},[102,101180,1023],{"class":112},[102,101182,69157],{"class":51291},[102,101184,101185],{"class":1952}," timestep",[102,101187,158],{"class":112},[102,101189,101190],{"class":217},"\"0.01\"",[102,101192,101193],{"class":1952}," gravity",[102,101195,158],{"class":112},[102,101197,101198],{"class":217},"\"0 0 -9.81\"",[102,101200,101135],{"class":112},[19,101202,101203,101204,101207,101208,101210],{},"表示每调用一次 ",[99,101205,101206],{},"mj_step","，仿真时间前进 ",[99,101209,38977],{}," 秒。循环 100 次，大约就是 1 秒：",[93,101212,101215],{"className":101213,"code":101214,"language":5177,"meta":23},[5175],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[99,101216,101214],{"__ignoreMap":23},[73,101218,101220],{"id":101219},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101222,101223],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[93,101225,101228],{"className":101226,"code":101227,"language":5177,"meta":23},[5175],"x y z qw qx qy qz\n",[99,101229,101227],{"__ignoreMap":23},[19,101231,101232,101233,101236,101237,101240],{},"表示一个自由刚体的位置和姿态。其中 ",[99,101234,101235],{},"x y z"," 是位置，",[99,101238,101239],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101242,101244],{"id":101243},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101246,101247],{},"新建文件:",[93,101249,101251],{"className":23812,"code":101250,"language":23814,"meta":23,"style":23},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[99,101252,101253,101263,101270],{"__ignoreMap":23},[102,101254,101255,101258,101260],{"class":104,"line":105},[102,101256,101257],{"class":1952},"mkdir",[102,101259,29207],{"class":161},[102,101261,101262],{"class":217}," mujoco_tutorial\n",[102,101264,101265,101268],{"class":104,"line":24},[102,101266,101267],{"class":161},"cd",[102,101269,101262],{"class":217},[102,101271,101272,101275],{"class":104,"line":1168},[102,101273,101274],{"class":1952},"touch",[102,101276,101277],{"class":217}," ch1_first_sim.py\n",[19,101279,101280],{},"写入:",[93,101282,101284],{"className":30369,"code":101283,"language":30371,"meta":23,"style":23},"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",[99,101285,101286,101293,101297,101301,101311,101316,101321,101325,101330,101335,101339,101344,101349,101354,101359,101364,101369,101373,101377,101381,101394,101408,101418,101422,101434,101446,101458,101470,101482,101486,101503,101508,101512,101523,101534,101538,101542,101556],{"__ignoreMap":23},[102,101287,101288,101290],{"class":104,"line":105},[102,101289,30383],{"class":108},[102,101291,101292],{"class":112}," mujoco\n",[102,101294,101295],{"class":104,"line":24},[102,101296,2389],{"emptyLinePlaceholder":30},[102,101298,101299],{"class":104,"line":1168},[102,101300,2389],{"emptyLinePlaceholder":30},[102,101302,101303,101306,101308],{"class":104,"line":1183},[102,101304,101305],{"class":161},"XML",[102,101307,13554],{"class":108},[102,101309,101310],{"class":217}," \"\"\"\n",[102,101312,101313],{"class":104,"line":1189},[102,101314,101315],{"class":217},"\u003Cmujoco model=\"first_sim\">\n",[102,101317,101318],{"class":104,"line":1203},[102,101319,101320],{"class":217},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[102,101322,101323],{"class":104,"line":1209},[102,101324,2389],{"emptyLinePlaceholder":30},[102,101326,101327],{"class":104,"line":1300},[102,101328,101329],{"class":217},"  \u003Cworldbody>\n",[102,101331,101332],{"class":104,"line":1306},[102,101333,101334],{"class":217},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[102,101336,101337],{"class":104,"line":1318},[102,101338,2389],{"emptyLinePlaceholder":30},[102,101340,101341],{"class":104,"line":1601},[102,101342,101343],{"class":217},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[102,101345,101346],{"class":104,"line":1606},[102,101347,101348],{"class":217},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[102,101350,101351],{"class":104,"line":1612},[102,101352,101353],{"class":217},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[102,101355,101356],{"class":104,"line":1617},[102,101357,101358],{"class":217},"    \u003C\u002Fbody>\n",[102,101360,101361],{"class":104,"line":1631},[102,101362,101363],{"class":217},"  \u003C\u002Fworldbody>\n",[102,101365,101366],{"class":104,"line":1636},[102,101367,101368],{"class":217},"\u003C\u002Fmujoco>\n",[102,101370,101371],{"class":104,"line":1642},[102,101372,95689],{"class":217},[102,101374,101375],{"class":104,"line":1663},[102,101376,2389],{"emptyLinePlaceholder":30},[102,101378,101379],{"class":104,"line":1668},[102,101380,2389],{"emptyLinePlaceholder":30},[102,101382,101383,101385,101387,101390,101392],{"class":104,"line":1682},[102,101384,31938],{"class":108},[102,101386,1962],{"class":1952},[102,101388,101389],{"class":112},"() -> ",[102,101391,95677],{"class":161},[102,101393,3728],{"class":112},[102,101395,101396,101399,101401,101404,101406],{"class":104,"line":1687},[102,101397,101398],{"class":112},"    model ",[102,101400,158],{"class":108},[102,101402,101403],{"class":112}," mujoco.MjModel.from_xml_string(",[102,101405,101305],{"class":161},[102,101407,119],{"class":112},[102,101409,101410,101413,101415],{"class":104,"line":1716},[102,101411,101412],{"class":112},"    data ",[102,101414,158],{"class":108},[102,101416,101417],{"class":112}," mujoco.MjData(model)\n",[102,101419,101420],{"class":104,"line":1721},[102,101421,2389],{"emptyLinePlaceholder":30},[102,101423,101424,101426,101428,101431],{"class":104,"line":1738},[102,101425,31290],{"class":161},[102,101427,113],{"class":112},[102,101429,101430],{"class":217},"\"nq:\"",[102,101432,101433],{"class":112},", model.nq)\n",[102,101435,101436,101438,101440,101443],{"class":104,"line":1743},[102,101437,31290],{"class":161},[102,101439,113],{"class":112},[102,101441,101442],{"class":217},"\"nv:\"",[102,101444,101445],{"class":112},", model.nv)\n",[102,101447,101448,101450,101452,101455],{"class":104,"line":1748},[102,101449,31290],{"class":161},[102,101451,113],{"class":112},[102,101453,101454],{"class":217},"\"nu:\"",[102,101456,101457],{"class":112},", model.nu)\n",[102,101459,101460,101462,101464,101467],{"class":104,"line":1753},[102,101461,31290],{"class":161},[102,101463,113],{"class":112},[102,101465,101466],{"class":217},"\"initial time:\"",[102,101468,101469],{"class":112},", data.time)\n",[102,101471,101472,101474,101476,101479],{"class":104,"line":1767},[102,101473,31290],{"class":161},[102,101475,113],{"class":112},[102,101477,101478],{"class":217},"\"initial qpos:\"",[102,101480,101481],{"class":112},", data.qpos.copy())\n",[102,101483,101484],{"class":104,"line":1772},[102,101485,2389],{"emptyLinePlaceholder":30},[102,101487,101488,101490,101493,101495,101497,101499,101501],{"class":104,"line":2566},[102,101489,3190],{"class":108},[102,101491,101492],{"class":112}," _ ",[102,101494,26034],{"class":108},[102,101496,32434],{"class":161},[102,101498,113],{"class":112},[102,101500,424],{"class":161},[102,101502,30777],{"class":112},[102,101504,101505],{"class":104,"line":2580},[102,101506,101507],{"class":112},"        mujoco.mj_step(model, data)\n",[102,101509,101510],{"class":104,"line":2588},[102,101511,2389],{"emptyLinePlaceholder":30},[102,101513,101514,101516,101518,101521],{"class":104,"line":2593},[102,101515,31290],{"class":161},[102,101517,113],{"class":112},[102,101519,101520],{"class":217},"\"final time:\"",[102,101522,101469],{"class":112},[102,101524,101525,101527,101529,101532],{"class":104,"line":2599},[102,101526,31290],{"class":161},[102,101528,113],{"class":112},[102,101530,101531],{"class":217},"\"final qpos:\"",[102,101533,101481],{"class":112},[102,101535,101536],{"class":104,"line":2605},[102,101537,2389],{"emptyLinePlaceholder":30},[102,101539,101540],{"class":104,"line":2610},[102,101541,2389],{"emptyLinePlaceholder":30},[102,101543,101544,101546,101548,101551,101554],{"class":104,"line":7938},[102,101545,1520],{"class":108},[102,101547,31211],{"class":161},[102,101549,101550],{"class":108}," ==",[102,101552,101553],{"class":217}," \"__main__\"",[102,101555,3728],{"class":112},[102,101557,101558],{"class":104,"line":7962},[102,101559,101560],{"class":112},"    main()\n",[73,101562,101563],{"id":101563},"代码逐段解释",[19,101565,101566],{},"导入库：",[93,101568,101570],{"className":30369,"code":101569,"language":30371,"meta":23,"style":23},"import mujoco\n",[99,101571,101572],{"__ignoreMap":23},[102,101573,101574,101576],{"class":104,"line":105},[102,101575,30383],{"class":108},[102,101577,101292],{"class":112},[19,101579,101580],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101582,101583],{},"定义 XML：",[93,101585,101587],{"className":30369,"code":101586,"language":30371,"meta":23,"style":23},"XML = \"\"\"\n...\n\"\"\"\n",[99,101588,101589,101597,101602],{"__ignoreMap":23},[102,101590,101591,101593,101595],{"class":104,"line":105},[102,101592,101305],{"class":161},[102,101594,13554],{"class":108},[102,101596,101310],{"class":217},[102,101598,101599],{"class":104,"line":24},[102,101600,101601],{"class":217},"...\n",[102,101603,101604],{"class":104,"line":1168},[102,101605,95689],{"class":217},[19,101607,101608,101609,101612],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[99,101610,101611],{},"freejoint"," 的方块。",[19,101614,101615],{},"编译模型：",[93,101617,101619],{"className":30369,"code":101618,"language":30371,"meta":23,"style":23},"model = mujoco.MjModel.from_xml_string(XML)\n",[99,101620,101621],{"__ignoreMap":23},[102,101622,101623,101626,101628,101630,101632],{"class":104,"line":105},[102,101624,101625],{"class":112},"model ",[102,101627,158],{"class":108},[102,101629,101403],{"class":112},[102,101631,101305],{"class":161},[102,101633,119],{"class":112},[19,101635,101636],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101638,101639],{},"创建数据：",[93,101641,101643],{"className":30369,"code":101642,"language":30371,"meta":23,"style":23},"data = mujoco.MjData(model)\n",[99,101644,101645],{"__ignoreMap":23},[102,101646,101647,101650,101652],{"class":104,"line":105},[102,101648,101649],{"class":112},"data ",[102,101651,158],{"class":108},[102,101653,101417],{"class":112},[19,101655,101656,101658,101659,101661],{},[99,101657,33392],{}," 会保存仿真当前状态。刚创建时，时间是 ",[99,101660,304],{},"，方块还在初始位置。",[19,101663,101664],{},"推进仿真：",[93,101666,101668],{"className":30369,"code":101667,"language":30371,"meta":23,"style":23},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[99,101669,101670,101686],{"__ignoreMap":23},[102,101671,101672,101674,101676,101678,101680,101682,101684],{"class":104,"line":105},[102,101673,3014],{"class":108},[102,101675,101492],{"class":112},[102,101677,26034],{"class":108},[102,101679,32434],{"class":161},[102,101681,113],{"class":112},[102,101683,424],{"class":161},[102,101685,30777],{"class":112},[102,101687,101688],{"class":104,"line":24},[102,101689,101690],{"class":112},"    mujoco.mj_step(model, data)\n",[19,101692,101693,101694,101696],{},"每次 ",[99,101695,101206],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[73,101698,101699],{"id":101699},"代码逐行细讲",[19,101701,101702],{},"下面把完整代码按新手视角拆开讲。",[93,101704,101705],{"className":30369,"code":101569,"language":30371,"meta":23,"style":23},[99,101706,101707],{"__ignoreMap":23},[102,101708,101709,101711],{"class":104,"line":105},[102,101710,30383],{"class":108},[102,101712,101292],{"class":112},[19,101714,101715,101717,101718,325,101720,325,101722,28376],{},[99,101716,30383],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[99,101719,100666],{},[99,101721,100671],{},[99,101723,101724],{},"mujoco.mj_step",[93,101726,101727],{"className":30369,"code":101586,"language":30371,"meta":23,"style":23},[99,101728,101729,101737,101741],{"__ignoreMap":23},[102,101730,101731,101733,101735],{"class":104,"line":105},[102,101732,101305],{"class":161},[102,101734,13554],{"class":108},[102,101736,101310],{"class":217},[102,101738,101739],{"class":104,"line":24},[102,101740,101601],{"class":217},[102,101742,101743],{"class":104,"line":1168},[102,101744,95689],{"class":217},[19,101746,101747,101749,101750,101753],{},[99,101748,101305],{}," 是一个变量名。右边的三引号 ",[99,101751,101752],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[93,101755,101756],{"className":53058,"code":101315,"language":53060,"meta":23,"style":23},[99,101757,101758],{"__ignoreMap":23},[102,101759,101760,101762,101764,101767,101769,101772],{"class":104,"line":105},[102,101761,1023],{"class":112},[102,101763,101012],{"class":51291},[102,101765,101766],{"class":1952}," model",[102,101768,158],{"class":112},[102,101770,101771],{"class":217},"\"first_sim\"",[102,101773,51298],{"class":112},[19,101775,101776,101777,101780,101781,28376],{},"这是 XML 的根标签。",[99,101778,101779],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[99,101782,101783],{},"first_sim",[93,101785,101786],{"className":53058,"code":101174,"language":53060,"meta":23,"style":23},[99,101787,101788],{"__ignoreMap":23},[102,101789,101790,101792,101794,101796,101798,101800,101802,101804,101806],{"class":104,"line":105},[102,101791,1023],{"class":112},[102,101793,69157],{"class":51291},[102,101795,101185],{"class":1952},[102,101797,158],{"class":112},[102,101799,101190],{"class":217},[102,101801,101193],{"class":1952},[102,101803,158],{"class":112},[102,101805,101198],{"class":217},[102,101807,101135],{"class":112},[19,101809,101810,101812,101813,101816,101817,101820],{},[99,101811,69157],{}," 用来设置仿真参数。",[99,101814,101815],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[99,101818,101819],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[93,101822,101824],{"className":53058,"code":101823,"language":53060,"meta":23,"style":23},"\u003Cworldbody>\n",[99,101825,101826],{"__ignoreMap":23},[102,101827,101828,101830,101833],{"class":104,"line":105},[102,101829,1023],{"class":112},[102,101831,101832],{"class":51291},"worldbody",[102,101834,51298],{"class":112},[19,101836,101837,101839],{},[99,101838,101832],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[93,101841,101843],{"className":53058,"code":101842,"language":53060,"meta":23,"style":23},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[99,101844,101845],{"__ignoreMap":23},[102,101846,101847,101849,101851,101853,101855,101858,101860,101862,101865,101867,101869,101872,101874,101876,101879],{"class":104,"line":105},[102,101848,1023],{"class":112},[102,101850,101111],{"class":51291},[102,101852,14910],{"class":1952},[102,101854,158],{"class":112},[102,101856,101857],{"class":217},"\"floor\"",[102,101859,53815],{"class":1952},[102,101861,158],{"class":112},[102,101863,101864],{"class":217},"\"plane\"",[102,101866,101127],{"class":1952},[102,101868,158],{"class":112},[102,101870,101871],{"class":217},"\"2 2 0.1\"",[102,101873,78758],{"class":1952},[102,101875,158],{"class":112},[102,101877,101878],{"class":217},"\"0.8 0.8 0.8 1\"",[102,101880,101135],{"class":112},[19,101882,101883,101884,101886,101887,101890,101891,101894,101895,101897],{},"这行创建地面。",[99,101885,101111],{}," 是几何体。",[99,101888,101889],{},"name=\"floor\""," 是名字。",[99,101892,101893],{},"type=\"plane\""," 表示平面。",[99,101896,55101],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[93,101899,101901],{"className":53058,"code":101900,"language":53060,"meta":23,"style":23},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[99,101902,101903],{"__ignoreMap":23},[102,101904,101905,101907,101909,101911,101913,101915,101917,101919,101921],{"class":104,"line":105},[102,101906,1023],{"class":112},[102,101908,51791],{"class":51291},[102,101910,14910],{"class":1952},[102,101912,158],{"class":112},[102,101914,53482],{"class":217},[102,101916,101097],{"class":1952},[102,101918,158],{"class":112},[102,101920,101102],{"class":217},[102,101922,51298],{"class":112},[19,101924,101925,101926,28376,101928,101931,101932,101934],{},"这行创建一个刚体，名字叫 ",[99,101927,53705],{},[99,101929,101930],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[99,101933,101160],{},"，也就是离地面 1 米高。",[93,101936,101938],{"className":53058,"code":101937,"language":53060,"meta":23,"style":23},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[99,101939,101940],{"__ignoreMap":23},[102,101941,101942,101944,101946,101948,101950,101953],{"class":104,"line":105},[102,101943,1023],{"class":112},[102,101945,101611],{"class":51291},[102,101947,14910],{"class":1952},[102,101949,158],{"class":112},[102,101951,101952],{"class":217},"\"box_free\"",[102,101954,101135],{"class":112},[19,101956,101957,101958,101960],{},"这行很重要。",[99,101959,101611],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[93,101962,101964],{"className":53058,"code":101963,"language":53060,"meta":23,"style":23},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[99,101965,101966],{"__ignoreMap":23},[102,101967,101968,101970,101972,101974,101976,101978,101980,101982,101984,101986,101988,101990,101993,101995,101997,101999,102001,102004],{"class":104,"line":105},[102,101969,1023],{"class":112},[102,101971,101111],{"class":51291},[102,101973,14910],{"class":1952},[102,101975,158],{"class":112},[102,101977,101118],{"class":217},[102,101979,53815],{"class":1952},[102,101981,158],{"class":112},[102,101983,53482],{"class":217},[102,101985,101127],{"class":1952},[102,101987,158],{"class":112},[102,101989,101132],{"class":217},[102,101991,101992],{"class":1952}," mass",[102,101994,158],{"class":112},[102,101996,3667],{"class":217},[102,101998,78758],{"class":1952},[102,102000,158],{"class":112},[102,102002,102003],{"class":217},"\"1 0 0 1\"",[102,102005,101135],{"class":112},[19,102007,102008,102009,102012,102013,102016,102017,102020,102021,102024],{},"这行给 box body 添加一个盒子形状。",[99,102010,102011],{},"type=\"box\""," 表示形状是盒子。",[99,102014,102015],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[99,102018,102019],{},"mass=\"1\""," 表示质量是 1。",[99,102022,102023],{},"rgba=\"1 0 0 1\""," 表示红色。",[93,102026,102028],{"className":30369,"code":102027,"language":30371,"meta":23,"style":23},"def main() -> None:\n",[99,102029,102030],{"__ignoreMap":23},[102,102031,102032,102034,102036,102038,102040],{"class":104,"line":105},[102,102033,31938],{"class":108},[102,102035,1962],{"class":1952},[102,102037,101389],{"class":112},[102,102039,95677],{"class":161},[102,102041,3728],{"class":112},[19,102043,102044,102046,102047,102050,102051,102054],{},[99,102045,31938],{}," 用来定义函数。这里定义了一个叫 ",[99,102048,102049],{},"main"," 的函数。",[99,102052,102053],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[93,102056,102057],{"className":30369,"code":101618,"language":30371,"meta":23,"style":23},[99,102058,102059],{"__ignoreMap":23},[102,102060,102061,102063,102065,102067,102069],{"class":104,"line":105},[102,102062,101625],{"class":112},[102,102064,158],{"class":108},[102,102066,101403],{"class":112},[102,102068,101305],{"class":161},[102,102070,119],{"class":112},[19,102072,102073,102074,102077],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[99,102075,102076],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[93,102079,102080],{"className":30369,"code":101642,"language":30371,"meta":23,"style":23},[99,102081,102082],{"__ignoreMap":23},[102,102083,102084,102086,102088],{"class":104,"line":105},[102,102085,101649],{"class":112},[102,102087,158],{"class":108},[102,102089,101417],{"class":112},[19,102091,102092,102093,102095,102096,102098],{},"这行创建仿真数据。",[99,102094,33392],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[99,102097,33392],{}," 都会变化。",[93,102100,102102],{"className":30369,"code":102101,"language":30371,"meta":23,"style":23},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[99,102103,102104,102114,102124],{"__ignoreMap":23},[102,102105,102106,102108,102110,102112],{"class":104,"line":105},[102,102107,30406],{"class":161},[102,102109,113],{"class":112},[102,102111,101430],{"class":217},[102,102113,101433],{"class":112},[102,102115,102116,102118,102120,102122],{"class":104,"line":24},[102,102117,30406],{"class":161},[102,102119,113],{"class":112},[102,102121,101442],{"class":217},[102,102123,101445],{"class":112},[102,102125,102126,102128,102130,102132],{"class":104,"line":1168},[102,102127,30406],{"class":161},[102,102129,113],{"class":112},[102,102131,101454],{"class":217},[102,102133,101457],{"class":112},[19,102135,102136,102138,102139,102142,102143,102146,102147,102150,102151,102154],{},[99,102137,30406],{}," 用来输出信息。",[99,102140,102141],{},"model.nq"," 是位置变量数量，",[99,102144,102145],{},"model.nv"," 是速度变量数量，",[99,102148,102149],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[99,102152,102153],{},"nu"," 是 0。",[93,102156,102158],{"className":30369,"code":102157,"language":30371,"meta":23,"style":23},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[99,102159,102160,102170],{"__ignoreMap":23},[102,102161,102162,102164,102166,102168],{"class":104,"line":105},[102,102163,30406],{"class":161},[102,102165,113],{"class":112},[102,102167,101466],{"class":217},[102,102169,101469],{"class":112},[102,102171,102172,102174,102176,102178],{"class":104,"line":24},[102,102173,30406],{"class":161},[102,102175,113],{"class":112},[102,102177,101478],{"class":217},[102,102179,101481],{"class":112},[19,102181,102182,102183,102185,102186,102188,102189,102192],{},"这里打印初始时间和初始位置。",[99,102184,101058],{}," 一开始是 0。",[99,102187,101061],{}," 是位置数组。",[99,102190,102191],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[93,102194,102195],{"className":30369,"code":101667,"language":30371,"meta":23,"style":23},[99,102196,102197,102213],{"__ignoreMap":23},[102,102198,102199,102201,102203,102205,102207,102209,102211],{"class":104,"line":105},[102,102200,3014],{"class":108},[102,102202,101492],{"class":112},[102,102204,26034],{"class":108},[102,102206,32434],{"class":161},[102,102208,113],{"class":112},[102,102210,424],{"class":161},[102,102212,30777],{"class":112},[102,102214,102215],{"class":104,"line":24},[102,102216,101690],{"class":112},[19,102218,102219,102221,102222,102225,102226,102228,102229,102231],{},[99,102220,3014],{}," 是循环。",[99,102223,102224],{},"range(100)"," 表示循环 100 次。",[99,102227,1105],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[99,102230,101206],{},"，仿真就前进一步。",[93,102233,102235],{"className":30369,"code":102234,"language":30371,"meta":23,"style":23},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[99,102236,102237,102247],{"__ignoreMap":23},[102,102238,102239,102241,102243,102245],{"class":104,"line":105},[102,102240,30406],{"class":161},[102,102242,113],{"class":112},[102,102244,101520],{"class":217},[102,102246,101469],{"class":112},[102,102248,102249,102251,102253,102255],{"class":104,"line":24},[102,102250,30406],{"class":161},[102,102252,113],{"class":112},[102,102254,101531],{"class":217},[102,102256,101481],{"class":112},[19,102258,102259],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[93,102261,102263],{"className":30369,"code":102262,"language":30371,"meta":23,"style":23},"if __name__ == \"__main__\":\n    main()\n",[99,102264,102265,102277],{"__ignoreMap":23},[102,102266,102267,102269,102271,102273,102275],{"class":104,"line":105},[102,102268,1520],{"class":108},[102,102270,31211],{"class":161},[102,102272,101550],{"class":108},[102,102274,101553],{"class":217},[102,102276,3728],{"class":112},[102,102278,102279],{"class":104,"line":24},[102,102280,101560],{"class":112},[19,102282,102283,102284,102287,102288,28376],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[99,102285,102286],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[99,102289,102286],{},[19,102291,102292],{},"运行:",[93,102294,102296],{"className":23812,"code":102295,"language":23814,"meta":23,"style":23},"python ch1_first_sim.py\n",[99,102297,102298],{"__ignoreMap":23},[102,102299,102300,102302],{"class":104,"line":105},[102,102301,30371],{"class":1952},[102,102303,101277],{"class":217},[14,102305,102307],{"id":102306},"_5运行结果说明","5.运行结果说明",[19,102309,102310],{},"你应该看到类似输出:",[93,102312,102315],{"className":102313,"code":102314,"language":5177,"meta":23},[5175],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[99,102316,102314],{"__ignoreMap":23},[19,102318,102319,102321,102322,102325,102326,28376],{},[99,102320,101611],{}," 有 7 个位置变量: ",[99,102323,102324],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[99,102327,102328],{},"vx vy vz wx wy wz",[19,102330,102331,102332,102335],{},"你还会看到 ",[99,102333,102334],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102337,102339],{"id":102338},"_6验证步骤","6.验证步骤",[19,102341,102342],{},"确认版本:",[93,102344,102345],{"className":23812,"code":100930,"language":23814,"meta":23,"style":23},[99,102346,102347],{"__ignoreMap":23},[102,102348,102349,102351,102353],{"class":104,"line":105},[102,102350,30371],{"class":1952},[102,102352,30349],{"class":161},[102,102354,100941],{"class":217},[19,102356,102357],{},"确认导入的是官方 bindings:",[93,102359,102361],{"className":23812,"code":102360,"language":23814,"meta":23,"style":23},"python -c \"import mujoco; print(mujoco)\"\n",[99,102362,102363],{"__ignoreMap":23},[102,102364,102365,102367,102369],{"class":104,"line":105},[102,102366,30371],{"class":1952},[102,102368,30349],{"class":161},[102,102370,102371],{"class":217}," \"import mujoco; print(mujoco)\"\n",[19,102373,102374],{},"运行程序:",[93,102376,102377],{"className":23812,"code":102295,"language":23814,"meta":23,"style":23},[99,102378,102379],{"__ignoreMap":23},[102,102380,102381,102383],{"class":104,"line":105},[102,102382,30371],{"class":1952},[102,102384,101277],{"class":217},[19,102386,102387,102388,102391,102392,28376],{},"检查 ",[99,102389,102390],{},"final time"," 是否约等于 ",[99,102393,102394],{},"1.0",[19,102396,102397],{},"再做几个小实验：",[56,102399,102400,102410,102418,102431],{},[59,102401,102402,102403,102405,102406,102409],{},"把 ",[99,102404,101930],{}," 改成 ",[99,102407,102408],{},"pos=\"0 0 2\"","，观察初始高度变化。",[59,102411,102402,102412,102405,102414,102417],{},[99,102413,101819],{},[99,102415,102416],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[59,102419,102402,102420,102405,102422,102425,102426,102428,102429,28376],{},[99,102421,101815],{},[99,102423,102424],{},"timestep=\"0.005\"","，观察 100 步后的 ",[99,102427,102390],{}," 是否变成约 ",[99,102430,35320],{},[59,102432,102433,102434,102437],{},"删除 ",[99,102435,102436],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102439,102440],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102442,102444],{"id":102443},"_7常见错误与解决方案","7.常见错误与解决方案",[73,102446,102448],{"id":102447},"modulenotfounderror-no-module-named-mujoco",[99,102449,102450],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102452,102453],{},"解决:",[93,102455,102457],{"className":23812,"code":102456,"language":23814,"meta":23,"style":23},"pip install \"mujoco>=2.3\"\n",[99,102458,102459],{"__ignoreMap":23},[102,102460,102461,102463,102465],{"class":104,"line":105},[102,102462,23821],{"class":1952},[102,102464,23824],{"class":217},[102,102466,102467],{"class":217}," \"mujoco>=2.3\"\n",[73,102469,102471],{"id":102470},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102473,102474],{},"先安装系统依赖:",[93,102476,102478],{"className":23812,"code":102477,"language":23814,"meta":23,"style":23},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[99,102479,102480],{"__ignoreMap":23},[102,102481,102482,102484,102486,102488,102490,102493,102495,102498,102500,102503,102505],{"class":104,"line":105},[102,102483,24567],{"class":1952},[102,102485,26306],{"class":217},[102,102487,23824],{"class":217},[102,102489,26391],{"class":161},[102,102491,102492],{"class":217}," mesa-libGL",[102,102494,100805],{"class":217},[102,102496,102497],{"class":217}," glfw",[102,102499,100825],{"class":217},[102,102501,102502],{"class":217}," libX11",[102,102504,100838],{"class":217},[102,102506,102507],{"class":217}," libXrandr\n",[73,102509,102511],{"id":102510},"xml-解析失败","XML 解析失败",[19,102513,102514],{},"检查:",[56,102516,102517,102520,102523,102529],{},[59,102518,102519],{},"标签是否闭合",[59,102521,102522],{},"属性是否带引号",[59,102524,102525,102526],{},"根节点是否是 ",[99,102527,102528],{},"\u003Cmujoco>",[59,102530,102531,102533,102534,102537],{},[99,102532,51791],{}," 是否放在 ",[99,102535,102536],{},"\u003Cworldbody>"," 内部",[73,102539,102541,102543,102544],{"id":102540},"final-time-不是严格等于-10",[99,102542,102390],{}," 不是严格等于 ",[99,102545,102394],{},[19,102547,102548],{},"这通常不是错误。浮点数计算可能得到：",[93,102550,102553],{"className":102551,"code":102552,"language":5177,"meta":23},[5175],"1.0000000000000007\n",[99,102554,102552],{"__ignoreMap":23},[19,102556,102557,102558,102560],{},"只要接近 ",[99,102559,102394],{}," 就正常。",[73,102562,102563],{"id":102563},"方块没有掉下来",[19,102565,102566],{},"检查：",[56,102568,102569,102575,102581,102586],{},[59,102570,102571,102572],{},"方块 body 里是否有 ",[99,102573,102574],{},"\u003Cfreejoint\u002F>",[59,102576,102577,102578],{},"重力是否是 ",[99,102579,102580],{},"0 0 -9.81",[59,102582,102583,102584],{},"是否真的调用了 ",[99,102585,100676],{},[59,102587,102588,102589,102591,102592],{},"你看的是否是 ",[99,102590,102334],{},"，不是 ",[99,102593,102594],{},"initial qpos",[14,102596,102598],{"id":102597},"_8本章小结","8.本章小结",[19,102600,102601],{},"本章你已经完成了 MuJoCo 的最小闭环：",[93,102603,102606],{"className":102604,"code":102605,"language":5177,"meta":23},[5175],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[99,102607,102605],{"__ignoreMap":23},[19,102609,102610],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5116,102612,102613],{},"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":23,"searchDepth":24,"depth":24,"links":102615},[102616,102617,102618,102623,102627,102628,102629,102637],{"id":100637,"depth":24,"text":100638},{"id":100760,"depth":24,"text":100761},{"id":101035,"depth":24,"text":101036,"children":102619},[102620,102621,102622],{"id":101073,"depth":1168,"text":101074},{"id":101167,"depth":1168,"text":101168},{"id":101219,"depth":1168,"text":101220},{"id":101243,"depth":24,"text":101244,"children":102624},[102625,102626],{"id":101563,"depth":1168,"text":101563},{"id":101699,"depth":1168,"text":101699},{"id":102306,"depth":24,"text":102307},{"id":102338,"depth":24,"text":102339},{"id":102443,"depth":24,"text":102444,"children":102630},[102631,102632,102633,102634,102636],{"id":102447,"depth":1168,"text":102450},{"id":102470,"depth":1168,"text":102471},{"id":102510,"depth":1168,"text":102511},{"id":102540,"depth":1168,"text":102635},"final time 不是严格等于 1.0",{"id":102563,"depth":1168,"text":102563},{"id":102597,"depth":24,"text":102598},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100629,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102644,"title":102645,"body":102646,"description":23,"extension":28,"meta":104302,"navigation":30,"path":104303,"seo":104304,"stem":104305,"__hash__":104306},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102647,"toc":104278},[102648,102651,102653,102656,102659,102676,102771,102774,102780,102782,102784,102808,102811,102825,102828,102869,102871,102884,102886,102889,102937,102949,102952,102955,102961,102974,103041,103044,103063,103066,103069,103075,103077,103086,103089,103093,103102,103184,103193,103197,103203,103217,103227,103229,103559,103562,103574,103576,103587,103589,103592,103610,103613,103616,103634,103645,103648,103663,103673,103675,103696,103713,103733,103739,103779,103795,103811,103817,103820,103844,103860,103865,103895,103912,103937,103940,103955,103964,103979,103988,104003,104010,104012,104022,104035,104042,104045,104084,104091,104093,104145,104147,104153,104156,104163,104170,104173,104175,104193,104196,104199,104233,104245,104247,104250,104272,104275],[10,102649,102645],{"id":102650},"_2xml-与-mjcf-物理建模基础",[14,102652,100638],{"id":100637},[19,102654,102655],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102657,102658],{},"本章结束后，你应该能看懂一个简单模型里：",[56,102660,102661,102664,102667,102670,102673],{},[59,102662,102663],{},"地面在哪里。",[59,102665,102666],{},"物体初始位置在哪里。",[59,102668,102669],{},"几何体是什么形状。",[59,102671,102672],{},"哪些 body 可以自由运动。",[59,102674,102675],{},"如何用名字在 Python 里找到 XML 中的对象。",[250,102677,102678,102688],{},[253,102679,102680],{},[256,102681,102682,102685],{},[259,102683,102684],{"align":23726},"标签",[259,102686,102687],{"align":23726},"作用",[297,102689,102690,102699,102709,102718,102728,102738,102751,102761],{},[256,102691,102692,102696],{},[302,102693,102694],{"align":23726},[99,102695,102528],{},[302,102697,102698],{"align":23726},"根节点",[256,102700,102701,102706],{},[302,102702,102703],{"align":23726},[99,102704,102705],{},"\u003Coption>",[302,102707,102708],{"align":23726},"仿真参数",[256,102710,102711,102715],{},[302,102712,102713],{"align":23726},[99,102714,102536],{},[302,102716,102717],{"align":23726},"世界中的物体",[256,102719,102720,102725],{},[302,102721,102722],{"align":23726},[99,102723,102724],{},"\u003Cbody>",[302,102726,102727],{"align":23726},"刚体",[256,102729,102730,102735],{},[302,102731,102732],{"align":23726},[99,102733,102734],{},"\u003Cgeom>",[302,102736,102737],{"align":23726},"几何体、碰撞体、可视体",[256,102739,102740,102748],{},[302,102741,102742,24969,102745],{"align":23726},[99,102743,102744],{},"\u003Cjoint>",[99,102746,102747],{},"\u003Cfreejoint>",[302,102749,102750],{"align":23726},"关节",[256,102752,102753,102758],{},[302,102754,102755],{"align":23726},[99,102756,102757],{},"\u003Csite>",[302,102759,102760],{"align":23726},"标记点",[256,102762,102763,102768],{},[302,102764,102765],{"align":23726},[99,102766,102767],{},"\u003Cactuator>",[302,102769,102770],{"align":23726},"控制器",[19,102772,102773],{},"初学时可以先记住：",[93,102775,102778],{"className":102776,"code":102777,"language":5177,"meta":23},[5175],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[99,102779,102777],{"__ignoreMap":23},[14,102781,100761],{"id":100760},[19,102783,100764],{},[93,102785,102787],{"className":23812,"code":102786,"language":23814,"meta":23,"style":23},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[99,102788,102789],{"__ignoreMap":23},[102,102790,102791,102793,102795,102797,102799,102801,102803,102805],{"class":104,"line":105},[102,102792,24567],{"class":1952},[102,102794,26306],{"class":217},[102,102796,23824],{"class":217},[102,102798,26391],{"class":161},[102,102800,102492],{"class":217},[102,102802,100805],{"class":217},[102,102804,102497],{"class":217},[102,102806,102807],{"class":217}," glfw-devel\n",[19,102809,102810],{},"pip:",[93,102812,102813],{"className":23812,"code":100910,"language":23814,"meta":23,"style":23},[99,102814,102815],{"__ignoreMap":23},[102,102816,102817,102819,102821,102823],{"class":104,"line":105},[102,102818,23821],{"class":1952},[102,102820,23824],{"class":217},[102,102822,100921],{"class":217},[102,102824,100924],{"class":217},[19,102826,102827],{},"conda:",[93,102829,102831],{"className":23812,"code":102830,"language":23814,"meta":23,"style":23},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[99,102832,102833,102850,102859],{"__ignoreMap":23},[102,102834,102835,102837,102839,102841,102844,102846,102848],{"class":104,"line":105},[102,102836,30321],{"class":1952},[102,102838,29167],{"class":217},[102,102840,25106],{"class":161},[102,102842,102843],{"class":217}," mujoco-xml",[102,102845,100966],{"class":217},[102,102847,100969],{"class":161},[102,102849,100972],{"class":161},[102,102851,102852,102854,102856],{"class":104,"line":24},[102,102853,30321],{"class":1952},[102,102855,100979],{"class":217},[102,102857,102858],{"class":217}," mujoco-xml\n",[102,102860,102861,102863,102865,102867],{"class":104,"line":1168},[102,102862,23821],{"class":1952},[102,102864,23824],{"class":217},[102,102866,100921],{"class":217},[102,102868,100924],{"class":217},[19,102870,100995],{},[56,102872,102873,102876,102881],{},[59,102874,102875],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[59,102877,102878,102879,28376],{},"本章使用基础标签，适用于 ",[99,102880,101018],{},[59,102882,102883],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,102885,101036],{"id":101035},[19,102887,102888],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[93,102890,102892],{"className":53058,"code":102891,"language":53060,"meta":23,"style":23},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[99,102893,102894,102908,102916,102921,102929],{"__ignoreMap":23},[102,102895,102896,102898,102900,102902,102904,102906],{"class":104,"line":105},[102,102897,1023],{"class":112},[102,102899,101012],{"class":51291},[102,102901,101766],{"class":1952},[102,102903,158],{"class":112},[102,102905,62670],{"class":217},[102,102907,51298],{"class":112},[102,102909,102910,102912,102914],{"class":104,"line":24},[102,102911,52135],{"class":112},[102,102913,101832],{"class":51291},[102,102915,51298],{"class":112},[102,102917,102918],{"class":104,"line":1168},[102,102919,102920],{"class":112},"    ...\n",[102,102922,102923,102925,102927],{"class":104,"line":1183},[102,102924,52408],{"class":112},[102,102926,101832],{"class":51291},[102,102928,51298],{"class":112},[102,102930,102931,102933,102935],{"class":104,"line":1189},[102,102932,51776],{"class":112},[102,102934,101012],{"class":51291},[102,102936,51298],{"class":112},[19,102938,102939,102941,102942,102944,102945,102948],{},[99,102940,51791],{}," 表示刚体。",[99,102943,101111],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[99,102946,102947],{},"joint"," 表示刚体相对父刚体如何运动。",[73,102950,102951],{"id":102951},"层级结构非常重要",[19,102953,102954],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[93,102956,102959],{"className":102957,"code":102958,"language":5177,"meta":23},[5175],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[99,102960,102958],{"__ignoreMap":23},[19,102962,102963,101009,102966,102969,102970,102973],{},[99,102964,102965],{},"red_box_geom",[99,102967,102968],{},"box_center"," 都属于 ",[99,102971,102972],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[93,102975,102977],{"className":53058,"code":102976,"language":53060,"meta":23,"style":23},"\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",[99,102978,102979,102999,103013,103033],{"__ignoreMap":23},[102,102980,102981,102983,102985,102987,102989,102991,102993,102995,102997],{"class":104,"line":105},[102,102982,1023],{"class":112},[102,102984,51791],{"class":51291},[102,102986,14910],{"class":1952},[102,102988,158],{"class":112},[102,102990,53482],{"class":217},[102,102992,101097],{"class":1952},[102,102994,158],{"class":112},[102,102996,101102],{"class":217},[102,102998,51298],{"class":112},[102,103000,103001,103003,103005,103007,103009,103011],{"class":104,"line":24},[102,103002,52135],{"class":112},[102,103004,101611],{"class":51291},[102,103006,14910],{"class":1952},[102,103008,158],{"class":112},[102,103010,101952],{"class":217},[102,103012,101135],{"class":112},[102,103014,103015,103017,103019,103021,103023,103025,103027,103029,103031],{"class":104,"line":1168},[102,103016,52135],{"class":112},[102,103018,101111],{"class":51291},[102,103020,53815],{"class":1952},[102,103022,158],{"class":112},[102,103024,53482],{"class":217},[102,103026,101127],{"class":1952},[102,103028,158],{"class":112},[102,103030,101132],{"class":217},[102,103032,101135],{"class":112},[102,103034,103035,103037,103039],{"class":104,"line":1183},[102,103036,51776],{"class":112},[102,103038,51791],{"class":51291},[102,103040,51298],{"class":112},[19,103042,103043],{},"含义:",[56,103045,103046,103052,103057,103060],{},[59,103047,103048,103049,103051],{},"创建名为 ",[99,103050,53705],{}," 的刚体",[59,103053,103054,103055],{},"初始位置在世界坐标 ",[99,103056,101160],{},[59,103058,103059],{},"它有一个自由关节",[59,103061,103062],{},"它有一个盒子几何体",[73,103064,103065],{"id":103065},"坐标怎么理解",[19,103067,103068],{},"MuJoCo 默认使用三维坐标：",[93,103070,103073],{"className":103071,"code":103072,"language":5177,"meta":23},[5175],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[99,103074,103072],{"__ignoreMap":23},[19,103076,14623],{},[93,103078,103080],{"className":53058,"code":103079,"language":53060,"meta":23,"style":23},"pos=\"0 0 1\"\n",[99,103081,103082],{"__ignoreMap":23},[102,103083,103084],{"class":104,"line":105},[102,103085,103079],{"class":112},[19,103087,103088],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[73,103090,103092],{"id":103091},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103094,103095,103096,82521,103099,103101],{},"不同 ",[99,103097,103098],{},"type",[99,103100,31487],{}," 含义不同：",[250,103103,103104,103119],{},[253,103105,103106],{},[256,103107,103108,103112,103117],{},[259,103109,103110],{"align":23726},[99,103111,103098],{},[259,103113,103114,103116],{"align":23726},[99,103115,31487],{}," 示例",[259,103118,100691],{"align":23726},[297,103120,103121,103135,103150,103169],{},[256,103122,103123,103127,103132],{},[302,103124,103125],{"align":23726},[99,103126,53705],{},[302,103128,103129],{"align":23726},[99,103130,103131],{},"size=\"0.1 0.2 0.3\"",[302,103133,103134],{"align":23726},"x\u002Fy\u002Fz 半边长，不是完整长度",[256,103136,103137,103142,103147],{},[302,103138,103139],{"align":23726},[99,103140,103141],{},"sphere",[302,103143,103144],{"align":23726},[99,103145,103146],{},"size=\"0.1\"",[302,103148,103149],{"align":23726},"球半径",[256,103151,103152,103157,103162],{},[302,103153,103154],{"align":23726},[99,103155,103156],{},"capsule",[302,103158,103159],{"align":23726},[99,103160,103161],{},"size=\"0.03\"",[302,103163,103164,103165,103168],{"align":23726},"胶囊半径，长度常用 ",[99,103166,103167],{},"fromto"," 指定",[256,103170,103171,103176,103181],{},[302,103172,103173],{"align":23726},[99,103174,103175],{},"plane",[302,103177,103178],{"align":23726},[99,103179,103180],{},"size=\"3 3 0.1\"",[302,103182,103183],{"align":23726},"可视平面大小，通常当地面",[19,103185,103186,103187,103189,103190,103192],{},"最容易踩坑的是 box：",[99,103188,102015],{}," 表示边长大约是 ",[99,103191,32028],{},"，因为 MuJoCo 用的是半边长。",[73,103194,103196],{"id":103195},"site-是什么","site 是什么",[19,103198,103199,103202],{},[99,103200,103201],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[56,103204,103205,103208,103211,103214],{},[59,103206,103207],{},"标记机械臂末端。",[59,103209,103210],{},"标记目标位置。",[59,103212,103213],{},"放传感器或相机参考点。",[59,103215,103216],{},"在 Python 中读取某个关键点的世界坐标。",[19,103218,103219,103220,101009,103223,103226],{},"在后面的 Reacher 任务中，",[99,103221,103222],{},"tip",[99,103224,103225],{},"target"," 就会用 site 表示。",[14,103228,101244],{"id":101243},[93,103230,103232],{"className":30369,"code":103231,"language":30371,"meta":23,"style":23},"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",[99,103233,103234,103240,103250,103254,103258,103266,103271,103275,103279,103283,103288,103292,103297,103302,103307,103312,103316,103320,103324,103328,103332,103336,103348,103360,103368,103372,103387,103402,103406,103419,103434,103447,103460,103464,103480,103484,103488,103499,103511,103523,103535,103539,103543,103555],{"__ignoreMap":23},[102,103235,103236,103238],{"class":104,"line":105},[102,103237,30383],{"class":108},[102,103239,101292],{"class":112},[102,103241,103242,103244,103246,103248],{"class":104,"line":24},[102,103243,30383],{"class":108},[102,103245,31371],{"class":112},[102,103247,31374],{"class":108},[102,103249,31377],{"class":112},[102,103251,103252],{"class":104,"line":1168},[102,103253,2389],{"emptyLinePlaceholder":30},[102,103255,103256],{"class":104,"line":1183},[102,103257,2389],{"emptyLinePlaceholder":30},[102,103259,103260,103262,103264],{"class":104,"line":1189},[102,103261,101305],{"class":161},[102,103263,13554],{"class":108},[102,103265,101310],{"class":217},[102,103267,103268],{"class":104,"line":1203},[102,103269,103270],{"class":217},"\u003Cmujoco model=\"xml_basic\">\n",[102,103272,103273],{"class":104,"line":1209},[102,103274,101320],{"class":217},[102,103276,103277],{"class":104,"line":1300},[102,103278,2389],{"emptyLinePlaceholder":30},[102,103280,103281],{"class":104,"line":1306},[102,103282,101329],{"class":217},[102,103284,103285],{"class":104,"line":1318},[102,103286,103287],{"class":217},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[102,103289,103290],{"class":104,"line":1601},[102,103291,2389],{"emptyLinePlaceholder":30},[102,103293,103294],{"class":104,"line":1606},[102,103295,103296],{"class":217},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[102,103298,103299],{"class":104,"line":1612},[102,103300,103301],{"class":217},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[102,103303,103304],{"class":104,"line":1617},[102,103305,103306],{"class":217},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[102,103308,103309],{"class":104,"line":1631},[102,103310,103311],{"class":217},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[102,103313,103314],{"class":104,"line":1636},[102,103315,101358],{"class":217},[102,103317,103318],{"class":104,"line":1642},[102,103319,101363],{"class":217},[102,103321,103322],{"class":104,"line":1663},[102,103323,101368],{"class":217},[102,103325,103326],{"class":104,"line":1668},[102,103327,95689],{"class":217},[102,103329,103330],{"class":104,"line":1682},[102,103331,2389],{"emptyLinePlaceholder":30},[102,103333,103334],{"class":104,"line":1687},[102,103335,2389],{"emptyLinePlaceholder":30},[102,103337,103338,103340,103342,103344,103346],{"class":104,"line":1716},[102,103339,31938],{"class":108},[102,103341,1962],{"class":1952},[102,103343,101389],{"class":112},[102,103345,95677],{"class":161},[102,103347,3728],{"class":112},[102,103349,103350,103352,103354,103356,103358],{"class":104,"line":1721},[102,103351,101398],{"class":112},[102,103353,158],{"class":108},[102,103355,101403],{"class":112},[102,103357,101305],{"class":161},[102,103359,119],{"class":112},[102,103361,103362,103364,103366],{"class":104,"line":1738},[102,103363,101412],{"class":112},[102,103365,158],{"class":108},[102,103367,101417],{"class":112},[102,103369,103370],{"class":104,"line":1743},[102,103371,2389],{"emptyLinePlaceholder":30},[102,103373,103374,103377,103379,103382,103385],{"class":104,"line":1748},[102,103375,103376],{"class":112},"    box_body_id ",[102,103378,158],{"class":108},[102,103380,103381],{"class":112}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[102,103383,103384],{"class":217},"\"red_box\"",[102,103386,119],{"class":112},[102,103388,103389,103392,103394,103397,103400],{"class":104,"line":1753},[102,103390,103391],{"class":112},"    site_id ",[102,103393,158],{"class":108},[102,103395,103396],{"class":112}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[102,103398,103399],{"class":217},"\"box_center\"",[102,103401,119],{"class":112},[102,103403,103404],{"class":104,"line":1767},[102,103405,2389],{"emptyLinePlaceholder":30},[102,103407,103408,103410,103413,103415,103417],{"class":104,"line":1772},[102,103409,3090],{"class":108},[102,103411,103412],{"class":112}," box_body_id ",[102,103414,1023],{"class":108},[102,103416,4082],{"class":161},[102,103418,3728],{"class":112},[102,103420,103421,103424,103427,103429,103432],{"class":104,"line":2566},[102,103422,103423],{"class":108},"        raise",[102,103425,103426],{"class":161}," RuntimeError",[102,103428,113],{"class":112},[102,103430,103431],{"class":217},"\"body red_box not found\"",[102,103433,119],{"class":112},[102,103435,103436,103438,103441,103443,103445],{"class":104,"line":2580},[102,103437,3090],{"class":108},[102,103439,103440],{"class":112}," site_id ",[102,103442,1023],{"class":108},[102,103444,4082],{"class":161},[102,103446,3728],{"class":112},[102,103448,103449,103451,103453,103455,103458],{"class":104,"line":2588},[102,103450,103423],{"class":108},[102,103452,103426],{"class":161},[102,103454,113],{"class":112},[102,103456,103457],{"class":217},"\"site box_center not found\"",[102,103459,119],{"class":112},[102,103461,103462],{"class":104,"line":2593},[102,103463,2389],{"emptyLinePlaceholder":30},[102,103465,103466,103468,103470,103472,103474,103476,103478],{"class":104,"line":2599},[102,103467,3190],{"class":108},[102,103469,101492],{"class":112},[102,103471,26034],{"class":108},[102,103473,32434],{"class":161},[102,103475,113],{"class":112},[102,103477,1711],{"class":161},[102,103479,30777],{"class":112},[102,103481,103482],{"class":104,"line":2605},[102,103483,101507],{"class":112},[102,103485,103486],{"class":104,"line":2610},[102,103487,2389],{"emptyLinePlaceholder":30},[102,103489,103490,103492,103494,103497],{"class":104,"line":7938},[102,103491,31290],{"class":161},[102,103493,113],{"class":112},[102,103495,103496],{"class":217},"\"simulation time:\"",[102,103498,101469],{"class":112},[102,103500,103501,103503,103505,103508],{"class":104,"line":7962},[102,103502,31290],{"class":161},[102,103504,113],{"class":112},[102,103506,103507],{"class":217},"\"box body position:\"",[102,103509,103510],{"class":112},", data.xpos[box_body_id].copy())\n",[102,103512,103513,103515,103517,103520],{"class":104,"line":7967},[102,103514,31290],{"class":161},[102,103516,113],{"class":112},[102,103518,103519],{"class":217},"\"site position:\"",[102,103521,103522],{"class":112},", data.site_xpos[site_id].copy())\n",[102,103524,103525,103527,103529,103532],{"class":104,"line":7973},[102,103526,31290],{"class":161},[102,103528,113],{"class":112},[102,103530,103531],{"class":217},"\"box qpos:\"",[102,103533,103534],{"class":112},", np.array(data.qpos))\n",[102,103536,103537],{"class":104,"line":8000},[102,103538,2389],{"emptyLinePlaceholder":30},[102,103540,103541],{"class":104,"line":8005},[102,103542,2389],{"emptyLinePlaceholder":30},[102,103544,103545,103547,103549,103551,103553],{"class":104,"line":8011},[102,103546,1520],{"class":108},[102,103548,31211],{"class":161},[102,103550,101550],{"class":108},[102,103552,101553],{"class":217},[102,103554,3728],{"class":112},[102,103556,103557],{"class":104,"line":8023},[102,103558,101560],{"class":112},[19,103560,103561],{},"保存为：",[93,103563,103565],{"className":23812,"code":103564,"language":23814,"meta":23,"style":23},"touch ch2_xml_basic.py\n",[99,103566,103567],{"__ignoreMap":23},[102,103568,103569,103571],{"class":104,"line":105},[102,103570,101274],{"class":1952},[102,103572,103573],{"class":217}," ch2_xml_basic.py\n",[19,103575,102292],{},[93,103577,103579],{"className":23812,"code":103578,"language":23814,"meta":23,"style":23},"python ch2_xml_basic.py\n",[99,103580,103581],{"__ignoreMap":23},[102,103582,103583,103585],{"class":104,"line":105},[102,103584,30371],{"class":1952},[102,103586,103573],{"class":217},[73,103588,101563],{"id":101563},[19,103590,103591],{},"用名字查找 body：",[93,103593,103595],{"className":30369,"code":103594,"language":30371,"meta":23,"style":23},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[99,103596,103597],{"__ignoreMap":23},[102,103598,103599,103602,103604,103606,103608],{"class":104,"line":105},[102,103600,103601],{"class":112},"box_body_id ",[102,103603,158],{"class":108},[102,103605,103381],{"class":112},[102,103607,103384],{"class":217},[102,103609,119],{"class":112},[19,103611,103612],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103614,103615],{},"用名字查找 site：",[93,103617,103619],{"className":30369,"code":103618,"language":30371,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[99,103620,103621],{"__ignoreMap":23},[102,103622,103623,103626,103628,103630,103632],{"class":104,"line":105},[102,103624,103625],{"class":112},"site_id ",[102,103627,158],{"class":108},[102,103629,103396],{"class":112},[102,103631,103399],{"class":217},[102,103633,119],{"class":112},[19,103635,103636,103637,103640,103641,103644],{},"注意第二个参数是对象类型。查 body 就用 ",[99,103638,103639],{},"mjOBJ_BODY","，查 site 就用 ",[99,103642,103643],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103646,103647],{},"读取世界坐标：",[93,103649,103651],{"className":30369,"code":103650,"language":30371,"meta":23,"style":23},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[99,103652,103653,103658],{"__ignoreMap":23},[102,103654,103655],{"class":104,"line":105},[102,103656,103657],{"class":112},"data.xpos[box_body_id]\n",[102,103659,103660],{"class":104,"line":24},[102,103661,103662],{"class":112},"data.site_xpos[site_id]\n",[19,103664,103665,103668,103669,103672],{},[99,103666,103667],{},"xpos"," 是 body 的世界坐标，",[99,103670,103671],{},"site_xpos"," 是 site 的世界坐标。",[73,103674,101699],{"id":101699},[93,103676,103678],{"className":30369,"code":103677,"language":30371,"meta":23,"style":23},"import mujoco\nimport numpy as np\n",[99,103679,103680,103686],{"__ignoreMap":23},[102,103681,103682,103684],{"class":104,"line":105},[102,103683,30383],{"class":108},[102,103685,101292],{"class":112},[102,103687,103688,103690,103692,103694],{"class":104,"line":24},[102,103689,30383],{"class":108},[102,103691,31371],{"class":112},[102,103693,31374],{"class":108},[102,103695,31377],{"class":112},[19,103697,103698,103699,103702,103703,103706,103707,325,103710,28376],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[99,103700,103701],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[99,103704,103705],{},"as np"," 是习惯写法，后面就可以写 ",[99,103708,103709],{},"np.array(...)",[99,103711,103712],{},"np.round(...)",[93,103714,103715],{"className":30369,"code":101586,"language":30371,"meta":23,"style":23},[99,103716,103717,103725,103729],{"__ignoreMap":23},[102,103718,103719,103721,103723],{"class":104,"line":105},[102,103720,101305],{"class":161},[102,103722,13554],{"class":108},[102,103724,101310],{"class":217},[102,103726,103727],{"class":104,"line":24},[102,103728,101601],{"class":217},[102,103730,103731],{"class":104,"line":1168},[102,103732,95689],{"class":217},[19,103734,103735,103736,28376],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[99,103737,103738],{},"mujoco.MjModel.from_xml_string(XML)",[93,103740,103742],{"className":53058,"code":103741,"language":53060,"meta":23,"style":23},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[99,103743,103744],{"__ignoreMap":23},[102,103745,103746,103748,103750,103752,103754,103756,103758,103760,103763,103765,103767,103770,103772,103774,103777],{"class":104,"line":105},[102,103747,1023],{"class":112},[102,103749,103201],{"class":51291},[102,103751,14910],{"class":1952},[102,103753,158],{"class":112},[102,103755,103399],{"class":217},[102,103757,101097],{"class":1952},[102,103759,158],{"class":112},[102,103761,103762],{"class":217},"\"0 0 0\"",[102,103764,101127],{"class":1952},[102,103766,158],{"class":112},[102,103768,103769],{"class":217},"\"0.03\"",[102,103771,78758],{"class":1952},[102,103773,158],{"class":112},[102,103775,103776],{"class":217},"\"0 1 0 1\"",[102,103778,101135],{"class":112},[19,103780,103781,103783,103784,103787,103788,103790,103791,103794],{},[99,103782,103201],{}," 是标记点。",[99,103785,103786],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[99,103789,103161],{}," 表示显示出来的小球大小。",[99,103792,103793],{},"rgba=\"0 1 0 1\""," 表示绿色。",[93,103796,103797],{"className":30369,"code":103594,"language":30371,"meta":23,"style":23},[99,103798,103799],{"__ignoreMap":23},[102,103800,103801,103803,103805,103807,103809],{"class":104,"line":105},[102,103802,103601],{"class":112},[102,103804,158],{"class":108},[102,103806,103381],{"class":112},[102,103808,103384],{"class":217},[102,103810,119],{"class":112},[19,103812,103813,103814,103816],{},"这行的作用是：根据名字 ",[99,103815,103384],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,103818,103819],{},"拆开看：",[56,103821,103822,103828,103833,103839],{},[59,103823,103824,103827],{},[99,103825,103826],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[59,103829,103830,103832],{},[99,103831,102076],{}," 是被查询的模型。",[59,103834,103835,103838],{},[99,103836,103837],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[59,103840,103841,103843],{},[99,103842,103384],{}," 是 XML 里写的名字。",[93,103845,103846],{"className":30369,"code":103618,"language":30371,"meta":23,"style":23},[99,103847,103848],{"__ignoreMap":23},[102,103849,103850,103852,103854,103856,103858],{"class":104,"line":105},[102,103851,103625],{"class":112},[102,103853,158],{"class":108},[102,103855,103396],{"class":112},[102,103857,103399],{"class":217},[102,103859,119],{"class":112},[19,103861,103862,103863,28376],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[99,103864,103399],{},[93,103866,103868],{"className":30369,"code":103867,"language":30371,"meta":23,"style":23},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[99,103869,103870,103882],{"__ignoreMap":23},[102,103871,103872,103874,103876,103878,103880],{"class":104,"line":105},[102,103873,1520],{"class":108},[102,103875,103412],{"class":112},[102,103877,1023],{"class":108},[102,103879,4082],{"class":161},[102,103881,3728],{"class":112},[102,103883,103884,103887,103889,103891,103893],{"class":104,"line":24},[102,103885,103886],{"class":108},"    raise",[102,103888,103426],{"class":161},[102,103890,113],{"class":112},[102,103892,103431],{"class":217},[102,103894,119],{"class":112},[19,103896,103897,103899,103900,103903,103904,103907,103908,103911],{},[99,103898,1520],{}," 是条件判断。",[99,103901,103902],{},"mj_name2id"," 找不到对象时会返回 ",[99,103905,103906],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[99,103909,103910],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[93,103913,103915],{"className":30369,"code":103914,"language":30371,"meta":23,"style":23},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[99,103916,103917,103933],{"__ignoreMap":23},[102,103918,103919,103921,103923,103925,103927,103929,103931],{"class":104,"line":105},[102,103920,3014],{"class":108},[102,103922,101492],{"class":112},[102,103924,26034],{"class":108},[102,103926,32434],{"class":161},[102,103928,113],{"class":112},[102,103930,1711],{"class":161},[102,103932,30777],{"class":112},[102,103934,103935],{"class":104,"line":24},[102,103936,101690],{"class":112},[19,103938,103939],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[93,103941,103943],{"className":30369,"code":103942,"language":30371,"meta":23,"style":23},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[99,103944,103945],{"__ignoreMap":23},[102,103946,103947,103949,103951,103953],{"class":104,"line":105},[102,103948,30406],{"class":161},[102,103950,113],{"class":112},[102,103952,103507],{"class":217},[102,103954,103510],{"class":112},[19,103956,103957,103959,103960,103963],{},[99,103958,101070],{}," 保存所有 body 的世界坐标。",[99,103961,103962],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[93,103965,103967],{"className":30369,"code":103966,"language":30371,"meta":23,"style":23},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[99,103968,103969],{"__ignoreMap":23},[102,103970,103971,103973,103975,103977],{"class":104,"line":105},[102,103972,30406],{"class":161},[102,103974,113],{"class":112},[102,103976,103519],{"class":217},[102,103978,103522],{"class":112},[19,103980,103981,103984,103985,103987],{},[99,103982,103983],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[99,103986,102968],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[93,103989,103991],{"className":30369,"code":103990,"language":30371,"meta":23,"style":23},"print(\"box qpos:\", np.array(data.qpos))\n",[99,103992,103993],{"__ignoreMap":23},[102,103994,103995,103997,103999,104001],{"class":104,"line":105},[102,103996,30406],{"class":161},[102,103998,113],{"class":112},[102,104000,103531],{"class":217},[102,104002,103534],{"class":112},[19,104004,104005,104006,104009],{},"这里打印广义位置数组。",[99,104007,104008],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104011,102307],{"id":102306},[19,104013,104014,104015,104018,104019,28376],{},"程序会输出 ",[99,104016,104017],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[99,104020,104021],{},"qpos",[19,104023,104024,104026,104027,104030,104031,104034],{},[99,104025,103962],{}," 是 body 的世界坐标位置。",[99,104028,104029],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[99,104032,104033],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104036,82213,104037,82521,104039,104041],{},[99,104038,102968],{},[99,104040,103786],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104043,104044],{},"如果你把 site 改成：",[93,104046,104048],{"className":53058,"code":104047,"language":53060,"meta":23,"style":23},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[99,104049,104050],{"__ignoreMap":23},[102,104051,104052,104054,104056,104058,104060,104063,104065,104067,104070,104072,104074,104076,104078,104080,104082],{"class":104,"line":105},[102,104053,1023],{"class":112},[102,104055,103201],{"class":51291},[102,104057,14910],{"class":1952},[102,104059,158],{"class":112},[102,104061,104062],{"class":217},"\"box_top\"",[102,104064,101097],{"class":1952},[102,104066,158],{"class":112},[102,104068,104069],{"class":217},"\"0 0 0.15\"",[102,104071,101127],{"class":1952},[102,104073,158],{"class":112},[102,104075,103769],{"class":217},[102,104077,78758],{"class":1952},[102,104079,158],{"class":112},[102,104081,103776],{"class":217},[102,104083,101135],{"class":112},[19,104085,104086,104087,104090],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[99,104088,104089],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104092,102339],{"id":102338},[56,104094,104095,104104,104107,104114,104120,104131],{},[59,104096,102402,104097,104099,104100,102405,104102,28376],{},[99,104098,102972],{}," 的初始高度从 ",[99,104101,330],{},[99,104103,190],{},[59,104105,104106],{},"重新运行程序。",[59,104108,104109,104110,104113],{},"观察 ",[99,104111,104112],{},"box qpos"," 和最终位置是否变化。",[59,104115,104116,104117,104119],{},"故意把 ",[99,104118,103201],{}," 名称改错，确认程序能报错。",[59,104121,102402,104122,104124,104125,102405,104127,104130],{},[99,104123,101111],{}," 的颜色 ",[99,104126,102023],{},[99,104128,104129],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[59,104132,102402,104133,82521,104135,102405,104138,104141,104142,104144],{},[99,104134,102968],{},[99,104136,104137],{},"pos",[99,104139,104140],{},"0 0 0.2","，观察 ",[99,104143,104089],{}," 如何变化。",[14,104146,102444],{"id":102443},[73,104148,104150],{"id":104149},"xml-error-schema-violation",[99,104151,104152],{},"XML Error: Schema violation",[19,104154,104155],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[73,104157,104159,81281,104161],{"id":104158},"mj_name2id-返回-1",[99,104160,103902],{},[99,104162,103906],{},[19,104164,104165,104166,104169],{},"说明名字没有找到。检查 XML 中 ",[99,104167,104168],{},"name=\"...\"","，并确认对象类型正确。",[73,104171,104172],{"id":104172},"物体不下落",[19,104174,102514],{},[56,104176,104177,104182,104187],{},[59,104178,104179,104180],{},"body 是否有 ",[99,104181,101611],{},[59,104183,104184,104185],{},"gravity 是否为 ",[99,104186,102580],{},[59,104188,104189,104190,104192],{},"body 是否被固定在 ",[99,104191,101832],{}," 中",[73,104194,104195],{"id":104195},"坐标看起来不符合预期",[19,104197,104198],{},"先区分两种坐标：",[250,104200,104201,104210],{},[253,104202,104203],{},[256,104204,104205,104208],{},[259,104206,104207],{"align":23726},"坐标",[259,104209,100691],{"align":23726},[297,104211,104212,104222],{},[256,104213,104214,104219],{},[302,104215,104216,104217],{"align":23726},"XML 里的 ",[99,104218,104137],{},[302,104220,104221],{"align":23726},"相对父 body 的局部坐标",[256,104223,104224,104230],{},[302,104225,104226,24969,104228],{"align":23726},[99,104227,101070],{},[99,104229,103983],{},[302,104231,104232],{"align":23726},"仿真更新后的世界坐标",[19,104234,104235,104236,104238,104239,82530,104242,104244],{},"如果你修改了 ",[99,104237,101061],{},"，但还没调用 ",[99,104240,104241],{},"mj_forward",[99,104243,101206],{},"，世界坐标可能还没有更新。",[14,104246,102598],{"id":102597},[19,104248,104249],{},"MJCF 建模先掌握四件事：",[56,104251,104252,104257,104262,104267],{},[59,104253,104254,104256],{},[99,104255,51791],{}," 表示刚体层级。",[59,104258,104259,104261],{},[99,104260,101111],{}," 表示形状、碰撞和质量。",[59,104263,104264,104266],{},[99,104265,102947],{}," 决定 body 能不能动、怎么动。",[59,104268,104269,104271],{},[99,104270,103201],{}," 用来标记关键点，方便 Python 读取位置。",[19,104273,104274],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5116,104276,104277],{},"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":23,"searchDepth":24,"depth":24,"links":104279},[104280,104281,104282,104288,104292,104293,104294,104301],{"id":100637,"depth":24,"text":100638},{"id":100760,"depth":24,"text":100761},{"id":101035,"depth":24,"text":101036,"children":104283},[104284,104285,104286,104287],{"id":102951,"depth":1168,"text":102951},{"id":103065,"depth":1168,"text":103065},{"id":103091,"depth":1168,"text":103092},{"id":103195,"depth":1168,"text":103196},{"id":101243,"depth":24,"text":101244,"children":104289},[104290,104291],{"id":101563,"depth":1168,"text":101563},{"id":101699,"depth":1168,"text":101699},{"id":102306,"depth":24,"text":102307},{"id":102338,"depth":24,"text":102339},{"id":102443,"depth":24,"text":102444,"children":104295},[104296,104297,104299,104300],{"id":104149,"depth":1168,"text":104152},{"id":104158,"depth":1168,"text":104298},"mj_name2id 返回 -1",{"id":104172,"depth":1168,"text":104172},{"id":104195,"depth":1168,"text":104195},{"id":102597,"depth":24,"text":102598},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102645,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104308,"title":104309,"body":104310,"description":23,"extension":28,"meta":105805,"navigation":30,"path":105806,"seo":105807,"stem":105808,"__hash__":105809},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104311,"toc":105777},[104312,104315,104317,104320,104323,104361,104364,104370,104373,104375,104377,104404,104406,104420,104422,104463,104465,104489,104491,104494,104503,104512,104515,104524,104532,104541,104544,104554,104557,104609,104616,104622,104630,104678,104681,104700,104703,104711,104715,104724,104757,104759,105107,105109,105121,105123,105134,105136,105139,105160,105166,105169,105194,105204,105207,105215,105218,105221,105242,105253,105255,105275,105278,105299,105308,105327,105333,105358,105361,105375,105382,105406,105409,105417,105426,105442,105454,105462,105471,105473,105476,105500,105505,105508,105530,105532,105571,105573,105580,105582,105590,105593,105596,105608,105649,105656,105667,105674,105677,105726,105729,105732,105738,105740,105745,105771,105774],[10,104313,104309],{"id":104314},"_3python-控制接口读取状态与推进仿真",[14,104316,100638],{"id":100637},[19,104318,104319],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104321,104322],{},"你将学习:",[56,104324,104325,104330,104335,104339,104344,104355],{},[59,104326,104327],{},[99,104328,104329],{},"MjModel.from_xml_string",[59,104331,104332],{},[99,104333,104334],{},"MjData(model)",[59,104336,104337],{},[99,104338,101206],{},[59,104340,104341],{},[99,104342,104343],{},"mj_resetData",[59,104345,104346,104347,325,104349,325,104352],{},"读取 ",[99,104348,104021],{},[99,104350,104351],{},"qvel",[99,104353,104354],{},"ctrl",[59,104356,104357,104358],{},"使用 ",[99,104359,104360],{},"model.opt.timestep",[19,104362,104363],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[93,104365,104368],{"className":104366,"code":104367,"language":5177,"meta":23},[5175],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[99,104369,104367],{"__ignoreMap":23},[19,104371,104372],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104374,100761],{"id":100760},[19,104376,100764],{},[93,104378,104380],{"className":23812,"code":104379,"language":23814,"meta":23,"style":23},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[99,104381,104382],{"__ignoreMap":23},[102,104383,104384,104386,104388,104390,104392,104395,104397,104399,104401],{"class":104,"line":105},[102,104385,24567],{"class":1952},[102,104387,26306],{"class":217},[102,104389,23824],{"class":217},[102,104391,26391],{"class":161},[102,104393,104394],{"class":217}," python3",[102,104396,100789],{"class":217},[102,104398,102492],{"class":217},[102,104400,100805],{"class":217},[102,104402,104403],{"class":217}," glfw\n",[19,104405,102810],{},[93,104407,104408],{"className":23812,"code":100910,"language":23814,"meta":23,"style":23},[99,104409,104410],{"__ignoreMap":23},[102,104411,104412,104414,104416,104418],{"class":104,"line":105},[102,104413,23821],{"class":1952},[102,104415,23824],{"class":217},[102,104417,100921],{"class":217},[102,104419,100924],{"class":217},[19,104421,102827],{},[93,104423,104425],{"className":23812,"code":104424,"language":23814,"meta":23,"style":23},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[99,104426,104427,104444,104453],{"__ignoreMap":23},[102,104428,104429,104431,104433,104435,104438,104440,104442],{"class":104,"line":105},[102,104430,30321],{"class":1952},[102,104432,29167],{"class":217},[102,104434,25106],{"class":161},[102,104436,104437],{"class":217}," mujoco-python-api",[102,104439,100966],{"class":217},[102,104441,100969],{"class":161},[102,104443,100972],{"class":161},[102,104445,104446,104448,104450],{"class":104,"line":24},[102,104447,30321],{"class":1952},[102,104449,100979],{"class":217},[102,104451,104452],{"class":217}," mujoco-python-api\n",[102,104454,104455,104457,104459,104461],{"class":104,"line":1168},[102,104456,23821],{"class":1952},[102,104458,23824],{"class":217},[102,104460,100921],{"class":217},[102,104462,100924],{"class":217},[19,104464,100995],{},[56,104466,104467,104474,104483],{},[59,104468,104469,101009,104471,104473],{},[99,104470,100666],{},[99,104472,100671],{}," 是官方 Python bindings 的类名。",[59,104475,104476,104477,104480,104481,28376],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[99,104478,104479],{},"mjModel"," 在 Python 中是 ",[99,104482,100700],{},[59,104484,104485,104486,28376],{},"不要使用 ",[99,104487,104488],{},"sim = mujoco_py.MjSim(...)",[14,104490,101036],{"id":101035},[19,104492,104493],{},"仿真推进核心代码:",[93,104495,104497],{"className":30369,"code":104496,"language":30371,"meta":23,"style":23},"mujoco.mj_step(model, data)\n",[99,104498,104499],{"__ignoreMap":23},[102,104500,104501],{"class":104,"line":105},[102,104502,104496],{"class":112},[19,104504,104505,104506,325,104508,325,104510,28376],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[99,104507,101061],{},[99,104509,101064],{},[99,104511,101058],{},[19,104513,104514],{},"重置仿真:",[93,104516,104518],{"className":30369,"code":104517,"language":30371,"meta":23,"style":23},"mujoco.mj_resetData(model, data)\n",[99,104519,104520],{"__ignoreMap":23},[102,104521,104522],{"class":104,"line":105},[102,104523,104517],{"class":112},[19,104525,104526,104527,82530,104529,104531],{},"如果手动修改了 ",[99,104528,101061],{},[99,104530,101064],{},"，通常应调用:",[93,104533,104535],{"className":30369,"code":104534,"language":30371,"meta":23,"style":23},"mujoco.mj_forward(model, data)\n",[99,104536,104537],{"__ignoreMap":23},[102,104538,104539],{"class":104,"line":105},[102,104540,104534],{"class":112},[19,104542,104543],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[73,104545,104547,325,104549,325,104551,104553],{"id":104546},"qposqvelctrl-是什么",[99,104548,104021],{},[99,104550,104351],{},[99,104552,104354],{}," 是什么",[19,104555,104556],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[250,104558,104559,104571],{},[253,104560,104561],{},[256,104562,104563,104566,104568],{},[259,104564,104565],{"align":23726},"字段",[259,104567,100691],{"align":23726},[259,104569,104570],{"align":23726},"谁来修改",[297,104572,104573,104585,104597],{},[256,104574,104575,104579,104582],{},[302,104576,104577],{"align":23726},[99,104578,101061],{},[302,104580,104581],{"align":23726},"广义位置，例如小车位置、关节角、自由物体位置姿态",[302,104583,104584],{"align":23726},"MuJoCo 更新，也可以手动设置初始状态",[256,104586,104587,104591,104594],{},[302,104588,104589],{"align":23726},[99,104590,101064],{},[302,104592,104593],{"align":23726},"广义速度，例如小车速度、关节角速度",[302,104595,104596],{"align":23726},"MuJoCo 更新，也可以手动清零",[256,104598,104599,104603,104606],{},[302,104600,104601],{"align":23726},[99,104602,101067],{},[302,104604,104605],{"align":23726},"actuator 的控制输入",[302,104607,104608],{"align":23726},"主要由你的控制代码写入",[19,104610,9015,104611,101009,104613,104615],{},[99,104612,104021],{},[99,104614,104351],{}," 不一定同维。自由刚体就是典型例子：",[93,104617,104620],{"className":104618,"code":104619,"language":5177,"meta":23},[5175],"freejoint: qpos 7 维，qvel 6 维\n",[99,104621,104619],{"__ignoreMap":23},[73,104623,104625,101009,104627,104629],{"id":104624},"mj_step-和-mj_forward-的区别",[99,104626,101206],{},[99,104628,104241],{}," 的区别",[250,104631,104632,104645],{},[253,104633,104634],{},[256,104635,104636,104639,104642],{},[259,104637,104638],{"align":23726},"函数",[259,104640,104641],{"align":23726},"是否推进时间",[259,104643,104644],{"align":23726},"什么时候用",[297,104646,104647,104660],{},[256,104648,104649,104654,104657],{},[302,104650,104651],{"align":23726},[99,104652,104653],{},"mj_step(model, data)",[302,104655,104656],{"align":23726},"是",[302,104658,104659],{"align":23726},"正常仿真循环，每调用一次前进一步",[256,104661,104662,104667,104670],{},[302,104663,104664],{"align":23726},[99,104665,104666],{},"mj_forward(model, data)",[302,104668,104669],{"align":23726},"否",[302,104671,104672,104673,325,104675,104677],{"align":23726},"手动改了 ",[99,104674,104021],{},[99,104676,104351],{}," 后，刷新派生量",[19,104679,104680],{},"例如你写：",[93,104682,104684],{"className":30369,"code":104683,"language":30371,"meta":23,"style":23},"data.qpos[2] = 2.0\n",[99,104685,104686],{"__ignoreMap":23},[102,104687,104688,104691,104693,104695,104697],{"class":104,"line":105},[102,104689,104690],{"class":112},"data.qpos[",[102,104692,190],{"class":161},[102,104694,4432],{"class":112},[102,104696,158],{"class":108},[102,104698,104699],{"class":161}," 2.0\n",[19,104701,104702],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[93,104704,104705],{"className":30369,"code":104534,"language":30371,"meta":23,"style":23},[99,104706,104707],{"__ignoreMap":23},[102,104708,104709],{"class":104,"line":105},[102,104710,104534],{"class":112},[73,104712,104714],{"id":104713},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104716,104717,104720,104721,104723],{},[99,104718,104719],{},"mujoco.mj_resetData(model, data)"," 会把 ",[99,104722,33392],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[93,104725,104727],{"className":30369,"code":104726,"language":30371,"meta":23,"style":23},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[99,104728,104729,104733,104743,104753],{"__ignoreMap":23},[102,104730,104731],{"class":104,"line":105},[102,104732,104517],{"class":112},[102,104734,104735,104738,104740],{"class":104,"line":24},[102,104736,104737],{"class":112},"data.qpos[:] ",[102,104739,158],{"class":108},[102,104741,104742],{"class":112}," random_qpos\n",[102,104744,104745,104748,104750],{"class":104,"line":1168},[102,104746,104747],{"class":112},"data.qvel[:] ",[102,104749,158],{"class":108},[102,104751,104752],{"class":161}," 0.0\n",[102,104754,104755],{"class":104,"line":1183},[102,104756,104534],{"class":112},[14,104758,101244],{"id":101243},[93,104760,104762],{"className":30369,"code":104761,"language":30371,"meta":23,"style":23},"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",[99,104763,104764,104770,104780,104784,104788,104796,104801,104805,104809,104813,104818,104822,104827,104832,104837,104841,104845,104849,104853,104857,104861,104880,104887,104899,104910,104926,104942,104946,104950,104962,104974,104982,104986,104997,105001,105017,105021,105025,105034,105038,105043,105052,105056,105069,105074,105083,105087,105091,105103],{"__ignoreMap":23},[102,104765,104766,104768],{"class":104,"line":105},[102,104767,30383],{"class":108},[102,104769,101292],{"class":112},[102,104771,104772,104774,104776,104778],{"class":104,"line":24},[102,104773,30383],{"class":108},[102,104775,31371],{"class":112},[102,104777,31374],{"class":108},[102,104779,31377],{"class":112},[102,104781,104782],{"class":104,"line":1168},[102,104783,2389],{"emptyLinePlaceholder":30},[102,104785,104786],{"class":104,"line":1183},[102,104787,2389],{"emptyLinePlaceholder":30},[102,104789,104790,104792,104794],{"class":104,"line":1189},[102,104791,101305],{"class":161},[102,104793,13554],{"class":108},[102,104795,101310],{"class":217},[102,104797,104798],{"class":104,"line":1203},[102,104799,104800],{"class":217},"\u003Cmujoco model=\"state_api\">\n",[102,104802,104803],{"class":104,"line":1209},[102,104804,101320],{"class":217},[102,104806,104807],{"class":104,"line":1300},[102,104808,2389],{"emptyLinePlaceholder":30},[102,104810,104811],{"class":104,"line":1306},[102,104812,101329],{"class":217},[102,104814,104815],{"class":104,"line":1318},[102,104816,104817],{"class":217},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[102,104819,104820],{"class":104,"line":1601},[102,104821,2389],{"emptyLinePlaceholder":30},[102,104823,104824],{"class":104,"line":1606},[102,104825,104826],{"class":217},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[102,104828,104829],{"class":104,"line":1612},[102,104830,104831],{"class":217},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[102,104833,104834],{"class":104,"line":1617},[102,104835,104836],{"class":217},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[102,104838,104839],{"class":104,"line":1631},[102,104840,101358],{"class":217},[102,104842,104843],{"class":104,"line":1636},[102,104844,101363],{"class":217},[102,104846,104847],{"class":104,"line":1642},[102,104848,101368],{"class":217},[102,104850,104851],{"class":104,"line":1663},[102,104852,95689],{"class":217},[102,104854,104855],{"class":104,"line":1668},[102,104856,2389],{"emptyLinePlaceholder":30},[102,104858,104859],{"class":104,"line":1682},[102,104860,2389],{"emptyLinePlaceholder":30},[102,104862,104863,104865,104868,104871,104873,104876,104878],{"class":104,"line":1687},[102,104864,31938],{"class":108},[102,104866,104867],{"class":1952}," print_state",[102,104869,104870],{"class":112},"(prefix: ",[102,104872,1288],{"class":161},[102,104874,104875],{"class":112},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[102,104877,95677],{"class":161},[102,104879,3728],{"class":112},[102,104881,104882,104884],{"class":104,"line":1716},[102,104883,31290],{"class":161},[102,104885,104886],{"class":112},"(prefix)\n",[102,104888,104889,104891,104893,104896],{"class":104,"line":1721},[102,104890,31290],{"class":161},[102,104892,113],{"class":112},[102,104894,104895],{"class":217},"\"  timestep:\"",[102,104897,104898],{"class":112},", model.opt.timestep)\n",[102,104900,104901,104903,104905,104908],{"class":104,"line":1738},[102,104902,31290],{"class":161},[102,104904,113],{"class":112},[102,104906,104907],{"class":217},"\"  time:\"",[102,104909,101469],{"class":112},[102,104911,104912,104914,104916,104919,104922,104924],{"class":104,"line":1743},[102,104913,31290],{"class":161},[102,104915,113],{"class":112},[102,104917,104918],{"class":217},"\"  qpos:\"",[102,104920,104921],{"class":112},", np.round(data.qpos.copy(), ",[102,104923,406],{"class":161},[102,104925,30488],{"class":112},[102,104927,104928,104930,104932,104935,104938,104940],{"class":104,"line":1748},[102,104929,31290],{"class":161},[102,104931,113],{"class":112},[102,104933,104934],{"class":217},"\"  qvel:\"",[102,104936,104937],{"class":112},", np.round(data.qvel.copy(), ",[102,104939,406],{"class":161},[102,104941,30488],{"class":112},[102,104943,104944],{"class":104,"line":1753},[102,104945,2389],{"emptyLinePlaceholder":30},[102,104947,104948],{"class":104,"line":1767},[102,104949,2389],{"emptyLinePlaceholder":30},[102,104951,104952,104954,104956,104958,104960],{"class":104,"line":1772},[102,104953,31938],{"class":108},[102,104955,1962],{"class":1952},[102,104957,101389],{"class":112},[102,104959,95677],{"class":161},[102,104961,3728],{"class":112},[102,104963,104964,104966,104968,104970,104972],{"class":104,"line":2566},[102,104965,101398],{"class":112},[102,104967,158],{"class":108},[102,104969,101403],{"class":112},[102,104971,101305],{"class":161},[102,104973,119],{"class":112},[102,104975,104976,104978,104980],{"class":104,"line":2580},[102,104977,101412],{"class":112},[102,104979,158],{"class":108},[102,104981,101417],{"class":112},[102,104983,104984],{"class":104,"line":2588},[102,104985,2389],{"emptyLinePlaceholder":30},[102,104987,104988,104991,104994],{"class":104,"line":2593},[102,104989,104990],{"class":112},"    print_state(",[102,104992,104993],{"class":217},"\"initial\"",[102,104995,104996],{"class":112},", model, data)\n",[102,104998,104999],{"class":104,"line":2599},[102,105000,2389],{"emptyLinePlaceholder":30},[102,105002,105003,105005,105007,105009,105011,105013,105015],{"class":104,"line":2605},[102,105004,3190],{"class":108},[102,105006,101492],{"class":112},[102,105008,26034],{"class":108},[102,105010,32434],{"class":161},[102,105012,113],{"class":112},[102,105014,769],{"class":161},[102,105016,30777],{"class":112},[102,105018,105019],{"class":104,"line":2610},[102,105020,101507],{"class":112},[102,105022,105023],{"class":104,"line":7938},[102,105024,2389],{"emptyLinePlaceholder":30},[102,105026,105027,105029,105032],{"class":104,"line":7962},[102,105028,104990],{"class":112},[102,105030,105031],{"class":217},"\"after 50 steps\"",[102,105033,104996],{"class":112},[102,105035,105036],{"class":104,"line":7967},[102,105037,2389],{"emptyLinePlaceholder":30},[102,105039,105040],{"class":104,"line":7973},[102,105041,105042],{"class":112},"    mujoco.mj_resetData(model, data)\n",[102,105044,105045,105047,105050],{"class":104,"line":8000},[102,105046,104990],{"class":112},[102,105048,105049],{"class":217},"\"after reset\"",[102,105051,104996],{"class":112},[102,105053,105054],{"class":104,"line":8005},[102,105055,2389],{"emptyLinePlaceholder":30},[102,105057,105058,105061,105063,105065,105067],{"class":104,"line":8011},[102,105059,105060],{"class":112},"    data.qpos[",[102,105062,190],{"class":161},[102,105064,4432],{"class":112},[102,105066,158],{"class":108},[102,105068,104699],{"class":161},[102,105070,105071],{"class":104,"line":8023},[102,105072,105073],{"class":112},"    mujoco.mj_forward(model, data)\n",[102,105075,105076,105078,105081],{"class":104,"line":8035},[102,105077,104990],{"class":112},[102,105079,105080],{"class":217},"\"after manual qpos edit\"",[102,105082,104996],{"class":112},[102,105084,105085],{"class":104,"line":8047},[102,105086,2389],{"emptyLinePlaceholder":30},[102,105088,105089],{"class":104,"line":9706},[102,105090,2389],{"emptyLinePlaceholder":30},[102,105092,105093,105095,105097,105099,105101],{"class":104,"line":9731},[102,105094,1520],{"class":108},[102,105096,31211],{"class":161},[102,105098,101550],{"class":108},[102,105100,101553],{"class":217},[102,105102,3728],{"class":112},[102,105104,105105],{"class":104,"line":9754},[102,105106,101560],{"class":112},[19,105108,103561],{},[93,105110,105112],{"className":23812,"code":105111,"language":23814,"meta":23,"style":23},"touch ch3_python_state.py\n",[99,105113,105114],{"__ignoreMap":23},[102,105115,105116,105118],{"class":104,"line":105},[102,105117,101274],{"class":1952},[102,105119,105120],{"class":217}," ch3_python_state.py\n",[19,105122,102292],{},[93,105124,105126],{"className":23812,"code":105125,"language":23814,"meta":23,"style":23},"python ch3_python_state.py\n",[99,105127,105128],{"__ignoreMap":23},[102,105129,105130,105132],{"class":104,"line":105},[102,105131,30371],{"class":1952},[102,105133,105120],{"class":217},[73,105135,101563],{"id":101563},[19,105137,105138],{},"打印状态的函数：",[93,105140,105142],{"className":30369,"code":105141,"language":30371,"meta":23,"style":23},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[99,105143,105144],{"__ignoreMap":23},[102,105145,105146,105148,105150,105152,105154,105156,105158],{"class":104,"line":105},[102,105147,31938],{"class":108},[102,105149,104867],{"class":1952},[102,105151,104870],{"class":112},[102,105153,1288],{"class":161},[102,105155,104875],{"class":112},[102,105157,95677],{"class":161},[102,105159,3728],{"class":112},[19,105161,105162,105163,105165],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[99,105164,33392],{}," 里发生了什么。",[19,105167,105168],{},"推进 50 步：",[93,105170,105172],{"className":30369,"code":105171,"language":30371,"meta":23,"style":23},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[99,105173,105174,105190],{"__ignoreMap":23},[102,105175,105176,105178,105180,105182,105184,105186,105188],{"class":104,"line":105},[102,105177,3014],{"class":108},[102,105179,101492],{"class":112},[102,105181,26034],{"class":108},[102,105183,32434],{"class":161},[102,105185,113],{"class":112},[102,105187,769],{"class":161},[102,105189,30777],{"class":112},[102,105191,105192],{"class":104,"line":24},[102,105193,101690],{"class":112},[19,105195,105196,105197,105200,105201,105203],{},"由于 ",[99,105198,105199],{},"timestep=0.01","，所以 50 步后时间约为 ",[99,105202,35320],{}," 秒。",[19,105205,105206],{},"重置：",[93,105208,105209],{"className":30369,"code":104517,"language":30371,"meta":23,"style":23},[99,105210,105211],{"__ignoreMap":23},[102,105212,105213],{"class":104,"line":105},[102,105214,104517],{"class":112},[19,105216,105217],{},"这会把时间、位置、速度恢复到初始状态。",[19,105219,105220],{},"手动改高度：",[93,105222,105224],{"className":30369,"code":105223,"language":30371,"meta":23,"style":23},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[99,105225,105226,105238],{"__ignoreMap":23},[102,105227,105228,105230,105232,105234,105236],{"class":104,"line":105},[102,105229,104690],{"class":112},[102,105231,190],{"class":161},[102,105233,4432],{"class":112},[102,105235,158],{"class":108},[102,105237,104699],{"class":161},[102,105239,105240],{"class":104,"line":24},[102,105241,104534],{"class":112},[19,105243,105244,105245,105248,105249,105252],{},"这个例子里 ",[99,105246,105247],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[99,105250,105251],{},"2.0"," 表示把小球放到更高的位置。",[73,105254,101699],{"id":101699},[93,105256,105257],{"className":30369,"code":105141,"language":30371,"meta":23,"style":23},[99,105258,105259],{"__ignoreMap":23},[102,105260,105261,105263,105265,105267,105269,105271,105273],{"class":104,"line":105},[102,105262,31938],{"class":108},[102,105264,104867],{"class":1952},[102,105266,104870],{"class":112},[102,105268,1288],{"class":161},[102,105270,104875],{"class":112},[102,105272,95677],{"class":161},[102,105274,3728],{"class":112},[19,105276,105277],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[56,105279,105280,105289,105294],{},[59,105281,105282,105285,105286,105288],{},[99,105283,105284],{},"prefix","：一段文字，比如 ",[99,105287,104993],{},"，用来说明现在打印的是哪个阶段。",[59,105290,105291,105293],{},[99,105292,102076],{},"：MuJoCo 模型。",[59,105295,105296,105298],{},[99,105297,33392],{},"：MuJoCo 当前状态。",[19,105300,105301,325,105304,105307],{},[99,105302,105303],{},"prefix: str",[99,105305,105306],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[93,105309,105311],{"className":30369,"code":105310,"language":30371,"meta":23,"style":23},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[99,105312,105313],{"__ignoreMap":23},[102,105314,105315,105317,105319,105321,105323,105325],{"class":104,"line":105},[102,105316,30406],{"class":161},[102,105318,113],{"class":112},[102,105320,104918],{"class":217},[102,105322,104921],{"class":112},[102,105324,406],{"class":161},[102,105326,30488],{"class":112},[19,105328,105329,105332],{},[99,105330,105331],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[93,105334,105336],{"className":30369,"code":105335,"language":30371,"meta":23,"style":23},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[99,105337,105338,105350],{"__ignoreMap":23},[102,105339,105340,105342,105344,105346,105348],{"class":104,"line":105},[102,105341,101625],{"class":112},[102,105343,158],{"class":108},[102,105345,101403],{"class":112},[102,105347,101305],{"class":161},[102,105349,119],{"class":112},[102,105351,105352,105354,105356],{"class":104,"line":24},[102,105353,101649],{"class":112},[102,105355,158],{"class":108},[102,105357,101417],{"class":112},[19,105359,105360],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[93,105362,105364],{"className":30369,"code":105363,"language":30371,"meta":23,"style":23},"print_state(\"initial\", model, data)\n",[99,105365,105366],{"__ignoreMap":23},[102,105367,105368,105371,105373],{"class":104,"line":105},[102,105369,105370],{"class":112},"print_state(",[102,105372,104993],{"class":217},[102,105374,104996],{"class":112},[19,105376,105377,105378,105381],{},"调用刚才定义的 ",[99,105379,105380],{},"print_state"," 函数，打印初始状态。",[93,105383,105384],{"className":30369,"code":105171,"language":30371,"meta":23,"style":23},[99,105385,105386,105402],{"__ignoreMap":23},[102,105387,105388,105390,105392,105394,105396,105398,105400],{"class":104,"line":105},[102,105389,3014],{"class":108},[102,105391,101492],{"class":112},[102,105393,26034],{"class":108},[102,105395,32434],{"class":161},[102,105397,113],{"class":112},[102,105399,769],{"class":161},[102,105401,30777],{"class":112},[102,105403,105404],{"class":104,"line":24},[102,105405,101690],{"class":112},[19,105407,105408],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[93,105410,105411],{"className":30369,"code":104517,"language":30371,"meta":23,"style":23},[99,105412,105413],{"__ignoreMap":23},[102,105414,105415],{"class":104,"line":105},[102,105416,104517],{"class":112},[19,105418,105419,105420,105422,105423,105425],{},"重置 ",[99,105421,33392],{},"。注意它不会重新创建 ",[99,105424,102076],{},"，因为模型结构没有变，只是状态回到初始值。",[93,105427,105428],{"className":30369,"code":104683,"language":30371,"meta":23,"style":23},[99,105429,105430],{"__ignoreMap":23},[102,105431,105432,105434,105436,105438,105440],{"class":104,"line":105},[102,105433,104690],{"class":112},[102,105435,190],{"class":161},[102,105437,4432],{"class":112},[102,105439,158],{"class":108},[102,105441,104699],{"class":161},[19,105443,105444,105445,325,105448,325,105451,105453],{},"这行是“手动改状态”。在 freejoint 中，",[99,105446,105447],{},"qpos[0]",[99,105449,105450],{},"qpos[1]",[99,105452,105247],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[93,105455,105456],{"className":30369,"code":104534,"language":30371,"meta":23,"style":23},[99,105457,105458],{"__ignoreMap":23},[102,105459,105460],{"class":104,"line":105},[102,105461,104534],{"class":112},[19,105463,105464,105465,105467,105468,105470],{},"手动改完 ",[99,105466,104021],{}," 后，调用 ",[99,105469,104241],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105472,102307],{"id":102306},[19,105474,105475],{},"你会看到:",[56,105477,105478,105483,105488,105491],{},[59,105479,105480,105481],{},"初始时间为 ",[99,105482,304],{},[59,105484,105485,105486],{},"50 步后时间约为 ",[99,105487,35320],{},[59,105489,105490],{},"reset 后状态恢复",[59,105492,105493,105494,105497,105498],{},"手动修改 ",[99,105495,105496],{},"data.qpos[2]"," 后，小球高度变为 ",[99,105499,105251],{},[19,105501,105502,105504],{},[99,105503,105247],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105506,105507],{},"输出里可以重点看三件事：",[56,105509,105510,105518,105523],{},[59,105511,105512,105514,105515,105517],{},[99,105513,2376],{}," 是否随着 ",[99,105516,101206],{}," 增加。",[59,105519,105520,105522],{},[99,105521,104021],{}," 的 z 坐标是否因为下落而变化。",[59,105524,105525,105527,105528,28376],{},[99,105526,104343],{}," 后时间是否回到 ",[99,105529,304],{},[14,105531,102339],{"id":102338},[56,105533,105534,105540,105546,105552,105555,105564],{},[59,105535,105536,105537,28376],{},"修改 timestep 为 ",[99,105538,105539],{},"0.005",[59,105541,105542,105543,28376],{},"重新运行，检查 50 步后时间是否约为 ",[99,105544,105545],{},"0.25",[59,105547,105548,105549,28376],{},"修改重力为 ",[99,105550,105551],{},"0 0 -1.0",[59,105553,105554],{},"观察小球下降速度是否变慢。",[59,105556,102402,105557,102405,105560,105563],{},[99,105558,105559],{},"data.qpos[2] = 2.0",[99,105561,105562],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[59,105565,105566,105567,105570],{},"注释掉 ",[99,105568,105569],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105572,102444],{"id":102443},[73,105574,105576,105577,105579],{"id":105575},"修改-dataqpos-后位置没有更新","修改 ",[99,105578,101061],{}," 后位置没有更新",[19,105581,102453],{},[93,105583,105584],{"className":30369,"code":104534,"language":30371,"meta":23,"style":23},[99,105585,105586],{"__ignoreMap":23},[102,105587,105588],{"class":104,"line":105},[102,105589,104534],{"class":112},[73,105591,105592],{"id":105592},"数组维度看不懂",[19,105594,105595],{},"打印模型维度:",[93,105597,105599],{"className":30369,"code":105598,"language":30371,"meta":23,"style":23},"print(model.nq, model.nv, model.nu)\n",[99,105600,105601],{"__ignoreMap":23},[102,105602,105603,105605],{"class":104,"line":105},[102,105604,30406],{"class":161},[102,105606,105607],{"class":112},"(model.nq, model.nv, model.nu)\n",[250,105609,105610,105618],{},[253,105611,105612],{},[256,105613,105614,105616],{},[259,105615,104565],{"align":23726},[259,105617,100691],{"align":23726},[297,105619,105620,105630,105640],{},[256,105621,105622,105627],{},[302,105623,105624],{"align":23726},[99,105625,105626],{},"nq",[302,105628,105629],{"align":23726},"位置变量数量",[256,105631,105632,105637],{},[302,105633,105634],{"align":23726},[99,105635,105636],{},"nv",[302,105638,105639],{"align":23726},"速度变量数量",[256,105641,105642,105646],{},[302,105643,105644],{"align":23726},[99,105645,102153],{},[302,105647,105648],{"align":23726},"控制输入数量",[73,105650,105652,105653,105655],{"id":105651},"误以为-qpos-一定等于关节数","误以为 ",[99,105654,104021],{}," 一定等于关节数",[19,105657,105658,105659,82521,105661,105663,105664,105666],{},"不是。例如 ",[99,105660,101611],{},[99,105662,104021],{}," 是 7 维，但 ",[99,105665,104351],{}," 是 6 维。",[73,105668,105670,105671,105673],{"id":105669},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[99,105672,104021],{}," 的第几位",[19,105675,105676],{},"初学时可以先打印：",[93,105678,105680],{"className":30369,"code":105679,"language":30371,"meta":23,"style":23},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[99,105681,105682,105692,105702,105714],{"__ignoreMap":23},[102,105683,105684,105686,105688,105690],{"class":104,"line":105},[102,105685,30406],{"class":161},[102,105687,113],{"class":112},[102,105689,101430],{"class":217},[102,105691,101433],{"class":112},[102,105693,105694,105696,105698,105700],{"class":104,"line":24},[102,105695,30406],{"class":161},[102,105697,113],{"class":112},[102,105699,101442],{"class":217},[102,105701,101445],{"class":112},[102,105703,105704,105706,105708,105711],{"class":104,"line":1168},[102,105705,30406],{"class":161},[102,105707,113],{"class":112},[102,105709,105710],{"class":217},"\"qpos:\"",[102,105712,105713],{"class":112},", data.qpos)\n",[102,105715,105716,105718,105720,105723],{"class":104,"line":1183},[102,105717,30406],{"class":161},[102,105719,113],{"class":112},[102,105721,105722],{"class":217},"\"qvel:\"",[102,105724,105725],{"class":112},", data.qvel)\n",[19,105727,105728],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[73,105730,105731],{"id":105731},"仿真结果每次都一样",[19,105733,105734,105735,105737],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[99,105736,104021],{},"、目标点或控制输入。",[14,105739,102598],{"id":102597},[19,105741,105742,105743,24609],{},"Python 控制 MuJoCo 的核心就是读写 ",[99,105744,33392],{},[56,105746,105747,105755,105760,105765],{},[59,105748,105749,105750,101009,105752,105754],{},"用 ",[99,105751,101061],{},[99,105753,101064],{}," 读取状态。",[59,105756,105749,105757,105759],{},[99,105758,101067],{}," 写入控制。",[59,105761,105749,105762,105764],{},[99,105763,101206],{}," 推进时间。",[59,105766,105767,105768,105770],{},"手动改状态后用 ",[99,105769,104241],{}," 刷新派生量。",[19,105772,105773],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5116,105775,105776],{},"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":23,"searchDepth":24,"depth":24,"links":105778},[105779,105780,105781,105788,105792,105793,105794,105804],{"id":100637,"depth":24,"text":100638},{"id":100760,"depth":24,"text":100761},{"id":101035,"depth":24,"text":101036,"children":105782},[105783,105785,105787],{"id":104546,"depth":1168,"text":105784},"qpos、qvel、ctrl 是什么",{"id":104624,"depth":1168,"text":105786},"mj_step 和 mj_forward 的区别",{"id":104713,"depth":1168,"text":104714},{"id":101243,"depth":24,"text":101244,"children":105789},[105790,105791],{"id":101563,"depth":1168,"text":101563},{"id":101699,"depth":1168,"text":101699},{"id":102306,"depth":24,"text":102307},{"id":102338,"depth":24,"text":102339},{"id":102443,"depth":24,"text":102444,"children":105795},[105796,105798,105799,105801,105803],{"id":105575,"depth":1168,"text":105797},"修改 data.qpos 后位置没有更新",{"id":105592,"depth":1168,"text":105592},{"id":105651,"depth":1168,"text":105800},"误以为 qpos 一定等于关节数",{"id":105669,"depth":1168,"text":105802},"不知道某个元素在 qpos 的第几位",{"id":105731,"depth":1168,"text":105731},{"id":102597,"depth":24,"text":102598},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104309,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105811,"title":105812,"body":105813,"description":23,"extension":28,"meta":107503,"navigation":30,"path":107504,"seo":107505,"stem":107506,"__hash__":107507},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105814,"toc":107479},[105815,105818,105820,105823,105825,105850,105853,105872,105875,105877,105879,105903,105905,105919,105921,105962,105964,105988,105990,105993,106027,106029,106042,106045,106113,106122,106126,106129,106163,106169,106172,106176,106215,106218,106238,106242,106285,106287,106316,106319,106325,106328,106330,106724,106726,106738,106740,106751,106753,106756,106785,106793,106796,106831,106834,106836,106844,106847,106849,106860,106870,106890,106893,106929,106941,106989,107008,107050,107063,107091,107096,107117,107127,107145,107148,107182,107185,107205,107208,107227,107233,107235,107238,107244,107250,107260,107263,107269,107278,107280,107326,107328,107334,107340,107343,107346,107366,107369,107375,107381,107383,107406,107409,107412,107421,107424,107462,107464,107467,107473,107476],[10,105816,105812],{"id":105817},"_4关节actuator-与力控制",[14,105819,100638],{"id":100637},[19,105821,105822],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,105824,104322],{},[56,105826,105827,105833,105838,105842,105847],{},[59,105828,105829,105832],{},[99,105830,105831],{},"hinge"," 关节",[59,105834,105835],{},[99,105836,105837],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[59,105839,105840],{},[99,105841,101067],{},[59,105843,105844],{},[99,105845,105846],{},"ctrlrange",[59,105848,105849],{},"读取关节角和角速度",[19,105851,105852],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[93,105854,105856],{"className":30369,"code":105855,"language":30371,"meta":23,"style":23},"data.ctrl[0] = ...\n",[99,105857,105858],{"__ignoreMap":23},[102,105859,105860,105863,105865,105867,105869],{"class":104,"line":105},[102,105861,105862],{"class":112},"data.ctrl[",[102,105864,304],{"class":161},[102,105866,4432],{"class":112},[102,105868,158],{"class":108},[102,105870,105871],{"class":161}," ...\n",[19,105873,105874],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,105876,100761],{"id":100760},[19,105878,100764],{},[93,105880,105881],{"className":23812,"code":104379,"language":23814,"meta":23,"style":23},[99,105882,105883],{"__ignoreMap":23},[102,105884,105885,105887,105889,105891,105893,105895,105897,105899,105901],{"class":104,"line":105},[102,105886,24567],{"class":1952},[102,105888,26306],{"class":217},[102,105890,23824],{"class":217},[102,105892,26391],{"class":161},[102,105894,104394],{"class":217},[102,105896,100789],{"class":217},[102,105898,102492],{"class":217},[102,105900,100805],{"class":217},[102,105902,104403],{"class":217},[19,105904,102810],{},[93,105906,105907],{"className":23812,"code":100910,"language":23814,"meta":23,"style":23},[99,105908,105909],{"__ignoreMap":23},[102,105910,105911,105913,105915,105917],{"class":104,"line":105},[102,105912,23821],{"class":1952},[102,105914,23824],{"class":217},[102,105916,100921],{"class":217},[102,105918,100924],{"class":217},[19,105920,102827],{},[93,105922,105924],{"className":23812,"code":105923,"language":23814,"meta":23,"style":23},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[99,105925,105926,105943,105952],{"__ignoreMap":23},[102,105927,105928,105930,105932,105934,105937,105939,105941],{"class":104,"line":105},[102,105929,30321],{"class":1952},[102,105931,29167],{"class":217},[102,105933,25106],{"class":161},[102,105935,105936],{"class":217}," mujoco-control",[102,105938,100966],{"class":217},[102,105940,100969],{"class":161},[102,105942,100972],{"class":161},[102,105944,105945,105947,105949],{"class":104,"line":24},[102,105946,30321],{"class":1952},[102,105948,100979],{"class":217},[102,105950,105951],{"class":217}," mujoco-control\n",[102,105953,105954,105956,105958,105960],{"class":104,"line":1168},[102,105955,23821],{"class":1952},[102,105957,23824],{"class":217},[102,105959,100921],{"class":217},[102,105961,100924],{"class":217},[19,105963,100995],{},[56,105965,105966,105972,105979,105985],{},[59,105967,105968,105971],{},[99,105969,105970],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[59,105973,105974,105976,105977,28376],{},[99,105975,101067],{}," 长度等于 ",[99,105978,102149],{},[59,105980,82213,105981,105984],{},[99,105982,105983],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[59,105986,105987],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,105989,101036],{"id":101035},[19,105991,105992],{},"关节决定 body 如何运动:",[93,105994,105996],{"className":53058,"code":105995,"language":53060,"meta":23,"style":23},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[99,105997,105998],{"__ignoreMap":23},[102,105999,106000,106002,106004,106006,106008,106011,106013,106015,106017,106020,106022,106025],{"class":104,"line":105},[102,106001,1023],{"class":112},[102,106003,102947],{"class":51291},[102,106005,14910],{"class":1952},[102,106007,158],{"class":112},[102,106009,106010],{"class":217},"\"hinge\"",[102,106012,53815],{"class":1952},[102,106014,158],{"class":112},[102,106016,106010],{"class":217},[102,106018,106019],{"class":1952}," axis",[102,106021,158],{"class":112},[102,106023,106024],{"class":217},"\"0 1 0\"",[102,106026,101135],{"class":112},[19,106028,103043],{},[56,106030,106031,106036,106039],{},[59,106032,106033,106034],{},"名字是 ",[99,106035,105831],{},[59,106037,106038],{},"类型是旋转关节",[59,106040,106041],{},"绕 y 轴旋转",[19,106043,106044],{},"actuator 决定如何施加控制:",[93,106046,106048],{"className":53058,"code":106047,"language":53060,"meta":23,"style":23},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[99,106049,106050,106059,106105],{"__ignoreMap":23},[102,106051,106052,106054,106057],{"class":104,"line":105},[102,106053,1023],{"class":112},[102,106055,106056],{"class":51291},"actuator",[102,106058,51298],{"class":112},[102,106060,106061,106063,106066,106068,106070,106073,106076,106078,106080,106083,106085,106087,106090,106092,106095,106098,106100,106103],{"class":104,"line":24},[102,106062,52135],{"class":112},[102,106064,106065],{"class":51291},"motor",[102,106067,14910],{"class":1952},[102,106069,158],{"class":112},[102,106071,106072],{"class":217},"\"hinge_motor\"",[102,106074,106075],{"class":1952}," joint",[102,106077,158],{"class":112},[102,106079,106010],{"class":217},[102,106081,106082],{"class":1952}," gear",[102,106084,158],{"class":112},[102,106086,3667],{"class":217},[102,106088,106089],{"class":1952}," ctrlrange",[102,106091,158],{"class":112},[102,106093,106094],{"class":217},"\"-2 2\"",[102,106096,106097],{"class":1952}," ctrllimited",[102,106099,158],{"class":112},[102,106101,106102],{"class":217},"\"true\"",[102,106104,101135],{"class":112},[102,106106,106107,106109,106111],{"class":104,"line":1168},[102,106108,51776],{"class":112},[102,106110,106056],{"class":51291},[102,106112,51298],{"class":112},[19,106114,106115,106118,106119,28376],{},[99,106116,106117],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[99,106120,106121],{},"[-2, 2]",[73,106123,106125],{"id":106124},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106127,106128],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[250,106130,106131,106141],{},[253,106132,106133],{},[256,106134,106135,106137,106139],{},[259,106136,25744],{"align":23726},[259,106138,102687],{"align":23726},[259,106140,100725],{"align":23726},[297,106142,106143,106153],{},[256,106144,106145,106147,106150],{},[302,106146,102947],{"align":23726},[302,106148,106149],{"align":23726},"定义能怎么动",[302,106151,106152],{"align":23726},"门轴允许门旋转",[256,106154,106155,106157,106160],{},[302,106156,106056],{"align":23726},[302,106158,106159],{"align":23726},"定义怎么施力或控制",[302,106161,106162],{"align":23726},"人推门、马达带动门",[19,106164,106165,106166,106168],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[99,106167,101067],{}," 主动控制它。",[19,106170,106171],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[73,106173,106175],{"id":106174},"hinge-joint","hinge joint",[93,106177,106179],{"className":53058,"code":106178,"language":53060,"meta":23,"style":23},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[99,106180,106181],{"__ignoreMap":23},[102,106182,106183,106185,106187,106189,106191,106193,106195,106197,106199,106201,106203,106205,106208,106210,106213],{"class":104,"line":105},[102,106184,1023],{"class":112},[102,106186,102947],{"class":51291},[102,106188,14910],{"class":1952},[102,106190,158],{"class":112},[102,106192,106010],{"class":217},[102,106194,53815],{"class":1952},[102,106196,158],{"class":112},[102,106198,106010],{"class":217},[102,106200,106019],{"class":1952},[102,106202,158],{"class":112},[102,106204,106024],{"class":217},[102,106206,106207],{"class":1952}," damping",[102,106209,158],{"class":112},[102,106211,106212],{"class":217},"\"0.1\"",[102,106214,101135],{"class":112},[19,106216,106217],{},"含义：",[56,106219,106220,106226,106232],{},[59,106221,106222,106225],{},[99,106223,106224],{},"type=\"hinge\"","：只能绕一个轴旋转。",[59,106227,106228,106231],{},[99,106229,106230],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[59,106233,106234,106237],{},[99,106235,106236],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[73,106239,106241],{"id":106240},"motor-actuator","motor actuator",[93,106243,106245],{"className":53058,"code":106244,"language":53060,"meta":23,"style":23},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[99,106246,106247],{"__ignoreMap":23},[102,106248,106249,106251,106253,106255,106257,106259,106261,106263,106265,106267,106269,106271,106273,106275,106277,106279,106281,106283],{"class":104,"line":105},[102,106250,1023],{"class":112},[102,106252,106065],{"class":51291},[102,106254,14910],{"class":1952},[102,106256,158],{"class":112},[102,106258,106072],{"class":217},[102,106260,106075],{"class":1952},[102,106262,158],{"class":112},[102,106264,106010],{"class":217},[102,106266,106082],{"class":1952},[102,106268,158],{"class":112},[102,106270,3667],{"class":217},[102,106272,106089],{"class":1952},[102,106274,158],{"class":112},[102,106276,106094],{"class":217},[102,106278,106097],{"class":1952},[102,106280,158],{"class":112},[102,106282,106102],{"class":217},[102,106284,101135],{"class":112},[19,106286,106217],{},[56,106288,106289,106298,106304,106310],{},[59,106290,106291,106294,106295,106297],{},[99,106292,106293],{},"joint=\"hinge\"","：这个电机作用在名为 ",[99,106296,105831],{}," 的关节上。",[59,106299,106300,106303],{},[99,106301,106302],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[59,106305,106306,106309],{},[99,106307,106308],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[59,106311,106312,106315],{},[99,106313,106314],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106317,106318],{},"简单理解：",[93,106320,106323],{"className":106321,"code":106322,"language":5177,"meta":23},[5175],"实际施加效果 ≈ data.ctrl[0] * gear\n",[99,106324,106322],{"__ignoreMap":23},[19,106326,106327],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106329,101244],{"id":101243},[93,106331,106333],{"className":30369,"code":106332,"language":30371,"meta":23,"style":23},"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",[99,106334,106335,106342,106346,106352,106362,106366,106370,106378,106383,106388,106392,106396,106401,106406,106410,106415,106420,106425,106430,106434,106438,106442,106447,106452,106457,106461,106465,106469,106473,106485,106497,106505,106509,106519,106529,106539,106543,106556,106569,106573,106590,106604,106639,106643,106647,106658,106673,106688,106700,106704,106708,106720],{"__ignoreMap":23},[102,106336,106337,106339],{"class":104,"line":105},[102,106338,30383],{"class":108},[102,106340,106341],{"class":112}," math\n",[102,106343,106344],{"class":104,"line":24},[102,106345,2389],{"emptyLinePlaceholder":30},[102,106347,106348,106350],{"class":104,"line":1168},[102,106349,30383],{"class":108},[102,106351,101292],{"class":112},[102,106353,106354,106356,106358,106360],{"class":104,"line":1183},[102,106355,30383],{"class":108},[102,106357,31371],{"class":112},[102,106359,31374],{"class":108},[102,106361,31377],{"class":112},[102,106363,106364],{"class":104,"line":1189},[102,106365,2389],{"emptyLinePlaceholder":30},[102,106367,106368],{"class":104,"line":1203},[102,106369,2389],{"emptyLinePlaceholder":30},[102,106371,106372,106374,106376],{"class":104,"line":1209},[102,106373,101305],{"class":161},[102,106375,13554],{"class":108},[102,106377,101310],{"class":217},[102,106379,106380],{"class":104,"line":1300},[102,106381,106382],{"class":217},"\u003Cmujoco model=\"one_link_motor\">\n",[102,106384,106385],{"class":104,"line":1306},[102,106386,106387],{"class":217},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[102,106389,106390],{"class":104,"line":1318},[102,106391,2389],{"emptyLinePlaceholder":30},[102,106393,106394],{"class":104,"line":1601},[102,106395,101329],{"class":217},[102,106397,106398],{"class":104,"line":1606},[102,106399,106400],{"class":217},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[102,106402,106403],{"class":104,"line":1612},[102,106404,106405],{"class":217},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[102,106407,106408],{"class":104,"line":1617},[102,106409,2389],{"emptyLinePlaceholder":30},[102,106411,106412],{"class":104,"line":1631},[102,106413,106414],{"class":217},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[102,106416,106417],{"class":104,"line":1636},[102,106418,106419],{"class":217},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[102,106421,106422],{"class":104,"line":1642},[102,106423,106424],{"class":217},"        \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",[102,106426,106427],{"class":104,"line":1663},[102,106428,106429],{"class":217},"      \u003C\u002Fbody>\n",[102,106431,106432],{"class":104,"line":1668},[102,106433,101358],{"class":217},[102,106435,106436],{"class":104,"line":1682},[102,106437,101363],{"class":217},[102,106439,106440],{"class":104,"line":1687},[102,106441,2389],{"emptyLinePlaceholder":30},[102,106443,106444],{"class":104,"line":1716},[102,106445,106446],{"class":217},"  \u003Cactuator>\n",[102,106448,106449],{"class":104,"line":1721},[102,106450,106451],{"class":217},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[102,106453,106454],{"class":104,"line":1738},[102,106455,106456],{"class":217},"  \u003C\u002Factuator>\n",[102,106458,106459],{"class":104,"line":1743},[102,106460,101368],{"class":217},[102,106462,106463],{"class":104,"line":1748},[102,106464,95689],{"class":217},[102,106466,106467],{"class":104,"line":1753},[102,106468,2389],{"emptyLinePlaceholder":30},[102,106470,106471],{"class":104,"line":1767},[102,106472,2389],{"emptyLinePlaceholder":30},[102,106474,106475,106477,106479,106481,106483],{"class":104,"line":1772},[102,106476,31938],{"class":108},[102,106478,1962],{"class":1952},[102,106480,101389],{"class":112},[102,106482,95677],{"class":161},[102,106484,3728],{"class":112},[102,106486,106487,106489,106491,106493,106495],{"class":104,"line":2566},[102,106488,101398],{"class":112},[102,106490,158],{"class":108},[102,106492,101403],{"class":112},[102,106494,101305],{"class":161},[102,106496,119],{"class":112},[102,106498,106499,106501,106503],{"class":104,"line":2580},[102,106500,101412],{"class":112},[102,106502,158],{"class":108},[102,106504,101417],{"class":112},[102,106506,106507],{"class":104,"line":2588},[102,106508,2389],{"emptyLinePlaceholder":30},[102,106510,106511,106513,106515,106517],{"class":104,"line":2593},[102,106512,31290],{"class":161},[102,106514,113],{"class":112},[102,106516,101430],{"class":217},[102,106518,101433],{"class":112},[102,106520,106521,106523,106525,106527],{"class":104,"line":2599},[102,106522,31290],{"class":161},[102,106524,113],{"class":112},[102,106526,101442],{"class":217},[102,106528,101445],{"class":112},[102,106530,106531,106533,106535,106537],{"class":104,"line":2605},[102,106532,31290],{"class":161},[102,106534,113],{"class":112},[102,106536,101454],{"class":217},[102,106538,101457],{"class":112},[102,106540,106541],{"class":104,"line":2610},[102,106542,2389],{"emptyLinePlaceholder":30},[102,106544,106545,106547,106550,106552,106554],{"class":104,"line":7938},[102,106546,3090],{"class":108},[102,106548,106549],{"class":112}," model.nu ",[102,106551,20938],{"class":108},[102,106553,25109],{"class":161},[102,106555,3728],{"class":112},[102,106557,106558,106560,106562,106564,106567],{"class":104,"line":7962},[102,106559,103423],{"class":108},[102,106561,103426],{"class":161},[102,106563,113],{"class":112},[102,106565,106566],{"class":217},"\"expected exactly one actuator\"",[102,106568,119],{"class":112},[102,106570,106571],{"class":104,"line":7967},[102,106572,2389],{"emptyLinePlaceholder":30},[102,106574,106575,106577,106579,106581,106583,106585,106588],{"class":104,"line":7973},[102,106576,3190],{"class":108},[102,106578,31607],{"class":112},[102,106580,26034],{"class":108},[102,106582,32434],{"class":161},[102,106584,113],{"class":112},[102,106586,106587],{"class":161},"2000",[102,106589,30777],{"class":112},[102,106591,106592,106595,106597,106599,106601],{"class":104,"line":8000},[102,106593,106594],{"class":112},"        t ",[102,106596,158],{"class":108},[102,106598,31607],{"class":112},[102,106600,568],{"class":108},[102,106602,106603],{"class":112}," model.opt.timestep\n",[102,106605,106606,106609,106611,106613,106615,106618,106620,106623,106625,106627,106630,106632,106634,106636],{"class":104,"line":8005},[102,106607,106608],{"class":112},"        data.ctrl[",[102,106610,304],{"class":161},[102,106612,4432],{"class":112},[102,106614,158],{"class":108},[102,106616,106617],{"class":161}," 1.5",[102,106619,6508],{"class":108},[102,106621,106622],{"class":112}," math.sin(",[102,106624,105251],{"class":161},[102,106626,6508],{"class":108},[102,106628,106629],{"class":112}," math.pi ",[102,106631,568],{"class":108},[102,106633,61858],{"class":161},[102,106635,6508],{"class":108},[102,106637,106638],{"class":112}," t)\n",[102,106640,106641],{"class":104,"line":8011},[102,106642,101507],{"class":112},[102,106644,106645],{"class":104,"line":8023},[102,106646,2389],{"emptyLinePlaceholder":30},[102,106648,106649,106651,106653,106656],{"class":104,"line":8035},[102,106650,31290],{"class":161},[102,106652,113],{"class":112},[102,106654,106655],{"class":217},"\"time:\"",[102,106657,101469],{"class":112},[102,106659,106660,106662,106664,106667,106669,106671],{"class":104,"line":8047},[102,106661,31290],{"class":161},[102,106663,113],{"class":112},[102,106665,106666],{"class":217},"\"joint qpos:\"",[102,106668,104921],{"class":112},[102,106670,406],{"class":161},[102,106672,30488],{"class":112},[102,106674,106675,106677,106679,106682,106684,106686],{"class":104,"line":9706},[102,106676,31290],{"class":161},[102,106678,113],{"class":112},[102,106680,106681],{"class":217},"\"joint qvel:\"",[102,106683,104937],{"class":112},[102,106685,406],{"class":161},[102,106687,30488],{"class":112},[102,106689,106690,106692,106694,106697],{"class":104,"line":9731},[102,106691,31290],{"class":161},[102,106693,113],{"class":112},[102,106695,106696],{"class":217},"\"last ctrl:\"",[102,106698,106699],{"class":112},", data.ctrl.copy())\n",[102,106701,106702],{"class":104,"line":9754},[102,106703,2389],{"emptyLinePlaceholder":30},[102,106705,106706],{"class":104,"line":9778},[102,106707,2389],{"emptyLinePlaceholder":30},[102,106709,106710,106712,106714,106716,106718],{"class":104,"line":9783},[102,106711,1520],{"class":108},[102,106713,31211],{"class":161},[102,106715,101550],{"class":108},[102,106717,101553],{"class":217},[102,106719,3728],{"class":112},[102,106721,106722],{"class":104,"line":9788},[102,106723,101560],{"class":112},[19,106725,103561],{},[93,106727,106729],{"className":23812,"code":106728,"language":23814,"meta":23,"style":23},"touch ch4_joint_motor.py\n",[99,106730,106731],{"__ignoreMap":23},[102,106732,106733,106735],{"class":104,"line":105},[102,106734,101274],{"class":1952},[102,106736,106737],{"class":217}," ch4_joint_motor.py\n",[19,106739,102292],{},[93,106741,106743],{"className":23812,"code":106742,"language":23814,"meta":23,"style":23},"python ch4_joint_motor.py\n",[99,106744,106745],{"__ignoreMap":23},[102,106746,106747,106749],{"class":104,"line":105},[102,106748,30371],{"class":1952},[102,106750,106737],{"class":217},[73,106752,101563],{"id":101563},[19,106754,106755],{},"检查 actuator 数量：",[93,106757,106759],{"className":30369,"code":106758,"language":30371,"meta":23,"style":23},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[99,106760,106761,106773],{"__ignoreMap":23},[102,106762,106763,106765,106767,106769,106771],{"class":104,"line":105},[102,106764,1520],{"class":108},[102,106766,106549],{"class":112},[102,106768,20938],{"class":108},[102,106770,25109],{"class":161},[102,106772,3728],{"class":112},[102,106774,106775,106777,106779,106781,106783],{"class":104,"line":24},[102,106776,103886],{"class":108},[102,106778,103426],{"class":161},[102,106780,113],{"class":112},[102,106782,106566],{"class":217},[102,106784,119],{"class":112},[19,106786,106787,106789,106790,106792],{},[99,106788,102149],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[99,106791,101067],{}," 长度应该是 1。",[19,106794,106795],{},"产生正弦控制信号：",[93,106797,106799],{"className":30369,"code":106798,"language":30371,"meta":23,"style":23},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[99,106800,106801],{"__ignoreMap":23},[102,106802,106803,106805,106807,106809,106811,106813,106815,106817,106819,106821,106823,106825,106827,106829],{"class":104,"line":105},[102,106804,105862],{"class":112},[102,106806,304],{"class":161},[102,106808,4432],{"class":112},[102,106810,158],{"class":108},[102,106812,106617],{"class":161},[102,106814,6508],{"class":108},[102,106816,106622],{"class":112},[102,106818,105251],{"class":161},[102,106820,6508],{"class":108},[102,106822,106629],{"class":112},[102,106824,568],{"class":108},[102,106826,61858],{"class":161},[102,106828,6508],{"class":108},[102,106830,106638],{"class":112},[19,106832,106833],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,106835,101664],{},[93,106837,106838],{"className":30369,"code":104496,"language":30371,"meta":23,"style":23},[99,106839,106840],{"__ignoreMap":23},[102,106841,106842],{"class":104,"line":105},[102,106843,104496],{"class":112},[19,106845,106846],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[73,106848,101699],{"id":101699},[93,106850,106852],{"className":30369,"code":106851,"language":30371,"meta":23,"style":23},"import math\n",[99,106853,106854],{"__ignoreMap":23},[102,106855,106856,106858],{"class":104,"line":105},[102,106857,30383],{"class":108},[102,106859,106341],{"class":112},[19,106861,106862,106863,101009,106866,106869],{},"导入 Python 标准库里的数学模块。后面要用 ",[99,106864,106865],{},"math.sin",[99,106867,106868],{},"math.pi"," 生成周期变化的控制信号。",[93,106871,106872],{"className":30369,"code":103677,"language":30371,"meta":23,"style":23},[99,106873,106874,106880],{"__ignoreMap":23},[102,106875,106876,106878],{"class":104,"line":105},[102,106877,30383],{"class":108},[102,106879,101292],{"class":112},[102,106881,106882,106884,106886,106888],{"class":104,"line":24},[102,106883,30383],{"class":108},[102,106885,31371],{"class":112},[102,106887,31374],{"class":108},[102,106889,31377],{"class":112},[19,106891,106892],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[93,106894,106895],{"className":53058,"code":106178,"language":53060,"meta":23,"style":23},[99,106896,106897],{"__ignoreMap":23},[102,106898,106899,106901,106903,106905,106907,106909,106911,106913,106915,106917,106919,106921,106923,106925,106927],{"class":104,"line":105},[102,106900,1023],{"class":112},[102,106902,102947],{"class":51291},[102,106904,14910],{"class":1952},[102,106906,158],{"class":112},[102,106908,106010],{"class":217},[102,106910,53815],{"class":1952},[102,106912,158],{"class":112},[102,106914,106010],{"class":217},[102,106916,106019],{"class":1952},[102,106918,158],{"class":112},[102,106920,106024],{"class":217},[102,106922,106207],{"class":1952},[102,106924,158],{"class":112},[102,106926,106212],{"class":217},[102,106928,101135],{"class":112},[19,106930,106931,106932,106934,106935,106937,106938,106940],{},"这行定义关节。",[99,106933,105831],{}," 表示旋转关节。",[99,106936,106230],{}," 表示绕 y 轴旋转。",[99,106939,106236],{}," 表示有一点阻尼，运动不会完全无损耗。",[93,106942,106944],{"className":53058,"code":106943,"language":53060,"meta":23,"style":23},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[99,106945,106946],{"__ignoreMap":23},[102,106947,106948,106950,106952,106954,106956,106959,106961,106963,106966,106969,106971,106974,106976,106978,106980,106982,106984,106987],{"class":104,"line":105},[102,106949,1023],{"class":112},[102,106951,101111],{"class":51291},[102,106953,14910],{"class":1952},[102,106955,158],{"class":112},[102,106957,106958],{"class":217},"\"link_geom\"",[102,106960,53815],{"class":1952},[102,106962,158],{"class":112},[102,106964,106965],{"class":217},"\"capsule\"",[102,106967,106968],{"class":1952}," fromto",[102,106970,158],{"class":112},[102,106972,106973],{"class":217},"\"0 0 0 0 0 0.5\"",[102,106975,101127],{"class":1952},[102,106977,158],{"class":112},[102,106979,103769],{"class":217},[102,106981,101992],{"class":1952},[102,106983,158],{"class":112},[102,106985,106986],{"class":217},"\"0.5\"",[102,106988,101135],{"class":112},[19,106990,106991,106992,106994,106995,106997,106998,107001,107002,28376,107005,107007],{},"这行定义摆杆的形状。",[99,106993,103156],{}," 是胶囊体，适合表示杆子。",[99,106996,103167],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[99,106999,107000],{},"(0,0,0)"," 延伸到 ",[99,107003,107004],{},"(0,0,0.5)",[99,107006,103161],{}," 是半径。",[93,107009,107010],{"className":53058,"code":106244,"language":53060,"meta":23,"style":23},[99,107011,107012],{"__ignoreMap":23},[102,107013,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034,107036,107038,107040,107042,107044,107046,107048],{"class":104,"line":105},[102,107015,1023],{"class":112},[102,107017,106065],{"class":51291},[102,107019,14910],{"class":1952},[102,107021,158],{"class":112},[102,107023,106072],{"class":217},[102,107025,106075],{"class":1952},[102,107027,158],{"class":112},[102,107029,106010],{"class":217},[102,107031,106082],{"class":1952},[102,107033,158],{"class":112},[102,107035,3667],{"class":217},[102,107037,106089],{"class":1952},[102,107039,158],{"class":112},[102,107041,106094],{"class":217},[102,107043,106097],{"class":1952},[102,107045,158],{"class":112},[102,107047,106102],{"class":217},[102,107049,101135],{"class":112},[19,107051,107052,107053,107055,107056,107059,107060,107062],{},"这行定义电机。它作用在 ",[99,107054,105831],{}," 关节上。",[99,107057,107058],{},"gear"," 可以理解成放大倍数。",[99,107061,105846],{}," 限制控制输入范围。",[93,107064,107065],{"className":30369,"code":106758,"language":30371,"meta":23,"style":23},[99,107066,107067,107079],{"__ignoreMap":23},[102,107068,107069,107071,107073,107075,107077],{"class":104,"line":105},[102,107070,1520],{"class":108},[102,107072,106549],{"class":112},[102,107074,20938],{"class":108},[102,107076,25109],{"class":161},[102,107078,3728],{"class":112},[102,107080,107081,107083,107085,107087,107089],{"class":104,"line":24},[102,107082,103886],{"class":108},[102,107084,103426],{"class":161},[102,107086,113],{"class":112},[102,107088,106566],{"class":217},[102,107090,119],{"class":112},[19,107092,107093,107095],{},[99,107094,102149],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[93,107097,107099],{"className":30369,"code":107098,"language":30371,"meta":23,"style":23},"for step in range(2000):\n",[99,107100,107101],{"__ignoreMap":23},[102,107102,107103,107105,107107,107109,107111,107113,107115],{"class":104,"line":105},[102,107104,3014],{"class":108},[102,107106,31607],{"class":112},[102,107108,26034],{"class":108},[102,107110,32434],{"class":161},[102,107112,113],{"class":112},[102,107114,106587],{"class":161},[102,107116,30777],{"class":112},[19,107118,107119,107120,107122,107123,107126],{},"循环 2000 步。这里没有用 ",[99,107121,1105],{},"，而是用 ",[99,107124,107125],{},"step","，因为后面要用当前步数计算时间。",[93,107128,107130],{"className":30369,"code":107129,"language":30371,"meta":23,"style":23},"t = step * model.opt.timestep\n",[99,107131,107132],{"__ignoreMap":23},[102,107133,107134,107137,107139,107141,107143],{"class":104,"line":105},[102,107135,107136],{"class":112},"t ",[102,107138,158],{"class":108},[102,107140,31607],{"class":112},[102,107142,568],{"class":108},[102,107144,106603],{"class":112},[19,107146,107147],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[93,107149,107150],{"className":30369,"code":106798,"language":30371,"meta":23,"style":23},[99,107151,107152],{"__ignoreMap":23},[102,107153,107154,107156,107158,107160,107162,107164,107166,107168,107170,107172,107174,107176,107178,107180],{"class":104,"line":105},[102,107155,105862],{"class":112},[102,107157,304],{"class":161},[102,107159,4432],{"class":112},[102,107161,158],{"class":108},[102,107163,106617],{"class":161},[102,107165,6508],{"class":108},[102,107167,106622],{"class":112},[102,107169,105251],{"class":161},[102,107171,6508],{"class":108},[102,107173,106629],{"class":112},[102,107175,568],{"class":108},[102,107177,61858],{"class":161},[102,107179,6508],{"class":108},[102,107181,106638],{"class":112},[19,107183,107184],{},"这行给电机输入一个正弦波。拆开看：",[56,107186,107187,107193,107199],{},[59,107188,107189,107192],{},[99,107190,107191],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[59,107194,107195,107198],{},[99,107196,107197],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[59,107200,107201,107204],{},[99,107202,107203],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107206,107207],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[93,107209,107211],{"className":30369,"code":107210,"language":30371,"meta":23,"style":23},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[99,107212,107213],{"__ignoreMap":23},[102,107214,107215,107217,107219,107221,107223,107225],{"class":104,"line":105},[102,107216,30406],{"class":161},[102,107218,113],{"class":112},[102,107220,106666],{"class":217},[102,107222,104921],{"class":112},[102,107224,406],{"class":161},[102,107226,30488],{"class":112},[19,107228,107229,107230,107232],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[99,107231,101061],{}," 只有一个数。",[14,107234,102307],{"id":102306},[19,107236,107237],{},"输出类似:",[93,107239,107242],{"className":107240,"code":107241,"language":5177,"meta":23},[5175],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[99,107243,107241],{"__ignoreMap":23},[19,107245,107246,107247,107249],{},"这里 ",[99,107248,106117],{}," 是电机输入。",[19,107251,107252,107255,107256,107259],{},[99,107253,107254],{},"joint qpos"," 是关节角度，单位通常是弧度。",[99,107257,107258],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107261,107262],{},"角度单位提示：",[93,107264,107267],{"className":107265,"code":107266,"language":5177,"meta":23},[5175],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[99,107268,107266],{"__ignoreMap":23},[19,107270,107271,107272,107274,107275,107277],{},"如果你看到 ",[99,107273,104021],{}," 是 ",[99,107276,35320],{},"，大约就是 28.6 度。",[14,107279,102339],{"id":102338},[56,107281,107282,107289,107292,107299,107302,107310,107318],{},[59,107283,102402,107284,102405,107286,28376],{},[99,107285,106302],{},[99,107287,107288],{},"gear=\"5\"",[59,107290,107291],{},"重新运行，观察关节运动是否更剧烈。",[59,107293,102402,107294,102405,107296,28376],{},[99,107295,105846],{},[99,107297,107298],{},"-0.2 0.2",[59,107300,107301],{},"重新运行，观察控制能力是否变弱。",[59,107303,107304,107305,107307,107308,28376],{},"去掉 actuator，确认 ",[99,107306,102149],{}," 变成 ",[99,107309,304],{},[59,107311,102402,107312,102405,107314,107317],{},[99,107313,106236],{},[99,107315,107316],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[59,107319,102402,107320,102405,107322,107325],{},[99,107321,106230],{},[99,107323,107324],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107327,102444],{"id":102443},[73,107329,107331],{"id":107330},"indexerror-index-0-is-out-of-bounds",[99,107332,107333],{},"IndexError: index 0 is out of bounds",[19,107335,107336,107337,107339],{},"原因是 ",[99,107338,105983],{},"，没有 actuator。",[73,107341,107342],{"id":107342},"关节几乎不动",[19,107344,107345],{},"可能原因:",[56,107347,107348,107353,107357,107363],{},[59,107349,107350,107352],{},[99,107351,107058],{}," 太小",[59,107354,107355,107352],{},[99,107356,105846],{},[59,107358,107359,107362],{},[99,107360,107361],{},"damping"," 太大",[59,107364,107365],{},"重力方向导致运动不明显",[73,107367,107368],{"id":107368},"模型编译失败",[19,107370,107371,107372,107374],{},"检查 actuator 引用的 ",[99,107373,106293],{}," 是否存在，joint 名称是否拼写一致。",[73,107376,107378,107380],{"id":107377},"datactrl0-写了但没有效果",[99,107379,106117],{}," 写了但没有效果",[19,107382,102566],{},[56,107384,107385,107390,107393,107398,107403],{},[59,107386,107387,107389],{},[99,107388,102149],{}," 是否大于 0。",[59,107391,107392],{},"motor 是否引用了正确 joint。",[59,107394,107395,107397],{},[99,107396,107058],{}," 是否太小。",[59,107399,107400,107402],{},[99,107401,105846],{}," 是否把输入限制得太小。",[59,107404,107405],{},"body 是否真的有可动 joint。",[73,107407,107408],{"id":107408},"控制输入超过范围会怎样",[19,107410,107411],{},"如果设置了：",[93,107413,107415],{"className":53058,"code":107414,"language":53060,"meta":23,"style":23},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[99,107416,107417],{"__ignoreMap":23},[102,107418,107419],{"class":104,"line":105},[102,107420,107414],{"class":112},[19,107422,107423],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[93,107425,107427],{"className":30369,"code":107426,"language":30371,"meta":23,"style":23},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[99,107428,107429,107449],{"__ignoreMap":23},[102,107430,107431,107434,107436,107439,107441,107443,107445,107447],{"class":104,"line":105},[102,107432,107433],{"class":112},"action ",[102,107435,158],{"class":108},[102,107437,107438],{"class":112}," np.clip(action, ",[102,107440,645],{"class":108},[102,107442,105251],{"class":161},[102,107444,12425],{"class":112},[102,107446,105251],{"class":161},[102,107448,119],{"class":112},[102,107450,107451,107453,107455,107457,107459],{"class":104,"line":24},[102,107452,105862],{"class":112},[102,107454,304],{"class":161},[102,107456,4432],{"class":112},[102,107458,158],{"class":108},[102,107460,107461],{"class":112}," action\n",[14,107463,102598],{"id":102597},[19,107465,107466],{},"这一章建立了控制任务的基本形式：",[93,107468,107471],{"className":107469,"code":107470,"language":5177,"meta":23},[5175],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[99,107472,107470],{"__ignoreMap":23},[19,107474,107475],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5116,107477,107478],{},"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":23,"searchDepth":24,"depth":24,"links":107480},[107481,107482,107483,107488,107492,107493,107494,107502],{"id":100637,"depth":24,"text":100638},{"id":100760,"depth":24,"text":100761},{"id":101035,"depth":24,"text":101036,"children":107484},[107485,107486,107487],{"id":106124,"depth":1168,"text":106125},{"id":106174,"depth":1168,"text":106175},{"id":106240,"depth":1168,"text":106241},{"id":101243,"depth":24,"text":101244,"children":107489},[107490,107491],{"id":101563,"depth":1168,"text":101563},{"id":101699,"depth":1168,"text":101699},{"id":102306,"depth":24,"text":102307},{"id":102338,"depth":24,"text":102339},{"id":102443,"depth":24,"text":102444,"children":107495},[107496,107497,107498,107499,107501],{"id":107330,"depth":1168,"text":107333},{"id":107342,"depth":1168,"text":107342},{"id":107368,"depth":1168,"text":107368},{"id":107377,"depth":1168,"text":107500},"data.ctrl[0] 写了但没有效果",{"id":107408,"depth":1168,"text":107408},{"id":102597,"depth":24,"text":102598},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105812,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107509,"title":107510,"body":107511,"description":23,"extension":28,"meta":109420,"navigation":30,"path":109421,"seo":109422,"stem":109423,"__hash__":109424},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107512,"toc":109396},[107513,107516,107518,107521,107529,107532,107549,107552,107577,107580,107626,107628,107630,107685,107687,107706,107708,107751,107754,107771,107774,107790,107800,107807,107809,107812,107815,107849,107852,107900,107904,107907,107921,107930,107934,107937,107962,107965,107969,107982,107985,107991,107994,108009,108011,108014,108274,108276,108288,108291,108603,108605,108617,108619,108622,108637,108642,108645,108667,108670,108673,108707,108710,108714,108725,108728,108745,108748,108762,108769,108789,108796,108810,108813,108825,108840,108860,108863,108885,108888,108892,108907,108918,108933,108936,108966,108982,109011,109019,109043,109046,109064,109074,109086,109093,109102,109108,109117,109120,109122,109131,109134,109149,109151,109154,109165,109168,109179,109182,109200,109202,109219,109222,109250,109252,109256,109259,109289,109295,109298,109302,109310,109313,109315,109336,109339,109342,109358,109361,109377,109379,109382,109393],[10,107514,107510],{"id":107515},"_5viewer-可视化与-renderer-离屏渲染",[14,107517,100638],{"id":100637},[19,107519,107520],{},"本章掌握两类可视化方式:",[56,107522,107523,107526],{},[59,107524,107525],{},"交互式 viewer: 适合人工观察仿真",[59,107527,107528],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107530,107531],{},"使用官方接口:",[93,107533,107535],{"className":30369,"code":107534,"language":30371,"meta":23,"style":23},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[99,107536,107537,107544],{"__ignoreMap":23},[102,107538,107539,107541],{"class":104,"line":105},[102,107540,30383],{"class":108},[102,107542,107543],{"class":112}," mujoco.viewer\n",[102,107545,107546],{"class":104,"line":24},[102,107547,107548],{"class":112},"mujoco.viewer.launch_passive(model, data)\n",[19,107550,107551],{},"以及:",[93,107553,107555],{"className":30369,"code":107554,"language":30371,"meta":23,"style":23},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[99,107556,107557,107567],{"__ignoreMap":23},[102,107558,107559,107562,107564],{"class":104,"line":105},[102,107560,107561],{"class":112},"renderer ",[102,107563,158],{"class":108},[102,107565,107566],{"class":112}," mujoco.Renderer(model)\n",[102,107568,107569,107572,107574],{"class":104,"line":24},[102,107570,107571],{"class":112},"image ",[102,107573,158],{"class":108},[102,107575,107576],{"class":112}," renderer.render()\n",[19,107578,107579],{},"新手建议先理解二者区别：",[250,107581,107582,107598],{},[253,107583,107584],{},[256,107585,107586,107589,107592,107595],{},[259,107587,107588],{"align":23726},"工具",[259,107590,107591],{"align":23726},"用途",[259,107593,107594],{"align":23726},"是否打开窗口",[259,107596,107597],{"align":23726},"常见场景",[297,107599,107600,107613],{},[256,107601,107602,107605,107608,107610],{},[302,107603,107604],{"align":23726},"Viewer",[302,107606,107607],{"align":23726},"人眼实时观察仿真",[302,107609,104656],{"align":23726},[302,107611,107612],{"align":23726},"调试模型、看控制效果",[256,107614,107615,107618,107621,107623],{},[302,107616,107617],{"align":23726},"Renderer",[302,107619,107620],{"align":23726},"生成图像数组",[302,107622,104669],{"align":23726},[302,107624,107625],{"align":23726},"保存图片、训练视觉策略、服务器批量采集",[14,107627,100761],{"id":100760},[19,107629,100764],{},[93,107631,107633],{"className":23812,"code":107632,"language":23814,"meta":23,"style":23},"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",[99,107634,107635,107647,107657,107665,107673],{"__ignoreMap":23},[102,107636,107637,107639,107641,107643,107645],{"class":104,"line":105},[102,107638,24567],{"class":1952},[102,107640,26306],{"class":217},[102,107642,23824],{"class":217},[102,107644,26391],{"class":161},[102,107646,24669],{"class":161},[102,107648,107649,107651,107653,107655],{"class":104,"line":24},[102,107650,100799],{"class":217},[102,107652,100802],{"class":217},[102,107654,100805],{"class":217},[102,107656,24669],{"class":161},[102,107658,107659,107661,107663],{"class":104,"line":1168},[102,107660,100812],{"class":217},[102,107662,100815],{"class":217},[102,107664,24669],{"class":161},[102,107666,107667,107669,107671],{"class":104,"line":1183},[102,107668,100822],{"class":217},[102,107670,100825],{"class":217},[102,107672,24669],{"class":161},[102,107674,107675,107677,107679,107681,107683],{"class":104,"line":1189},[102,107676,100832],{"class":217},[102,107678,100835],{"class":217},[102,107680,100838],{"class":217},[102,107682,100841],{"class":217},[102,107684,102507],{"class":217},[19,107686,102810],{},[93,107688,107690],{"className":23812,"code":107689,"language":23814,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy pillow\n",[99,107691,107692],{"__ignoreMap":23},[102,107693,107694,107696,107698,107700,107703],{"class":104,"line":105},[102,107695,23821],{"class":1952},[102,107697,23824],{"class":217},[102,107699,100921],{"class":217},[102,107701,107702],{"class":217}," numpy",[102,107704,107705],{"class":217}," pillow\n",[19,107707,102827],{},[93,107709,107711],{"className":23812,"code":107710,"language":23814,"meta":23,"style":23},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[99,107712,107713,107730,107739],{"__ignoreMap":23},[102,107714,107715,107717,107719,107721,107724,107726,107728],{"class":104,"line":105},[102,107716,30321],{"class":1952},[102,107718,29167],{"class":217},[102,107720,25106],{"class":161},[102,107722,107723],{"class":217}," mujoco-render",[102,107725,100966],{"class":217},[102,107727,100969],{"class":161},[102,107729,100972],{"class":161},[102,107731,107732,107734,107736],{"class":104,"line":24},[102,107733,30321],{"class":1952},[102,107735,100979],{"class":217},[102,107737,107738],{"class":217}," mujoco-render\n",[102,107740,107741,107743,107745,107747,107749],{"class":104,"line":1168},[102,107742,23821],{"class":1952},[102,107744,23824],{"class":217},[102,107746,100921],{"class":217},[102,107748,107702],{"class":217},[102,107750,107705],{"class":217},[19,107752,107753],{},"离屏渲染后端:",[93,107755,107757],{"className":23812,"code":107756,"language":23814,"meta":23,"style":23},"export MUJOCO_GL=egl\n",[99,107758,107759],{"__ignoreMap":23},[102,107760,107761,107763,107766,107768],{"class":104,"line":105},[102,107762,25033],{"class":108},[102,107764,107765],{"class":112}," MUJOCO_GL",[102,107767,158],{"class":108},[102,107769,107770],{"class":112},"egl\n",[19,107772,107773],{},"或:",[93,107775,107777],{"className":23812,"code":107776,"language":23814,"meta":23,"style":23},"export MUJOCO_GL=osmesa\n",[99,107778,107779],{"__ignoreMap":23},[102,107780,107781,107783,107785,107787],{"class":104,"line":105},[102,107782,25033],{"class":108},[102,107784,107765],{"class":112},[102,107786,158],{"class":108},[102,107788,107789],{"class":112},"osmesa\n",[19,107791,107792,107793,107796,107797,28376],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[99,107794,107795],{},"egl"," 失败，再尝试 ",[99,107798,107799],{},"osmesa",[19,107801,107802,107803,107806],{},"如果你在本机桌面环境运行，通常先不要设置 ",[99,107804,107805],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,107808,101036],{"id":101035},[19,107810,107811],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,107813,107814],{},"典型 viewer 流程:",[93,107816,107818],{"className":30369,"code":107817,"language":30371,"meta":23,"style":23},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[99,107819,107820,107833,107840,107844],{"__ignoreMap":23},[102,107821,107822,107825,107828,107830],{"class":104,"line":105},[102,107823,107824],{"class":108},"with",[102,107826,107827],{"class":112}," mujoco.viewer.launch_passive(model, data) ",[102,107829,31374],{"class":108},[102,107831,107832],{"class":112}," viewer:\n",[102,107834,107835,107837],{"class":104,"line":24},[102,107836,2240],{"class":108},[102,107838,107839],{"class":112}," viewer.is_running():\n",[102,107841,107842],{"class":104,"line":1168},[102,107843,101507],{"class":112},[102,107845,107846],{"class":104,"line":1183},[102,107847,107848],{"class":112},"        viewer.sync()\n",[19,107850,107851],{},"典型 renderer 流程:",[93,107853,107855],{"className":30369,"code":107854,"language":30371,"meta":23,"style":23},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[99,107856,107857,107883,107887,107892],{"__ignoreMap":23},[102,107858,107859,107861,107863,107866,107868,107870,107872,107874,107876,107878,107881],{"class":104,"line":105},[102,107860,107561],{"class":112},[102,107862,158],{"class":108},[102,107864,107865],{"class":112}," mujoco.Renderer(model, ",[102,107867,24972],{"class":5206},[102,107869,158],{"class":108},[102,107871,42333],{"class":161},[102,107873,12425],{"class":112},[102,107875,24968],{"class":5206},[102,107877,158],{"class":108},[102,107879,107880],{"class":161},"640",[102,107882,119],{"class":112},[102,107884,107885],{"class":104,"line":24},[102,107886,104496],{"class":112},[102,107888,107889],{"class":104,"line":1168},[102,107890,107891],{"class":112},"renderer.update_scene(data)\n",[102,107893,107894,107896,107898],{"class":104,"line":1183},[102,107895,107571],{"class":112},[102,107897,158],{"class":108},[102,107899,107576],{"class":112},[73,107901,107903],{"id":107902},"viewer-的同步逻辑","viewer 的同步逻辑",[19,107905,107906],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[93,107908,107910],{"className":30369,"code":107909,"language":30371,"meta":23,"style":23},"mujoco.mj_step(model, data)\nviewer.sync()\n",[99,107911,107912,107916],{"__ignoreMap":23},[102,107913,107914],{"class":104,"line":105},[102,107915,104496],{"class":112},[102,107917,107918],{"class":104,"line":24},[102,107919,107920],{"class":112},"viewer.sync()\n",[19,107922,107923,107925,107926,107929],{},[99,107924,101206],{}," 负责算物理，",[99,107927,107928],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[73,107931,107933],{"id":107932},"为什么要-sleep","为什么要 sleep",[19,107935,107936],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[93,107938,107940],{"className":30369,"code":107939,"language":30371,"meta":23,"style":23},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[99,107941,107942],{"__ignoreMap":23},[102,107943,107944,107947,107949,107952,107954,107957,107959],{"class":104,"line":105},[102,107945,107946],{"class":112},"sleep_time ",[102,107948,158],{"class":108},[102,107950,107951],{"class":112}," model.opt.timestep ",[102,107953,645],{"class":108},[102,107955,107956],{"class":112}," (time.time() ",[102,107958,645],{"class":108},[102,107960,107961],{"class":112}," step_start)\n",[19,107963,107964],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[73,107966,107968],{"id":107967},"renderer-输出是什么","renderer 输出是什么",[93,107970,107972],{"className":30369,"code":107971,"language":30371,"meta":23,"style":23},"image = renderer.render()\n",[99,107973,107974],{"__ignoreMap":23},[102,107975,107976,107978,107980],{"class":104,"line":105},[102,107977,107571],{"class":112},[102,107979,158],{"class":108},[102,107981,107576],{"class":112},[19,107983,107984],{},"得到的是 NumPy 数组，形状通常是：",[93,107986,107989],{"className":107987,"code":107988,"language":5177,"meta":23},[5175],"(height, width, 3)\n",[99,107990,107988],{"__ignoreMap":23},[19,107992,107993],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[93,107995,107997],{"className":30369,"code":107996,"language":30371,"meta":23,"style":23},"Image.fromarray(image).save(\"render_output.png\")\n",[99,107998,107999],{"__ignoreMap":23},[102,108000,108001,108004,108007],{"class":104,"line":105},[102,108002,108003],{"class":112},"Image.fromarray(image).save(",[102,108005,108006],{"class":217},"\"render_output.png\"",[102,108008,119],{"class":112},[14,108010,101244],{"id":101243},[19,108012,108013],{},"交互式 Viewer:",[93,108015,108017],{"className":30369,"code":108016,"language":30371,"meta":23,"style":23},"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",[99,108018,108019,108025,108029,108035,108041,108045,108049,108057,108062,108066,108070,108074,108079,108084,108088,108092,108096,108101,108105,108109,108113,108117,108121,108125,108137,108149,108157,108161,108171,108191,108201,108206,108211,108215,108232,108245,108250,108254,108258,108270],{"__ignoreMap":23},[102,108020,108021,108023],{"class":104,"line":105},[102,108022,30383],{"class":108},[102,108024,31820],{"class":112},[102,108026,108027],{"class":104,"line":24},[102,108028,2389],{"emptyLinePlaceholder":30},[102,108030,108031,108033],{"class":104,"line":1168},[102,108032,30383],{"class":108},[102,108034,101292],{"class":112},[102,108036,108037,108039],{"class":104,"line":1183},[102,108038,30383],{"class":108},[102,108040,107543],{"class":112},[102,108042,108043],{"class":104,"line":1189},[102,108044,2389],{"emptyLinePlaceholder":30},[102,108046,108047],{"class":104,"line":1203},[102,108048,2389],{"emptyLinePlaceholder":30},[102,108050,108051,108053,108055],{"class":104,"line":1209},[102,108052,101305],{"class":161},[102,108054,13554],{"class":108},[102,108056,101310],{"class":217},[102,108058,108059],{"class":104,"line":1300},[102,108060,108061],{"class":217},"\u003Cmujoco model=\"viewer_demo\">\n",[102,108063,108064],{"class":104,"line":1306},[102,108065,101320],{"class":217},[102,108067,108068],{"class":104,"line":1318},[102,108069,2389],{"emptyLinePlaceholder":30},[102,108071,108072],{"class":104,"line":1601},[102,108073,101329],{"class":217},[102,108075,108076],{"class":104,"line":1606},[102,108077,108078],{"class":217},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[102,108080,108081],{"class":104,"line":1612},[102,108082,108083],{"class":217},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[102,108085,108086],{"class":104,"line":1617},[102,108087,2389],{"emptyLinePlaceholder":30},[102,108089,108090],{"class":104,"line":1631},[102,108091,101343],{"class":217},[102,108093,108094],{"class":104,"line":1636},[102,108095,101348],{"class":217},[102,108097,108098],{"class":104,"line":1642},[102,108099,108100],{"class":217},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[102,108102,108103],{"class":104,"line":1663},[102,108104,101358],{"class":217},[102,108106,108107],{"class":104,"line":1668},[102,108108,101363],{"class":217},[102,108110,108111],{"class":104,"line":1682},[102,108112,101368],{"class":217},[102,108114,108115],{"class":104,"line":1687},[102,108116,95689],{"class":217},[102,108118,108119],{"class":104,"line":1716},[102,108120,2389],{"emptyLinePlaceholder":30},[102,108122,108123],{"class":104,"line":1721},[102,108124,2389],{"emptyLinePlaceholder":30},[102,108126,108127,108129,108131,108133,108135],{"class":104,"line":1738},[102,108128,31938],{"class":108},[102,108130,1962],{"class":1952},[102,108132,101389],{"class":112},[102,108134,95677],{"class":161},[102,108136,3728],{"class":112},[102,108138,108139,108141,108143,108145,108147],{"class":104,"line":1743},[102,108140,101398],{"class":112},[102,108142,158],{"class":108},[102,108144,101403],{"class":112},[102,108146,101305],{"class":161},[102,108148,119],{"class":112},[102,108150,108151,108153,108155],{"class":104,"line":1748},[102,108152,101412],{"class":112},[102,108154,158],{"class":108},[102,108156,101417],{"class":112},[102,108158,108159],{"class":104,"line":1753},[102,108160,2389],{"emptyLinePlaceholder":30},[102,108162,108163,108165,108167,108169],{"class":104,"line":1767},[102,108164,34169],{"class":108},[102,108166,107827],{"class":112},[102,108168,31374],{"class":108},[102,108170,107832],{"class":112},[102,108172,108173,108176,108179,108181,108184,108186,108189],{"class":104,"line":1772},[102,108174,108175],{"class":108},"        while",[102,108177,108178],{"class":112}," viewer.is_running() ",[102,108180,30453],{"class":108},[102,108182,108183],{"class":112}," data.time ",[102,108185,1023],{"class":108},[102,108187,108188],{"class":161}," 5.0",[102,108190,3728],{"class":112},[102,108192,108193,108196,108198],{"class":104,"line":2566},[102,108194,108195],{"class":112},"            step_start ",[102,108197,158],{"class":108},[102,108199,108200],{"class":112}," time.time()\n",[102,108202,108203],{"class":104,"line":2580},[102,108204,108205],{"class":112},"            mujoco.mj_step(model, data)\n",[102,108207,108208],{"class":104,"line":2588},[102,108209,108210],{"class":112},"            viewer.sync()\n",[102,108212,108213],{"class":104,"line":2593},[102,108214,2389],{"emptyLinePlaceholder":30},[102,108216,108217,108220,108222,108224,108226,108228,108230],{"class":104,"line":2599},[102,108218,108219],{"class":112},"            sleep_time ",[102,108221,158],{"class":108},[102,108223,107951],{"class":112},[102,108225,645],{"class":108},[102,108227,107956],{"class":112},[102,108229,645],{"class":108},[102,108231,107961],{"class":112},[102,108233,108234,108236,108239,108241,108243],{"class":104,"line":2605},[102,108235,4631],{"class":108},[102,108237,108238],{"class":112}," sleep_time ",[102,108240,1073],{"class":108},[102,108242,4082],{"class":161},[102,108244,3728],{"class":112},[102,108246,108247],{"class":104,"line":2610},[102,108248,108249],{"class":112},"                time.sleep(sleep_time)\n",[102,108251,108252],{"class":104,"line":7938},[102,108253,2389],{"emptyLinePlaceholder":30},[102,108255,108256],{"class":104,"line":7962},[102,108257,2389],{"emptyLinePlaceholder":30},[102,108259,108260,108262,108264,108266,108268],{"class":104,"line":7967},[102,108261,1520],{"class":108},[102,108263,31211],{"class":161},[102,108265,101550],{"class":108},[102,108267,101553],{"class":217},[102,108269,3728],{"class":112},[102,108271,108272],{"class":104,"line":7973},[102,108273,101560],{"class":112},[19,108275,103561],{},[93,108277,108279],{"className":23812,"code":108278,"language":23814,"meta":23,"style":23},"touch ch5_viewer.py\n",[99,108280,108281],{"__ignoreMap":23},[102,108282,108283,108285],{"class":104,"line":105},[102,108284,101274],{"class":1952},[102,108286,108287],{"class":217}," ch5_viewer.py\n",[19,108289,108290],{},"离屏 Renderer 保存图片:",[93,108292,108294],{"className":30369,"code":108293,"language":30371,"meta":23,"style":23},"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",[99,108295,108296,108308,108312,108318,108328,108332,108336,108344,108349,108353,108357,108361,108365,108370,108374,108378,108382,108386,108390,108394,108398,108402,108406,108410,108414,108426,108438,108446,108471,108475,108491,108495,108499,108514,108523,108527,108541,108546,108551,108555,108567,108579,108583,108587,108599],{"__ignoreMap":23},[102,108297,108298,108300,108303,108305],{"class":104,"line":105},[102,108299,30728],{"class":108},[102,108301,108302],{"class":112}," pathlib ",[102,108304,30383],{"class":108},[102,108306,108307],{"class":112}," Path\n",[102,108309,108310],{"class":104,"line":24},[102,108311,2389],{"emptyLinePlaceholder":30},[102,108313,108314,108316],{"class":104,"line":1168},[102,108315,30383],{"class":108},[102,108317,101292],{"class":112},[102,108319,108320,108322,108324,108326],{"class":104,"line":1183},[102,108321,30728],{"class":108},[102,108323,47254],{"class":161},[102,108325,47257],{"class":108},[102,108327,47260],{"class":112},[102,108329,108330],{"class":104,"line":1189},[102,108331,2389],{"emptyLinePlaceholder":30},[102,108333,108334],{"class":104,"line":1203},[102,108335,2389],{"emptyLinePlaceholder":30},[102,108337,108338,108340,108342],{"class":104,"line":1209},[102,108339,101305],{"class":161},[102,108341,13554],{"class":108},[102,108343,101310],{"class":217},[102,108345,108346],{"class":104,"line":1300},[102,108347,108348],{"class":217},"\u003Cmujoco model=\"renderer_demo\">\n",[102,108350,108351],{"class":104,"line":1306},[102,108352,101320],{"class":217},[102,108354,108355],{"class":104,"line":1318},[102,108356,2389],{"emptyLinePlaceholder":30},[102,108358,108359],{"class":104,"line":1601},[102,108360,101329],{"class":217},[102,108362,108363],{"class":104,"line":1606},[102,108364,108078],{"class":217},[102,108366,108367],{"class":104,"line":1612},[102,108368,108369],{"class":217},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[102,108371,108372],{"class":104,"line":1617},[102,108373,108083],{"class":217},[102,108375,108376],{"class":104,"line":1631},[102,108377,2389],{"emptyLinePlaceholder":30},[102,108379,108380],{"class":104,"line":1636},[102,108381,101343],{"class":217},[102,108383,108384],{"class":104,"line":1642},[102,108385,101348],{"class":217},[102,108387,108388],{"class":104,"line":1663},[102,108389,108100],{"class":217},[102,108391,108392],{"class":104,"line":1668},[102,108393,101358],{"class":217},[102,108395,108396],{"class":104,"line":1682},[102,108397,101363],{"class":217},[102,108399,108400],{"class":104,"line":1687},[102,108401,101368],{"class":217},[102,108403,108404],{"class":104,"line":1716},[102,108405,95689],{"class":217},[102,108407,108408],{"class":104,"line":1721},[102,108409,2389],{"emptyLinePlaceholder":30},[102,108411,108412],{"class":104,"line":1738},[102,108413,2389],{"emptyLinePlaceholder":30},[102,108415,108416,108418,108420,108422,108424],{"class":104,"line":1743},[102,108417,31938],{"class":108},[102,108419,1962],{"class":1952},[102,108421,101389],{"class":112},[102,108423,95677],{"class":161},[102,108425,3728],{"class":112},[102,108427,108428,108430,108432,108434,108436],{"class":104,"line":1748},[102,108429,101398],{"class":112},[102,108431,158],{"class":108},[102,108433,101403],{"class":112},[102,108435,101305],{"class":161},[102,108437,119],{"class":112},[102,108439,108440,108442,108444],{"class":104,"line":1753},[102,108441,101412],{"class":112},[102,108443,158],{"class":108},[102,108445,101417],{"class":112},[102,108447,108448,108451,108453,108455,108457,108459,108461,108463,108465,108467,108469],{"class":104,"line":1767},[102,108449,108450],{"class":112},"    renderer ",[102,108452,158],{"class":108},[102,108454,107865],{"class":112},[102,108456,24972],{"class":5206},[102,108458,158],{"class":108},[102,108460,42333],{"class":161},[102,108462,12425],{"class":112},[102,108464,24968],{"class":5206},[102,108466,158],{"class":108},[102,108468,107880],{"class":161},[102,108470,119],{"class":112},[102,108472,108473],{"class":104,"line":1772},[102,108474,2389],{"emptyLinePlaceholder":30},[102,108476,108477,108479,108481,108483,108485,108487,108489],{"class":104,"line":2566},[102,108478,3190],{"class":108},[102,108480,101492],{"class":112},[102,108482,26034],{"class":108},[102,108484,32434],{"class":161},[102,108486,113],{"class":112},[102,108488,424],{"class":161},[102,108490,30777],{"class":112},[102,108492,108493],{"class":104,"line":2580},[102,108494,101507],{"class":112},[102,108496,108497],{"class":104,"line":2588},[102,108498,2389],{"emptyLinePlaceholder":30},[102,108500,108501,108504,108507,108509,108512],{"class":104,"line":2593},[102,108502,108503],{"class":112},"    renderer.update_scene(data, ",[102,108505,108506],{"class":5206},"camera",[102,108508,158],{"class":108},[102,108510,108511],{"class":217},"\"fixed_camera\"",[102,108513,119],{"class":112},[102,108515,108516,108519,108521],{"class":104,"line":2599},[102,108517,108518],{"class":112},"    image ",[102,108520,158],{"class":108},[102,108522,107576],{"class":112},[102,108524,108525],{"class":104,"line":2605},[102,108526,2389],{"emptyLinePlaceholder":30},[102,108528,108529,108532,108534,108537,108539],{"class":104,"line":2610},[102,108530,108531],{"class":112},"    output_path ",[102,108533,158],{"class":108},[102,108535,108536],{"class":112}," Path(",[102,108538,108006],{"class":217},[102,108540,119],{"class":112},[102,108542,108543],{"class":104,"line":7938},[102,108544,108545],{"class":112},"    Image.fromarray(image).save(output_path)\n",[102,108547,108548],{"class":104,"line":7962},[102,108549,108550],{"class":112},"    renderer.close()\n",[102,108552,108553],{"class":104,"line":7967},[102,108554,2389],{"emptyLinePlaceholder":30},[102,108556,108557,108559,108561,108564],{"class":104,"line":7973},[102,108558,31290],{"class":161},[102,108560,113],{"class":112},[102,108562,108563],{"class":217},"\"saved:\"",[102,108565,108566],{"class":112},", output_path.resolve())\n",[102,108568,108569,108571,108573,108576],{"class":104,"line":8000},[102,108570,31290],{"class":161},[102,108572,113],{"class":112},[102,108574,108575],{"class":217},"\"image shape:\"",[102,108577,108578],{"class":112},", image.shape)\n",[102,108580,108581],{"class":104,"line":8005},[102,108582,2389],{"emptyLinePlaceholder":30},[102,108584,108585],{"class":104,"line":8011},[102,108586,2389],{"emptyLinePlaceholder":30},[102,108588,108589,108591,108593,108595,108597],{"class":104,"line":8023},[102,108590,1520],{"class":108},[102,108592,31211],{"class":161},[102,108594,101550],{"class":108},[102,108596,101553],{"class":217},[102,108598,3728],{"class":112},[102,108600,108601],{"class":104,"line":8035},[102,108602,101560],{"class":112},[19,108604,103561],{},[93,108606,108608],{"className":23812,"code":108607,"language":23814,"meta":23,"style":23},"touch ch5_renderer.py\n",[99,108609,108610],{"__ignoreMap":23},[102,108611,108612,108614],{"class":104,"line":105},[102,108613,101274],{"class":1952},[102,108615,108616],{"class":217}," ch5_renderer.py\n",[73,108618,101563],{"id":101563},[19,108620,108621],{},"viewer 上下文：",[93,108623,108625],{"className":30369,"code":108624,"language":30371,"meta":23,"style":23},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[99,108626,108627],{"__ignoreMap":23},[102,108628,108629,108631,108633,108635],{"class":104,"line":105},[102,108630,107824],{"class":108},[102,108632,107827],{"class":112},[102,108634,31374],{"class":108},[102,108636,107832],{"class":112},[19,108638,108639,108641],{},[99,108640,107824],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108643,108644],{},"窗口循环：",[93,108646,108648],{"className":30369,"code":108647,"language":30371,"meta":23,"style":23},"while viewer.is_running() and data.time \u003C 5.0:\n",[99,108649,108650],{"__ignoreMap":23},[102,108651,108652,108655,108657,108659,108661,108663,108665],{"class":104,"line":105},[102,108653,108654],{"class":108},"while",[102,108656,108178],{"class":112},[102,108658,30453],{"class":108},[102,108660,108183],{"class":112},[102,108662,1023],{"class":108},[102,108664,108188],{"class":161},[102,108666,3728],{"class":112},[19,108668,108669],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108671,108672],{},"固定相机：",[93,108674,108676],{"className":53058,"code":108675,"language":53060,"meta":23,"style":23},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[99,108677,108678],{"__ignoreMap":23},[102,108679,108680,108682,108684,108686,108688,108690,108692,108694,108697,108700,108702,108705],{"class":104,"line":105},[102,108681,1023],{"class":112},[102,108683,108506],{"class":51291},[102,108685,14910],{"class":1952},[102,108687,158],{"class":112},[102,108689,108511],{"class":217},[102,108691,101097],{"class":1952},[102,108693,158],{"class":112},[102,108695,108696],{"class":217},"\"1.5 -2.0 1.2\"",[102,108698,108699],{"class":1952}," xyaxes",[102,108701,158],{"class":112},[102,108703,108704],{"class":217},"\"1 0.75 0 0 0 1\"",[102,108706,101135],{"class":112},[19,108708,108709],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[73,108711,108713],{"id":108712},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[93,108715,108717],{"className":30369,"code":108716,"language":30371,"meta":23,"style":23},"import time\n",[99,108718,108719],{"__ignoreMap":23},[102,108720,108721,108723],{"class":104,"line":105},[102,108722,30383],{"class":108},[102,108724,31820],{"class":112},[19,108726,108727],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[93,108729,108731],{"className":30369,"code":108730,"language":30371,"meta":23,"style":23},"import mujoco\nimport mujoco.viewer\n",[99,108732,108733,108739],{"__ignoreMap":23},[102,108734,108735,108737],{"class":104,"line":105},[102,108736,30383],{"class":108},[102,108738,101292],{"class":112},[102,108740,108741,108743],{"class":104,"line":24},[102,108742,30383],{"class":108},[102,108744,107543],{"class":112},[19,108746,108747],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[93,108749,108750],{"className":30369,"code":108624,"language":30371,"meta":23,"style":23},[99,108751,108752],{"__ignoreMap":23},[102,108753,108754,108756,108758,108760],{"class":104,"line":105},[102,108755,107824],{"class":108},[102,108757,107827],{"class":112},[102,108759,31374],{"class":108},[102,108761,107832],{"class":112},[19,108763,108764,108765,108768],{},"打开一个 viewer 窗口。",[99,108766,108767],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[93,108770,108771],{"className":30369,"code":108647,"language":30371,"meta":23,"style":23},[99,108772,108773],{"__ignoreMap":23},[102,108774,108775,108777,108779,108781,108783,108785,108787],{"class":104,"line":105},[102,108776,108654],{"class":108},[102,108778,108178],{"class":112},[102,108780,30453],{"class":108},[102,108782,108183],{"class":112},[102,108784,1023],{"class":108},[102,108786,108188],{"class":161},[102,108788,3728],{"class":112},[19,108790,108791,108792,108795],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[99,108793,108794],{},"viewer.is_running()"," 会变成 false，循环结束。",[93,108797,108799],{"className":30369,"code":108798,"language":30371,"meta":23,"style":23},"step_start = time.time()\n",[99,108800,108801],{"__ignoreMap":23},[102,108802,108803,108806,108808],{"class":104,"line":105},[102,108804,108805],{"class":112},"step_start ",[102,108807,158],{"class":108},[102,108809,108200],{"class":112},[19,108811,108812],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[93,108814,108815],{"className":30369,"code":107909,"language":30371,"meta":23,"style":23},[99,108816,108817,108821],{"__ignoreMap":23},[102,108818,108819],{"class":104,"line":105},[102,108820,104496],{"class":112},[102,108822,108823],{"class":104,"line":24},[102,108824,107920],{"class":112},[19,108826,108827,108829,108830,108832,108833,108835,108836,108839],{},[99,108828,101206],{}," 推进物理仿真。",[99,108831,107928],{}," 把最新的 ",[99,108834,33392],{}," 同步到窗口里显示。没有 ",[99,108837,108838],{},"sync()","，窗口可能看不到最新状态。",[93,108841,108842],{"className":30369,"code":107939,"language":30371,"meta":23,"style":23},[99,108843,108844],{"__ignoreMap":23},[102,108845,108846,108848,108850,108852,108854,108856,108858],{"class":104,"line":105},[102,108847,107946],{"class":112},[102,108849,158],{"class":108},[102,108851,107951],{"class":112},[102,108853,645],{"class":108},[102,108855,107956],{"class":112},[102,108857,645],{"class":108},[102,108859,107961],{"class":112},[19,108861,108862],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[93,108864,108866],{"className":30369,"code":108865,"language":30371,"meta":23,"style":23},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[99,108867,108868,108880],{"__ignoreMap":23},[102,108869,108870,108872,108874,108876,108878],{"class":104,"line":105},[102,108871,1520],{"class":108},[102,108873,108238],{"class":112},[102,108875,1073],{"class":108},[102,108877,4082],{"class":161},[102,108879,3728],{"class":112},[102,108881,108882],{"class":104,"line":24},[102,108883,108884],{"class":112},"    time.sleep(sleep_time)\n",[19,108886,108887],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[73,108889,108891],{"id":108890},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[93,108893,108895],{"className":30369,"code":108894,"language":30371,"meta":23,"style":23},"from pathlib import Path\n",[99,108896,108897],{"__ignoreMap":23},[102,108898,108899,108901,108903,108905],{"class":104,"line":105},[102,108900,30728],{"class":108},[102,108902,108302],{"class":112},[102,108904,30383],{"class":108},[102,108906,108307],{"class":112},[19,108908,108909,108910,108913,108914,108917],{},"导入 ",[99,108911,108912],{},"Path","，用来处理文件路径。相比直接写字符串，",[99,108915,108916],{},"Path(\"render_output.png\")"," 更清晰。",[93,108919,108921],{"className":30369,"code":108920,"language":30371,"meta":23,"style":23},"from PIL import Image\n",[99,108922,108923],{"__ignoreMap":23},[102,108924,108925,108927,108929,108931],{"class":104,"line":105},[102,108926,30728],{"class":108},[102,108928,47254],{"class":161},[102,108930,47257],{"class":108},[102,108932,47260],{"class":112},[19,108934,108935],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[93,108937,108938],{"className":53058,"code":108675,"language":53060,"meta":23,"style":23},[99,108939,108940],{"__ignoreMap":23},[102,108941,108942,108944,108946,108948,108950,108952,108954,108956,108958,108960,108962,108964],{"class":104,"line":105},[102,108943,1023],{"class":112},[102,108945,108506],{"class":51291},[102,108947,14910],{"class":1952},[102,108949,158],{"class":112},[102,108951,108511],{"class":217},[102,108953,101097],{"class":1952},[102,108955,158],{"class":112},[102,108957,108696],{"class":217},[102,108959,108699],{"class":1952},[102,108961,158],{"class":112},[102,108963,108704],{"class":217},[102,108965,101135],{"class":112},[19,108967,108968,108969,108971,108972,108974,108975,108978,108979,108981],{},"定义一个相机。",[99,108970,79801],{}," 是相机名字。",[99,108973,104137],{}," 是相机在世界里的位置。",[99,108976,108977],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[99,108980,104137],{}," 来调视角。",[93,108983,108985],{"className":30369,"code":108984,"language":30371,"meta":23,"style":23},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[99,108986,108987],{"__ignoreMap":23},[102,108988,108989,108991,108993,108995,108997,108999,109001,109003,109005,109007,109009],{"class":104,"line":105},[102,108990,107561],{"class":112},[102,108992,158],{"class":108},[102,108994,107865],{"class":112},[102,108996,24972],{"class":5206},[102,108998,158],{"class":108},[102,109000,42333],{"class":161},[102,109002,12425],{"class":112},[102,109004,24968],{"class":5206},[102,109006,158],{"class":108},[102,109008,107880],{"class":161},[102,109010,119],{"class":112},[19,109012,109013,109014,101009,109016,109018],{},"创建离屏渲染器。",[99,109015,24972],{},[99,109017,24968],{}," 决定输出图片大小。",[93,109020,109021],{"className":30369,"code":101667,"language":30371,"meta":23,"style":23},[99,109022,109023,109039],{"__ignoreMap":23},[102,109024,109025,109027,109029,109031,109033,109035,109037],{"class":104,"line":105},[102,109026,3014],{"class":108},[102,109028,101492],{"class":112},[102,109030,26034],{"class":108},[102,109032,32434],{"class":161},[102,109034,113],{"class":112},[102,109036,424],{"class":161},[102,109038,30777],{"class":112},[102,109040,109041],{"class":104,"line":24},[102,109042,101690],{"class":112},[19,109044,109045],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[93,109047,109049],{"className":30369,"code":109048,"language":30371,"meta":23,"style":23},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[99,109050,109051],{"__ignoreMap":23},[102,109052,109053,109056,109058,109060,109062],{"class":104,"line":105},[102,109054,109055],{"class":112},"renderer.update_scene(data, ",[102,109057,108506],{"class":5206},[102,109059,158],{"class":108},[102,109061,108511],{"class":217},[102,109063,119],{"class":112},[19,109065,109066,109067,109069,109070,109073],{},"告诉 renderer：用当前 ",[99,109068,33392],{}," 的状态更新画面，并使用名为 ",[99,109071,109072],{},"fixed_camera"," 的相机视角。",[93,109075,109076],{"className":30369,"code":107971,"language":30371,"meta":23,"style":23},[99,109077,109078],{"__ignoreMap":23},[102,109079,109080,109082,109084],{"class":104,"line":105},[102,109081,107571],{"class":112},[102,109083,158],{"class":108},[102,109085,107576],{"class":112},[19,109087,109088,109089,109092],{},"真正渲染出图像。",[99,109090,109091],{},"image"," 是一个 NumPy 数组，不是文件。",[93,109094,109096],{"className":30369,"code":109095,"language":30371,"meta":23,"style":23},"Image.fromarray(image).save(output_path)\n",[99,109097,109098],{"__ignoreMap":23},[102,109099,109100],{"class":104,"line":105},[102,109101,109095],{"class":112},[19,109103,109104,109105,28376],{},"把数组转换成图片，并保存到 ",[99,109106,109107],{},"render_output.png",[93,109109,109111],{"className":30369,"code":109110,"language":30371,"meta":23,"style":23},"renderer.close()\n",[99,109112,109113],{"__ignoreMap":23},[102,109114,109115],{"class":104,"line":105},[102,109116,109110],{"class":112},[19,109118,109119],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109121,102307],{"id":102306},[19,109123,109124,109125,109127,109128,28376],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[99,109126,109107],{},"，并输出图像数组形状，例如 ",[99,109129,109130],{},"(480, 640, 3)",[19,109132,109133],{},"如果图片里看不到方块，先检查：",[56,109135,109136,109139,109142],{},[59,109137,109138],{},"方块是否掉到相机视野外。",[59,109140,109141],{},"camera 位置是否合理。",[59,109143,109144,109145,109148],{},"是否在 ",[99,109146,109147],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109150,102339],{"id":102338},[19,109152,109153],{},"运行 viewer:",[93,109155,109157],{"className":23812,"code":109156,"language":23814,"meta":23,"style":23},"python ch5_viewer.py\n",[99,109158,109159],{"__ignoreMap":23},[102,109160,109161,109163],{"class":104,"line":105},[102,109162,30371],{"class":1952},[102,109164,108287],{"class":217},[19,109166,109167],{},"运行 renderer:",[93,109169,109171],{"className":23812,"code":109170,"language":23814,"meta":23,"style":23},"python ch5_renderer.py\n",[99,109172,109173],{"__ignoreMap":23},[102,109174,109175,109177],{"class":104,"line":105},[102,109176,30371],{"class":1952},[102,109178,108616],{"class":217},[19,109180,109181],{},"如果在服务器上运行:",[93,109183,109185],{"className":23812,"code":109184,"language":23814,"meta":23,"style":23},"MUJOCO_GL=egl python ch5_renderer.py\n",[99,109186,109187],{"__ignoreMap":23},[102,109188,109189,109191,109193,109195,109198],{"class":104,"line":105},[102,109190,107805],{"class":112},[102,109192,158],{"class":108},[102,109194,107795],{"class":217},[102,109196,109197],{"class":1952}," python",[102,109199,108616],{"class":217},[19,109201,107773],{},[93,109203,109205],{"className":23812,"code":109204,"language":23814,"meta":23,"style":23},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[99,109206,109207],{"__ignoreMap":23},[102,109208,109209,109211,109213,109215,109217],{"class":104,"line":105},[102,109210,107805],{"class":112},[102,109212,158],{"class":108},[102,109214,107799],{"class":217},[102,109216,109197],{"class":1952},[102,109218,108616],{"class":217},[19,109220,109221],{},"再做几个练习：",[56,109223,109224,109231,109234,109240],{},[59,109225,109226,109227,109230],{},"把 renderer 分辨率改成 ",[99,109228,109229],{},"height=240, width=320","，观察输出 shape。",[59,109232,109233],{},"把方块颜色改成蓝色，重新保存图片。",[59,109235,109236,109237,109239],{},"把相机 ",[99,109238,104137],{}," 改远一点，观察画面中物体是否变小。",[59,109241,109242,109243,102405,109246,109249],{},"把 viewer 示例中的 ",[99,109244,109245],{},"data.time \u003C 5.0",[99,109247,109248],{},"data.time \u003C 20.0","，观察更长时间。",[14,109251,102444],{"id":102443},[73,109253,109255],{"id":109254},"viewer-窗口打不开","viewer 窗口打不开",[19,109257,109258],{},"安装:",[93,109260,109262],{"className":23812,"code":109261,"language":23814,"meta":23,"style":23},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[99,109263,109264],{"__ignoreMap":23},[102,109265,109266,109268,109270,109272,109274,109276,109278,109280,109282,109284,109286],{"class":104,"line":105},[102,109267,24567],{"class":1952},[102,109269,26306],{"class":217},[102,109271,23824],{"class":217},[102,109273,26391],{"class":161},[102,109275,102497],{"class":217},[102,109277,100825],{"class":217},[102,109279,102502],{"class":217},[102,109281,100838],{"class":217},[102,109283,100844],{"class":217},[102,109285,100835],{"class":217},[102,109287,109288],{"class":217}," libXinerama\n",[73,109290,109292],{"id":109291},"glfwerror",[99,109293,109294],{},"GLFWError",[19,109296,109297],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[73,109299,109301],{"id":109300},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109303,109304,109305,82530,109307,109309],{},"尝试 ",[99,109306,101028],{},[99,109308,101031],{},"。可能存在版本差异。",[73,109311,109312],{"id":109312},"保存图片是黑的",[19,109314,102566],{},[56,109316,109317,109320,109323,109333],{},[59,109318,109319],{},"XML 里是否有 light。",[59,109321,109322],{},"相机是否对着模型。",[59,109324,109325,109326,109329,109330,28376],{},"是否先 ",[99,109327,109328],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[99,109331,109332],{},"renderer.render()",[59,109334,109335],{},"物体是否已经掉出视野。",[73,109337,109338],{"id":109338},"远程服务器没有显示器",[19,109340,109341],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[93,109343,109344],{"className":23812,"code":109184,"language":23814,"meta":23,"style":23},[99,109345,109346],{"__ignoreMap":23},[102,109347,109348,109350,109352,109354,109356],{"class":104,"line":105},[102,109349,107805],{"class":112},[102,109351,158],{"class":108},[102,109353,107795],{"class":217},[102,109355,109197],{"class":1952},[102,109357,108616],{"class":217},[19,109359,109360],{},"如果 EGL 不可用，再尝试：",[93,109362,109363],{"className":23812,"code":109204,"language":23814,"meta":23,"style":23},[99,109364,109365],{"__ignoreMap":23},[102,109366,109367,109369,109371,109373,109375],{"class":104,"line":105},[102,109368,107805],{"class":112},[102,109370,158],{"class":108},[102,109372,107799],{"class":217},[102,109374,109197],{"class":1952},[102,109376,108616],{"class":217},[14,109378,102598],{"id":102597},[19,109380,109381],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[56,109383,109384,109387,109390],{},[59,109385,109386],{},"先用 viewer 看模型和控制是否正常。",[59,109388,109389],{},"再用 renderer 保存图片或构造视觉观测。",[59,109391,109392],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5116,109394,109395],{},"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":23,"searchDepth":24,"depth":24,"links":109397},[109398,109399,109400,109405,109410,109411,109412,109419],{"id":100637,"depth":24,"text":100638},{"id":100760,"depth":24,"text":100761},{"id":101035,"depth":24,"text":101036,"children":109401},[109402,109403,109404],{"id":107902,"depth":1168,"text":107903},{"id":107932,"depth":1168,"text":107933},{"id":107967,"depth":1168,"text":107968},{"id":101243,"depth":24,"text":101244,"children":109406},[109407,109408,109409],{"id":101563,"depth":1168,"text":101563},{"id":108712,"depth":1168,"text":108713},{"id":108890,"depth":1168,"text":108891},{"id":102306,"depth":24,"text":102307},{"id":102338,"depth":24,"text":102339},{"id":102443,"depth":24,"text":102444,"children":109413},[109414,109415,109416,109417,109418],{"id":109254,"depth":1168,"text":109255},{"id":109291,"depth":1168,"text":109294},{"id":109300,"depth":1168,"text":109301},{"id":109312,"depth":1168,"text":109312},{"id":109338,"depth":1168,"text":109338},{"id":102597,"depth":24,"text":102598},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107510,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109426,"title":109427,"body":109428,"description":23,"extension":28,"meta":111339,"navigation":30,"path":111340,"seo":111341,"stem":111342,"__hash__":111343},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109429,"toc":111315},[109430,109433,109435,109438,109440,109459,109462,109468,109471,109473,109475,109499,109501,109515,109517,109558,109560,109571,109573,109576,109582,109585,109619,109622,109654,109657,109689,109693,109696,109736,109739,109745,109748,109754,109758,109761,109767,109770,109774,109777,109817,109819,109832,109835,109837,110419,110421,110433,110436,110447,110449,110452,110471,110483,110486,110507,110510,110513,110556,110559,110562,110582,110589,110591,110609,110624,110627,110633,110636,110642,110659,110666,110697,110708,110742,110753,110770,110779,110787,110792,110806,110809,110830,110836,110850,110855,110885,110895,110920,110928,110951,110954,110970,110973,110981,110987,111009,111022,111043,111052,111091,111102,111104,111107,111113,111116,111119,111125,111128,111148,111151,111153,111192,111194,111197,111205,111208,111211,111238,111241,111251,111257,111260,111266,111268,111274,111278,111281,111283,111286,111310,111313],[10,109431,109427],{"id":109432},"_6控制任务cartpole",[14,109434,100638],{"id":100637},[19,109436,109437],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109439,104322],{},[56,109441,109442,109445,109447,109450,109453,109456],{},[59,109443,109444],{},"slide joint",[59,109446,106175],{},[59,109448,109449],{},"cart force actuator",[59,109451,109452],{},"状态观测",[59,109454,109455],{},"简单控制循环",[59,109457,109458],{},"reward 设计雏形",[19,109460,109461],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[93,109463,109466],{"className":109464,"code":109465,"language":5177,"meta":23},[5175],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[99,109467,109465],{"__ignoreMap":23},[19,109469,109470],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109472,100761],{"id":100760},[19,109474,100764],{},[93,109476,109477],{"className":23812,"code":104379,"language":23814,"meta":23,"style":23},[99,109478,109479],{"__ignoreMap":23},[102,109480,109481,109483,109485,109487,109489,109491,109493,109495,109497],{"class":104,"line":105},[102,109482,24567],{"class":1952},[102,109484,26306],{"class":217},[102,109486,23824],{"class":217},[102,109488,26391],{"class":161},[102,109490,104394],{"class":217},[102,109492,100789],{"class":217},[102,109494,102492],{"class":217},[102,109496,100805],{"class":217},[102,109498,104403],{"class":217},[19,109500,102810],{},[93,109502,109503],{"className":23812,"code":100910,"language":23814,"meta":23,"style":23},[99,109504,109505],{"__ignoreMap":23},[102,109506,109507,109509,109511,109513],{"class":104,"line":105},[102,109508,23821],{"class":1952},[102,109510,23824],{"class":217},[102,109512,100921],{"class":217},[102,109514,100924],{"class":217},[19,109516,102827],{},[93,109518,109520],{"className":23812,"code":109519,"language":23814,"meta":23,"style":23},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[99,109521,109522,109539,109548],{"__ignoreMap":23},[102,109523,109524,109526,109528,109530,109533,109535,109537],{"class":104,"line":105},[102,109525,30321],{"class":1952},[102,109527,29167],{"class":217},[102,109529,25106],{"class":161},[102,109531,109532],{"class":217}," mujoco-cartpole",[102,109534,100966],{"class":217},[102,109536,100969],{"class":161},[102,109538,100972],{"class":161},[102,109540,109541,109543,109545],{"class":104,"line":24},[102,109542,30321],{"class":1952},[102,109544,100979],{"class":217},[102,109546,109547],{"class":217}," mujoco-cartpole\n",[102,109549,109550,109552,109554,109556],{"class":104,"line":1168},[102,109551,23821],{"class":1952},[102,109553,23824],{"class":217},[102,109555,100921],{"class":217},[102,109557,100924],{"class":217},[19,109559,100995],{},[56,109561,109562,109565,109568],{},[59,109563,109564],{},"本章不依赖 Gymnasium。",[59,109566,109567],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[59,109569,109570],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109572,101036],{"id":101035},[19,109574,109575],{},"Cartpole 的模型结构:",[93,109577,109580],{"className":109578,"code":109579,"language":5177,"meta":23},[5175],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[99,109581,109579],{"__ignoreMap":23},[19,109583,109584],{},"小车通过 slide joint 左右移动:",[93,109586,109588],{"className":53058,"code":109587,"language":53060,"meta":23,"style":23},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[99,109589,109590],{"__ignoreMap":23},[102,109591,109592,109594,109596,109598,109600,109603,109605,109607,109610,109612,109614,109617],{"class":104,"line":105},[102,109593,1023],{"class":112},[102,109595,102947],{"class":51291},[102,109597,14910],{"class":1952},[102,109599,158],{"class":112},[102,109601,109602],{"class":217},"\"cart_x\"",[102,109604,53815],{"class":1952},[102,109606,158],{"class":112},[102,109608,109609],{"class":217},"\"slide\"",[102,109611,106019],{"class":1952},[102,109613,158],{"class":112},[102,109615,109616],{"class":217},"\"1 0 0\"",[102,109618,101135],{"class":112},[19,109620,109621],{},"杆子通过 hinge joint 旋转:",[93,109623,109625],{"className":53058,"code":109624,"language":53060,"meta":23,"style":23},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[99,109626,109627],{"__ignoreMap":23},[102,109628,109629,109631,109633,109635,109637,109640,109642,109644,109646,109648,109650,109652],{"class":104,"line":105},[102,109630,1023],{"class":112},[102,109632,102947],{"class":51291},[102,109634,14910],{"class":1952},[102,109636,158],{"class":112},[102,109638,109639],{"class":217},"\"pole_hinge\"",[102,109641,53815],{"class":1952},[102,109643,158],{"class":112},[102,109645,106010],{"class":217},[102,109647,106019],{"class":1952},[102,109649,158],{"class":112},[102,109651,106024],{"class":217},[102,109653,101135],{"class":112},[19,109655,109656],{},"控制力作用在小车 slide joint 上:",[93,109658,109660],{"className":53058,"code":109659,"language":53060,"meta":23,"style":23},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[99,109661,109662],{"__ignoreMap":23},[102,109663,109664,109666,109668,109670,109672,109675,109677,109679,109681,109683,109685,109687],{"class":104,"line":105},[102,109665,1023],{"class":112},[102,109667,106065],{"class":51291},[102,109669,14910],{"class":1952},[102,109671,158],{"class":112},[102,109673,109674],{"class":217},"\"cart_motor\"",[102,109676,106075],{"class":1952},[102,109678,158],{"class":112},[102,109680,109602],{"class":217},[102,109682,106082],{"class":1952},[102,109684,158],{"class":112},[102,109686,54307],{"class":217},[102,109688,101135],{"class":112},[73,109690,109692],{"id":109691},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109694,109695],{},"这个简化模型有两个关节：",[250,109697,109698,109709],{},[253,109699,109700],{},[256,109701,109702,109704,109706],{},[259,109703,102750],{"align":23726},[259,109705,23727],{"align":23726},[259,109707,109708],{"align":23726},"对应状态",[297,109710,109711,109724],{},[256,109712,109713,109718,109721],{},[302,109714,109715],{"align":23726},[99,109716,109717],{},"cart_x",[302,109719,109720],{"align":23726},"slide",[302,109722,109723],{"align":23726},"小车 x 位置",[256,109725,109726,109731,109733],{},[302,109727,109728],{"align":23726},[99,109729,109730],{},"pole_hinge",[302,109732,105831],{"align":23726},[302,109734,109735],{"align":23726},"杆子角度",[19,109737,109738],{},"所以：",[93,109740,109743],{"className":109741,"code":109742,"language":5177,"meta":23},[5175],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[99,109744,109742],{"__ignoreMap":23},[19,109746,109747],{},"把它们拼起来就是观测：",[93,109749,109752],{"className":109750,"code":109751,"language":5177,"meta":23},[5175],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[99,109753,109751],{"__ignoreMap":23},[73,109755,109757],{"id":109756},"action-是什么","action 是什么",[19,109759,109760],{},"本章只有一个 actuator：",[93,109762,109765],{"className":109763,"code":109764,"language":5177,"meta":23},[5175],"data.ctrl[0] = action\n",[99,109766,109764],{"__ignoreMap":23},[19,109768,109769],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[73,109771,109773],{"id":109772},"reward-是什么","reward 是什么",[19,109775,109776],{},"奖励函数：",[93,109778,109780],{"className":30369,"code":109779,"language":30371,"meta":23,"style":23},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[99,109781,109782],{"__ignoreMap":23},[102,109783,109784,109786,109789,109791,109793,109795,109798,109800,109803,109805,109807,109809,109812,109814],{"class":104,"line":105},[102,109785,17036],{"class":108},[102,109787,109788],{"class":161}," float",[102,109790,113],{"class":112},[102,109792,102394],{"class":161},[102,109794,52262],{"class":108},[102,109796,109797],{"class":161}," 0.1",[102,109799,6508],{"class":108},[102,109801,109802],{"class":112}," cart_x ",[102,109804,568],{"class":108},[102,109806,109802],{"class":112},[102,109808,645],{"class":108},[102,109810,109811],{"class":112}," pole_angle ",[102,109813,568],{"class":108},[102,109815,109816],{"class":112}," pole_angle)\n",[19,109818,106217],{},[56,109820,109821,109826,109829],{},[59,109822,109823,109824,28376],{},"基础奖励是 ",[99,109825,102394],{},[59,109827,109828],{},"小车离中心越远，扣分越多。",[59,109830,109831],{},"杆子角度越大，扣分越多。",[19,109833,109834],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,109836,101244],{"id":101243},[93,109838,109840],{"className":30369,"code":109839,"language":30371,"meta":23,"style":23},"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",[99,109841,109842,109848,109858,109862,109866,109874,109879,109883,109887,109891,109896,109900,109905,109910,109915,109919,109924,109929,109934,109938,109942,109946,109950,109954,109959,109963,109967,109971,109975,109979,109989,109996,110000,110004,110018,110032,110045,110075,110079,110083,110095,110107,110115,110119,110132,110136,110140,110149,110153,110169,110179,110192,110205,110209,110232,110250,110254,110266,110270,110274,110284,110294,110298,110314,110355,110359,110379,110395,110399,110403,110415],{"__ignoreMap":23},[102,109843,109844,109846],{"class":104,"line":105},[102,109845,30383],{"class":108},[102,109847,101292],{"class":112},[102,109849,109850,109852,109854,109856],{"class":104,"line":24},[102,109851,30383],{"class":108},[102,109853,31371],{"class":112},[102,109855,31374],{"class":108},[102,109857,31377],{"class":112},[102,109859,109860],{"class":104,"line":1168},[102,109861,2389],{"emptyLinePlaceholder":30},[102,109863,109864],{"class":104,"line":1183},[102,109865,2389],{"emptyLinePlaceholder":30},[102,109867,109868,109870,109872],{"class":104,"line":1189},[102,109869,101305],{"class":161},[102,109871,13554],{"class":108},[102,109873,101310],{"class":217},[102,109875,109876],{"class":104,"line":1203},[102,109877,109878],{"class":217},"\u003Cmujoco model=\"cartpole\">\n",[102,109880,109881],{"class":104,"line":1209},[102,109882,101320],{"class":217},[102,109884,109885],{"class":104,"line":1300},[102,109886,2389],{"emptyLinePlaceholder":30},[102,109888,109889],{"class":104,"line":1306},[102,109890,101329],{"class":217},[102,109892,109893],{"class":104,"line":1318},[102,109894,109895],{"class":217},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[102,109897,109898],{"class":104,"line":1601},[102,109899,2389],{"emptyLinePlaceholder":30},[102,109901,109902],{"class":104,"line":1606},[102,109903,109904],{"class":217},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[102,109906,109907],{"class":104,"line":1612},[102,109908,109909],{"class":217},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[102,109911,109912],{"class":104,"line":1617},[102,109913,109914],{"class":217},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[102,109916,109917],{"class":104,"line":1631},[102,109918,2389],{"emptyLinePlaceholder":30},[102,109920,109921],{"class":104,"line":1636},[102,109922,109923],{"class":217},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[102,109925,109926],{"class":104,"line":1642},[102,109927,109928],{"class":217},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[102,109930,109931],{"class":104,"line":1663},[102,109932,109933],{"class":217},"        \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",[102,109935,109936],{"class":104,"line":1668},[102,109937,106429],{"class":217},[102,109939,109940],{"class":104,"line":1682},[102,109941,101358],{"class":217},[102,109943,109944],{"class":104,"line":1687},[102,109945,101363],{"class":217},[102,109947,109948],{"class":104,"line":1716},[102,109949,2389],{"emptyLinePlaceholder":30},[102,109951,109952],{"class":104,"line":1721},[102,109953,106446],{"class":217},[102,109955,109956],{"class":104,"line":1738},[102,109957,109958],{"class":217},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[102,109960,109961],{"class":104,"line":1743},[102,109962,106456],{"class":217},[102,109964,109965],{"class":104,"line":1748},[102,109966,101368],{"class":217},[102,109968,109969],{"class":104,"line":1753},[102,109970,95689],{"class":217},[102,109972,109973],{"class":104,"line":1767},[102,109974,2389],{"emptyLinePlaceholder":30},[102,109976,109977],{"class":104,"line":1772},[102,109978,2389],{"emptyLinePlaceholder":30},[102,109980,109981,109983,109986],{"class":104,"line":2566},[102,109982,31938],{"class":108},[102,109984,109985],{"class":1952}," get_observation",[102,109987,109988],{"class":112},"(data: mujoco.MjData) -> np.ndarray:\n",[102,109990,109991,109993],{"class":104,"line":2580},[102,109992,4079],{"class":108},[102,109994,109995],{"class":112}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[102,109997,109998],{"class":104,"line":2588},[102,109999,2389],{"emptyLinePlaceholder":30},[102,110001,110002],{"class":104,"line":2593},[102,110003,2389],{"emptyLinePlaceholder":30},[102,110005,110006,110008,110011,110014,110016],{"class":104,"line":2599},[102,110007,31938],{"class":108},[102,110009,110010],{"class":1952}," compute_reward",[102,110012,110013],{"class":112},"(obs: np.ndarray) -> ",[102,110015,152],{"class":161},[102,110017,3728],{"class":112},[102,110019,110020,110023,110025,110028,110030],{"class":104,"line":2605},[102,110021,110022],{"class":112},"    cart_x ",[102,110024,158],{"class":108},[102,110026,110027],{"class":112}," obs[",[102,110029,304],{"class":161},[102,110031,33237],{"class":112},[102,110033,110034,110037,110039,110041,110043],{"class":104,"line":2610},[102,110035,110036],{"class":112},"    pole_angle ",[102,110038,158],{"class":108},[102,110040,110027],{"class":112},[102,110042,330],{"class":161},[102,110044,33237],{"class":112},[102,110046,110047,110049,110051,110053,110055,110057,110059,110061,110063,110065,110067,110069,110071,110073],{"class":104,"line":7938},[102,110048,4079],{"class":108},[102,110050,109788],{"class":161},[102,110052,113],{"class":112},[102,110054,102394],{"class":161},[102,110056,52262],{"class":108},[102,110058,109797],{"class":161},[102,110060,6508],{"class":108},[102,110062,109802],{"class":112},[102,110064,568],{"class":108},[102,110066,109802],{"class":112},[102,110068,645],{"class":108},[102,110070,109811],{"class":112},[102,110072,568],{"class":108},[102,110074,109816],{"class":112},[102,110076,110077],{"class":104,"line":7962},[102,110078,2389],{"emptyLinePlaceholder":30},[102,110080,110081],{"class":104,"line":7967},[102,110082,2389],{"emptyLinePlaceholder":30},[102,110084,110085,110087,110089,110091,110093],{"class":104,"line":7973},[102,110086,31938],{"class":108},[102,110088,1962],{"class":1952},[102,110090,101389],{"class":112},[102,110092,95677],{"class":161},[102,110094,3728],{"class":112},[102,110096,110097,110099,110101,110103,110105],{"class":104,"line":8000},[102,110098,101398],{"class":112},[102,110100,158],{"class":108},[102,110102,101403],{"class":112},[102,110104,101305],{"class":161},[102,110106,119],{"class":112},[102,110108,110109,110111,110113],{"class":104,"line":8005},[102,110110,101412],{"class":112},[102,110112,158],{"class":108},[102,110114,101417],{"class":112},[102,110116,110117],{"class":104,"line":8011},[102,110118,2389],{"emptyLinePlaceholder":30},[102,110120,110121,110123,110125,110127,110129],{"class":104,"line":8023},[102,110122,105060],{"class":112},[102,110124,330],{"class":161},[102,110126,4432],{"class":112},[102,110128,158],{"class":108},[102,110130,110131],{"class":161}," 0.1\n",[102,110133,110134],{"class":104,"line":8035},[102,110135,105073],{"class":112},[102,110137,110138],{"class":104,"line":8047},[102,110139,2389],{"emptyLinePlaceholder":30},[102,110141,110142,110145,110147],{"class":104,"line":9706},[102,110143,110144],{"class":112},"    total_reward ",[102,110146,158],{"class":108},[102,110148,104752],{"class":161},[102,110150,110151],{"class":104,"line":9731},[102,110152,2389],{"emptyLinePlaceholder":30},[102,110154,110155,110157,110159,110161,110163,110165,110167],{"class":104,"line":9754},[102,110156,3190],{"class":108},[102,110158,31607],{"class":112},[102,110160,26034],{"class":108},[102,110162,32434],{"class":161},[102,110164,113],{"class":112},[102,110166,6400],{"class":161},[102,110168,30777],{"class":112},[102,110170,110171,110174,110176],{"class":104,"line":9778},[102,110172,110173],{"class":112},"        obs ",[102,110175,158],{"class":108},[102,110177,110178],{"class":112}," get_observation(data)\n",[102,110180,110181,110184,110186,110188,110190],{"class":104,"line":9783},[102,110182,110183],{"class":112},"        pole_angle ",[102,110185,158],{"class":108},[102,110187,110027],{"class":112},[102,110189,330],{"class":161},[102,110191,33237],{"class":112},[102,110193,110194,110197,110199,110201,110203],{"class":104,"line":9788},[102,110195,110196],{"class":112},"        pole_angular_velocity ",[102,110198,158],{"class":108},[102,110200,110027],{"class":112},[102,110202,184],{"class":161},[102,110204,33237],{"class":112},[102,110206,110207],{"class":104,"line":9793},[102,110208,2389],{"emptyLinePlaceholder":30},[102,110210,110211,110214,110216,110219,110221,110223,110225,110227,110229],{"class":104,"line":9802},[102,110212,110213],{"class":112},"        action ",[102,110215,158],{"class":108},[102,110217,110218],{"class":161}," 2.0",[102,110220,6508],{"class":108},[102,110222,109811],{"class":112},[102,110224,594],{"class":108},[102,110226,61858],{"class":161},[102,110228,6508],{"class":108},[102,110230,110231],{"class":112}," pole_angular_velocity\n",[102,110233,110234,110236,110238,110240,110242,110244,110246,110248],{"class":104,"line":9807},[102,110235,110213],{"class":112},[102,110237,158],{"class":108},[102,110239,107438],{"class":112},[102,110241,645],{"class":108},[102,110243,102394],{"class":161},[102,110245,12425],{"class":112},[102,110247,102394],{"class":161},[102,110249,119],{"class":112},[102,110251,110252],{"class":104,"line":9813},[102,110253,2389],{"emptyLinePlaceholder":30},[102,110255,110256,110258,110260,110262,110264],{"class":104,"line":9834},[102,110257,106608],{"class":112},[102,110259,304],{"class":161},[102,110261,4432],{"class":112},[102,110263,158],{"class":108},[102,110265,107461],{"class":112},[102,110267,110268],{"class":104,"line":9840},[102,110269,101507],{"class":112},[102,110271,110272],{"class":104,"line":9854},[102,110273,2389],{"emptyLinePlaceholder":30},[102,110275,110276,110279,110281],{"class":104,"line":9860},[102,110277,110278],{"class":112},"        reward ",[102,110280,158],{"class":108},[102,110282,110283],{"class":112}," compute_reward(get_observation(data))\n",[102,110285,110286,110289,110291],{"class":104,"line":9887},[102,110287,110288],{"class":112},"        total_reward ",[102,110290,9467],{"class":108},[102,110292,110293],{"class":112}," reward\n",[102,110295,110296],{"class":104,"line":9896},[102,110297,2389],{"emptyLinePlaceholder":30},[102,110299,110300,110302,110304,110306,110308,110310,110312],{"class":104,"line":9902},[102,110301,2486],{"class":108},[102,110303,31607],{"class":112},[102,110305,441],{"class":108},[102,110307,5744],{"class":161},[102,110309,101550],{"class":108},[102,110311,4082],{"class":161},[102,110313,3728],{"class":112},[102,110315,110316,110318,110320,110323,110326,110329,110332,110334,110337,110340,110342,110344,110346,110348,110351,110353],{"class":104,"line":9910},[102,110317,34641],{"class":161},[102,110319,113],{"class":112},[102,110321,110322],{"class":217},"\"step:\"",[102,110324,110325],{"class":112},", step, ",[102,110327,110328],{"class":217},"\"obs:\"",[102,110330,110331],{"class":112},", np.round(obs, ",[102,110333,184],{"class":161},[102,110335,110336],{"class":112},"), ",[102,110338,110339],{"class":217},"\"action:\"",[102,110341,12425],{"class":112},[102,110343,32009],{"class":161},[102,110345,113],{"class":112},[102,110347,152],{"class":161},[102,110349,110350],{"class":112},"(action), ",[102,110352,184],{"class":161},[102,110354,30488],{"class":112},[102,110356,110357],{"class":104,"line":9915},[102,110358,2389],{"emptyLinePlaceholder":30},[102,110360,110361,110363,110365,110368,110370,110372,110375,110377],{"class":104,"line":16594},[102,110362,31290],{"class":161},[102,110364,113],{"class":112},[102,110366,110367],{"class":217},"\"total_reward:\"",[102,110369,12425],{"class":112},[102,110371,32009],{"class":161},[102,110373,110374],{"class":112},"(total_reward, ",[102,110376,184],{"class":161},[102,110378,30488],{"class":112},[102,110380,110381,110383,110385,110388,110391,110393],{"class":104,"line":16600},[102,110382,31290],{"class":161},[102,110384,113],{"class":112},[102,110386,110387],{"class":217},"\"final obs:\"",[102,110389,110390],{"class":112},", np.round(get_observation(data), ",[102,110392,184],{"class":161},[102,110394,30488],{"class":112},[102,110396,110397],{"class":104,"line":16623},[102,110398,2389],{"emptyLinePlaceholder":30},[102,110400,110401],{"class":104,"line":16629},[102,110402,2389],{"emptyLinePlaceholder":30},[102,110404,110405,110407,110409,110411,110413],{"class":104,"line":16652},[102,110406,1520],{"class":108},[102,110408,31211],{"class":161},[102,110410,101550],{"class":108},[102,110412,101553],{"class":217},[102,110414,3728],{"class":112},[102,110416,110417],{"class":104,"line":16666},[102,110418,101560],{"class":112},[19,110420,103561],{},[93,110422,110424],{"className":23812,"code":110423,"language":23814,"meta":23,"style":23},"touch ch6_cartpole.py\n",[99,110425,110426],{"__ignoreMap":23},[102,110427,110428,110430],{"class":104,"line":105},[102,110429,101274],{"class":1952},[102,110431,110432],{"class":217}," ch6_cartpole.py\n",[19,110434,110435],{},"运行：",[93,110437,110439],{"className":23812,"code":110438,"language":23814,"meta":23,"style":23},"python ch6_cartpole.py\n",[99,110440,110441],{"__ignoreMap":23},[102,110442,110443,110445],{"class":104,"line":105},[102,110444,30371],{"class":1952},[102,110446,110432],{"class":217},[73,110448,101563],{"id":101563},[19,110450,110451],{},"构造观测：",[93,110453,110455],{"className":30369,"code":110454,"language":30371,"meta":23,"style":23},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[99,110456,110457,110465],{"__ignoreMap":23},[102,110458,110459,110461,110463],{"class":104,"line":105},[102,110460,31938],{"class":108},[102,110462,109985],{"class":1952},[102,110464,109988],{"class":112},[102,110466,110467,110469],{"class":104,"line":24},[102,110468,4079],{"class":108},[102,110470,109995],{"class":112},[19,110472,110473,110476,110477,110479,110480,110482],{},[99,110474,110475],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[99,110478,104021],{}," 2 维，",[99,110481,104351],{}," 2 维，所以 obs 是 4 维。",[19,110484,110485],{},"设置初始角度：",[93,110487,110489],{"className":30369,"code":110488,"language":30371,"meta":23,"style":23},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[99,110490,110491,110503],{"__ignoreMap":23},[102,110492,110493,110495,110497,110499,110501],{"class":104,"line":105},[102,110494,104690],{"class":112},[102,110496,330],{"class":161},[102,110498,4432],{"class":112},[102,110500,158],{"class":108},[102,110502,110131],{"class":161},[102,110504,110505],{"class":104,"line":24},[102,110506,104534],{"class":112},[19,110508,110509],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110511,110512],{},"简单反馈控制：",[93,110514,110516],{"className":30369,"code":110515,"language":30371,"meta":23,"style":23},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[99,110517,110518,110538],{"__ignoreMap":23},[102,110519,110520,110522,110524,110526,110528,110530,110532,110534,110536],{"class":104,"line":105},[102,110521,107433],{"class":112},[102,110523,158],{"class":108},[102,110525,110218],{"class":161},[102,110527,6508],{"class":108},[102,110529,109811],{"class":112},[102,110531,594],{"class":108},[102,110533,61858],{"class":161},[102,110535,6508],{"class":108},[102,110537,110231],{"class":112},[102,110539,110540,110542,110544,110546,110548,110550,110552,110554],{"class":104,"line":24},[102,110541,107433],{"class":112},[102,110543,158],{"class":108},[102,110545,107438],{"class":112},[102,110547,645],{"class":108},[102,110549,102394],{"class":161},[102,110551,12425],{"class":112},[102,110553,102394],{"class":161},[102,110555,119],{"class":112},[19,110557,110558],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110560,110561],{},"限制动作：",[93,110563,110565],{"className":30369,"code":110564,"language":30371,"meta":23,"style":23},"np.clip(action, -1.0, 1.0)\n",[99,110566,110567],{"__ignoreMap":23},[102,110568,110569,110572,110574,110576,110578,110580],{"class":104,"line":105},[102,110570,110571],{"class":112},"np.clip(action, ",[102,110573,645],{"class":108},[102,110575,102394],{"class":161},[102,110577,12425],{"class":112},[102,110579,102394],{"class":161},[102,110581,119],{"class":112},[19,110583,110584,110585,110588],{},"因为 XML 里 ",[99,110586,110587],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[73,110590,101699],{"id":101699},[93,110592,110593],{"className":30369,"code":110454,"language":30371,"meta":23,"style":23},[99,110594,110595,110603],{"__ignoreMap":23},[102,110596,110597,110599,110601],{"class":104,"line":105},[102,110598,31938],{"class":108},[102,110600,109985],{"class":1952},[102,110602,109988],{"class":112},[102,110604,110605,110607],{"class":104,"line":24},[102,110606,4079],{"class":108},[102,110608,109995],{"class":112},[19,110610,110611,110612,110615,110616,110619,110620,110623],{},"这段定义了一个函数，用来获取当前观测。",[99,110613,110614],{},"data.qpos.copy()"," 是位置数组副本，",[99,110617,110618],{},"data.qvel.copy()"," 是速度数组副本。",[99,110621,110622],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110625,110626],{},"在本章模型里：",[93,110628,110631],{"className":110629,"code":110630,"language":5177,"meta":23},[5175],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[99,110632,110630],{"__ignoreMap":23},[19,110634,110635],{},"所以返回的 obs 是：",[93,110637,110640],{"className":110638,"code":110639,"language":5177,"meta":23},[5175],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[99,110641,110639],{"__ignoreMap":23},[93,110643,110645],{"className":30369,"code":110644,"language":30371,"meta":23,"style":23},"def compute_reward(obs: np.ndarray) -> float:\n",[99,110646,110647],{"__ignoreMap":23},[102,110648,110649,110651,110653,110655,110657],{"class":104,"line":105},[102,110650,31938],{"class":108},[102,110652,110010],{"class":1952},[102,110654,110013],{"class":112},[102,110656,152],{"class":161},[102,110658,3728],{"class":112},[19,110660,110661,110662,110665],{},"这行定义奖励函数。输入是观测 ",[99,110663,110664],{},"obs","，输出是一个浮点数奖励。",[93,110667,110669],{"className":30369,"code":110668,"language":30371,"meta":23,"style":23},"cart_x = obs[0]\npole_angle = obs[1]\n",[99,110670,110671,110684],{"__ignoreMap":23},[102,110672,110673,110676,110678,110680,110682],{"class":104,"line":105},[102,110674,110675],{"class":112},"cart_x ",[102,110677,158],{"class":108},[102,110679,110027],{"class":112},[102,110681,304],{"class":161},[102,110683,33237],{"class":112},[102,110685,110686,110689,110691,110693,110695],{"class":104,"line":24},[102,110687,110688],{"class":112},"pole_angle ",[102,110690,158],{"class":108},[102,110692,110027],{"class":112},[102,110694,330],{"class":161},[102,110696,33237],{"class":112},[19,110698,110699,110700,110703,110704,110707],{},"数组索引从 0 开始。",[99,110701,110702],{},"obs[0]"," 是第一个元素，也就是小车位置。",[99,110705,110706],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[93,110709,110710],{"className":30369,"code":109779,"language":30371,"meta":23,"style":23},[99,110711,110712],{"__ignoreMap":23},[102,110713,110714,110716,110718,110720,110722,110724,110726,110728,110730,110732,110734,110736,110738,110740],{"class":104,"line":105},[102,110715,17036],{"class":108},[102,110717,109788],{"class":161},[102,110719,113],{"class":112},[102,110721,102394],{"class":161},[102,110723,52262],{"class":108},[102,110725,109797],{"class":161},[102,110727,6508],{"class":108},[102,110729,109802],{"class":112},[102,110731,568],{"class":108},[102,110733,109802],{"class":112},[102,110735,645],{"class":108},[102,110737,109811],{"class":112},[102,110739,568],{"class":108},[102,110741,109816],{"class":112},[19,110743,110744,110745,110748,110749,110752],{},"这行计算奖励。",[99,110746,110747],{},"cart_x * cart_x"," 是小车位置的平方，",[99,110750,110751],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[93,110754,110756],{"className":30369,"code":110755,"language":30371,"meta":23,"style":23},"data.qpos[1] = 0.1\n",[99,110757,110758],{"__ignoreMap":23},[102,110759,110760,110762,110764,110766,110768],{"class":104,"line":105},[102,110761,104690],{"class":112},[102,110763,330],{"class":161},[102,110765,4432],{"class":112},[102,110767,158],{"class":108},[102,110769,110131],{"class":161},[19,110771,110772,110773,110775,110776,110778],{},"手动设置杆子的初始角度。因为 ",[99,110774,105447],{}," 是小车位置，",[99,110777,105450],{}," 是杆子角度，所以这里改的是杆子。",[93,110780,110781],{"className":30369,"code":104534,"language":30371,"meta":23,"style":23},[99,110782,110783],{"__ignoreMap":23},[102,110784,110785],{"class":104,"line":105},[102,110786,104534],{"class":112},[19,110788,105493,110789,110791],{},[99,110790,104021],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[93,110793,110795],{"className":30369,"code":110794,"language":30371,"meta":23,"style":23},"total_reward = 0.0\n",[99,110796,110797],{"__ignoreMap":23},[102,110798,110799,110802,110804],{"class":104,"line":105},[102,110800,110801],{"class":112},"total_reward ",[102,110803,158],{"class":108},[102,110805,104752],{"class":161},[19,110807,110808],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[93,110810,110812],{"className":30369,"code":110811,"language":30371,"meta":23,"style":23},"for step in range(1000):\n",[99,110813,110814],{"__ignoreMap":23},[102,110815,110816,110818,110820,110822,110824,110826,110828],{"class":104,"line":105},[102,110817,3014],{"class":108},[102,110819,31607],{"class":112},[102,110821,26034],{"class":108},[102,110823,32434],{"class":161},[102,110825,113],{"class":112},[102,110827,6400],{"class":161},[102,110829,30777],{"class":112},[19,110831,110832,110833,110835],{},"循环 1000 步。",[99,110834,107125],{}," 是当前步数，从 0 到 999。",[93,110837,110839],{"className":30369,"code":110838,"language":30371,"meta":23,"style":23},"obs = get_observation(data)\n",[99,110840,110841],{"__ignoreMap":23},[102,110842,110843,110846,110848],{"class":104,"line":105},[102,110844,110845],{"class":112},"obs ",[102,110847,158],{"class":108},[102,110849,110178],{"class":112},[19,110851,110852,110853,28376],{},"读取当前状态，保存到 ",[99,110854,110664],{},[93,110856,110858],{"className":30369,"code":110857,"language":30371,"meta":23,"style":23},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[99,110859,110860,110872],{"__ignoreMap":23},[102,110861,110862,110864,110866,110868,110870],{"class":104,"line":105},[102,110863,110688],{"class":112},[102,110865,158],{"class":108},[102,110867,110027],{"class":112},[102,110869,330],{"class":161},[102,110871,33237],{"class":112},[102,110873,110874,110877,110879,110881,110883],{"class":104,"line":24},[102,110875,110876],{"class":112},"pole_angular_velocity ",[102,110878,158],{"class":108},[102,110880,110027],{"class":112},[102,110882,184],{"class":161},[102,110884,33237],{"class":112},[19,110886,110887,110888,110891,110892,28376],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[99,110889,110890],{},"obs[3]","？因为 obs 的顺序是 ",[99,110893,110894],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[93,110896,110898],{"className":30369,"code":110897,"language":30371,"meta":23,"style":23},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[99,110899,110900],{"__ignoreMap":23},[102,110901,110902,110904,110906,110908,110910,110912,110914,110916,110918],{"class":104,"line":105},[102,110903,107433],{"class":112},[102,110905,158],{"class":108},[102,110907,110218],{"class":161},[102,110909,6508],{"class":108},[102,110911,109811],{"class":112},[102,110913,594],{"class":108},[102,110915,61858],{"class":161},[102,110917,6508],{"class":108},[102,110919,110231],{"class":112},[19,110921,110922,110923,101009,110925,110927],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[99,110924,105251],{},[99,110926,35320],{}," 是人为设置的系数，不是固定公式。",[93,110929,110931],{"className":30369,"code":110930,"language":30371,"meta":23,"style":23},"action = np.clip(action, -1.0, 1.0)\n",[99,110932,110933],{"__ignoreMap":23},[102,110934,110935,110937,110939,110941,110943,110945,110947,110949],{"class":104,"line":105},[102,110936,107433],{"class":112},[102,110938,158],{"class":108},[102,110940,107438],{"class":112},[102,110942,645],{"class":108},[102,110944,102394],{"class":161},[102,110946,12425],{"class":112},[102,110948,102394],{"class":161},[102,110950,119],{"class":112},[19,110952,110953],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[93,110955,110956],{"className":30369,"code":109764,"language":30371,"meta":23,"style":23},[99,110957,110958],{"__ignoreMap":23},[102,110959,110960,110962,110964,110966,110968],{"class":104,"line":105},[102,110961,105862],{"class":112},[102,110963,304],{"class":161},[102,110965,4432],{"class":112},[102,110967,158],{"class":108},[102,110969,107461],{"class":112},[19,110971,110972],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[93,110974,110975],{"className":30369,"code":104496,"language":30371,"meta":23,"style":23},[99,110976,110977],{"__ignoreMap":23},[102,110978,110979],{"class":104,"line":105},[102,110980,104496],{"class":112},[19,110982,110983,110984,110986],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[99,110985,106117],{}," 计算小车和杆子的下一刻状态。",[93,110988,110990],{"className":30369,"code":110989,"language":30371,"meta":23,"style":23},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[99,110991,110992,111001],{"__ignoreMap":23},[102,110993,110994,110997,110999],{"class":104,"line":105},[102,110995,110996],{"class":112},"reward ",[102,110998,158],{"class":108},[102,111000,110283],{"class":112},[102,111002,111003,111005,111007],{"class":104,"line":24},[102,111004,110801],{"class":112},[102,111006,9467],{"class":108},[102,111008,110293],{"class":112},[19,111010,111011,111012,111014,111015,111018,111019,28376],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[99,111013,9467],{}," 是简写，",[99,111016,111017],{},"total_reward += reward"," 等价于 ",[99,111020,111021],{},"total_reward = total_reward + reward",[93,111023,111025],{"className":30369,"code":111024,"language":30371,"meta":23,"style":23},"if step % 100 == 0:\n",[99,111026,111027],{"__ignoreMap":23},[102,111028,111029,111031,111033,111035,111037,111039,111041],{"class":104,"line":105},[102,111030,1520],{"class":108},[102,111032,31607],{"class":112},[102,111034,441],{"class":108},[102,111036,5744],{"class":161},[102,111038,101550],{"class":108},[102,111040,4082],{"class":161},[102,111042,3728],{"class":112},[19,111044,111045,111047,111048,111051],{},[99,111046,441],{}," 是取余数。",[99,111049,111050],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[93,111053,111055],{"className":30369,"code":111054,"language":30371,"meta":23,"style":23},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[99,111056,111057],{"__ignoreMap":23},[102,111058,111059,111061,111063,111065,111067,111069,111071,111073,111075,111077,111079,111081,111083,111085,111087,111089],{"class":104,"line":105},[102,111060,30406],{"class":161},[102,111062,113],{"class":112},[102,111064,110322],{"class":217},[102,111066,110325],{"class":112},[102,111068,110328],{"class":217},[102,111070,110331],{"class":112},[102,111072,184],{"class":161},[102,111074,110336],{"class":112},[102,111076,110339],{"class":217},[102,111078,12425],{"class":112},[102,111080,32009],{"class":161},[102,111082,113],{"class":112},[102,111084,152],{"class":161},[102,111086,110350],{"class":112},[102,111088,184],{"class":161},[102,111090,30488],{"class":112},[19,111092,111093,111094,111097,111098,111101],{},"打印当前步数、观测和动作。",[99,111095,111096],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[99,111099,111100],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111103,102307],{"id":102306},[19,111105,111106],{},"观测向量:",[93,111108,111111],{"className":111109,"code":111110,"language":5177,"meta":23},[5175],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[99,111112,111110],{"__ignoreMap":23},[19,111114,111115],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111117,111118],{},"每隔 100 步会打印一次：",[93,111120,111123],{"className":111121,"code":111122,"language":5177,"meta":23},[5175],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[99,111124,111122],{"__ignoreMap":23},[19,111126,111127],{},"重点观察：",[56,111129,111130,111136,111141],{},[59,111131,111132,111135],{},[99,111133,111134],{},"pole_angle"," 是否越来越大。",[59,111137,111138,111140],{},[99,111139,109717],{}," 是否跑得太远。",[59,111142,111143,111144,82530,111146,28376],{},"action 是否经常被 clip 到 ",[99,111145,103906],{},[99,111147,330],{},[19,111149,111150],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111152,102339],{"id":102338},[56,111154,111155,111161,111164,111170,111180,111186,111189],{},[59,111156,111157,111158,28376],{},"把初始角度改为 ",[99,111159,111160],{},"data.qpos[1] = 0.3",[59,111162,111163],{},"重新运行，观察控制是否变差。",[59,111165,111166,111167,111169],{},"把 actuator ",[99,111168,107058],{}," 改小。",[59,111171,111172,111173,111176,111177,28376],{},"打印 ",[99,111174,111175],{},"model.nq, model.nv, model.nu","，应为 ",[99,111178,111179],{},"2 2 1",[59,111181,111182,111183,111185],{},"把 reward 里的 ",[99,111184,110751],{}," 系数改大，观察总奖励变化。",[59,111187,111188],{},"把控制器改成反号，观察杆子是否更容易倒。",[59,111190,111191],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111193,102444],{"id":102443},[73,111195,111196],{"id":111196},"杆子方向和预期不一致",[19,111198,102387,111199,111201,111202,111204],{},[99,111200,106230],{}," 和 capsule 的 ",[99,111203,103167],{},"，必要时用 viewer 可视化确认。",[73,111206,111207],{"id":111207},"控制器越控越倒",[19,111209,111210],{},"说明反馈符号可能反了，尝试:",[93,111212,111214],{"className":30369,"code":111213,"language":30371,"meta":23,"style":23},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[99,111215,111216],{"__ignoreMap":23},[102,111217,111218,111220,111222,111224,111226,111228,111230,111232,111234,111236],{"class":104,"line":105},[102,111219,107433],{"class":112},[102,111221,158],{"class":108},[102,111223,52262],{"class":108},[102,111225,105251],{"class":161},[102,111227,6508],{"class":108},[102,111229,109811],{"class":112},[102,111231,645],{"class":108},[102,111233,61858],{"class":161},[102,111235,6508],{"class":108},[102,111237,110231],{"class":112},[73,111239,111240],{"id":111240},"小车飞走",[19,111242,111243,111244,111246,111247,111250],{},"降低 ",[99,111245,107058],{}," 或缩小 ",[99,111248,111249],{},"action"," 的 clip 范围。",[73,111252,111254,111256],{"id":111253},"obs3-为什么是杆子角速度",[99,111255,110890],{}," 为什么是杆子角速度",[19,111258,111259],{},"因为这个模型里：",[93,111261,111264],{"className":111262,"code":111263,"language":5177,"meta":23},[5175],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[99,111265,111263],{"__ignoreMap":23},[19,111267,109738],{},[93,111269,111272],{"className":111270,"code":111271,"language":5177,"meta":23},[5175],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[99,111273,111271],{"__ignoreMap":23},[73,111275,111277],{"id":111276},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111279,111280],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111282,102598],{"id":102597},[19,111284,111285],{},"一个控制任务通常包含：",[56,111287,111288,111291,111299,111304,111307],{},[59,111289,111290],{},"模型：Cartpole 的 body、joint、actuator。",[59,111292,111293,111294,325,111296,111298],{},"观测：从 ",[99,111295,104021],{},[99,111297,104351],{}," 里取状态。",[59,111300,111301,111302,28376],{},"动作：写入 ",[99,111303,101067],{},[59,111305,111306],{},"奖励：根据任务目标打分。",[59,111308,111309],{},"循环：obs -> action -> step -> reward。",[19,111311,111312],{},"这就是后面 Gymnasium 环境的基本骨架。",[5116,111314,104277],{},{"title":23,"searchDepth":24,"depth":24,"links":111316},[111317,111318,111319,111324,111328,111329,111330,111338],{"id":100637,"depth":24,"text":100638},{"id":100760,"depth":24,"text":100761},{"id":101035,"depth":24,"text":101036,"children":111320},[111321,111322,111323],{"id":109691,"depth":1168,"text":109692},{"id":109756,"depth":1168,"text":109757},{"id":109772,"depth":1168,"text":109773},{"id":101243,"depth":24,"text":101244,"children":111325},[111326,111327],{"id":101563,"depth":1168,"text":101563},{"id":101699,"depth":1168,"text":101699},{"id":102306,"depth":24,"text":102307},{"id":102338,"depth":24,"text":102339},{"id":102443,"depth":24,"text":102444,"children":111331},[111332,111333,111334,111335,111337],{"id":111196,"depth":1168,"text":111196},{"id":111207,"depth":1168,"text":111207},{"id":111240,"depth":1168,"text":111240},{"id":111253,"depth":1168,"text":111336},"obs[3] 为什么是杆子角速度",{"id":111276,"depth":1168,"text":111277},{"id":102597,"depth":24,"text":102598},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109427,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111345,"title":111346,"body":111347,"description":23,"extension":28,"meta":113361,"navigation":30,"path":113362,"seo":113363,"stem":113364,"__hash__":113365},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111348,"toc":113337},[111349,111352,111354,111357,111359,111376,111379,111382,111388,111391,111393,111395,111419,111421,111435,111437,111478,111480,111498,111500,111503,111509,111512,111540,111544,111550,111575,111578,111609,111616,111619,111622,111628,111631,111637,111640,111646,111650,111653,111678,111681,111683,112443,112445,112457,112459,112470,112472,112475,112492,112495,112497,112508,112511,112513,112559,112562,112575,112578,112660,112663,112665,112681,112691,112704,112707,112746,112756,112767,112777,112790,112793,112822,112825,112835,112838,112844,112861,112872,112874,112880,112897,112908,112929,112932,112944,112947,112968,112971,112979,112987,113004,113007,113076,113083,113091,113094,113107,113114,113116,113119,113125,113128,113131,113137,113143,113145,113185,113187,113193,113202,113205,113207,113227,113230,113233,113239,113243,113245,113272,113275,113278,113305,113311,113314,113317,113319,113322,113325,113331,113334],[10,111350,111346],{"id":111351},"_7控制任务reacher-机械臂到达目标",[14,111353,100638],{"id":100637},[19,111355,111356],{},"本章搭建一个二维两关节 reacher 任务。",[19,111358,104322],{},[56,111360,111361,111364,111367,111370,111373],{},[59,111362,111363],{},"两个 hinge joint",[59,111365,111366],{},"两个 motor actuator",[59,111368,111369],{},"site 作为末端点和目标点",[59,111371,111372],{},"根据末端和目标距离设计 reward",[59,111374,111375],{},"构造机械臂任务的基本形式",[19,111377,111378],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111380,111381],{},"Reacher 任务可以理解为：",[93,111383,111386],{"className":111384,"code":111385,"language":5177,"meta":23},[5175],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[99,111387,111385],{"__ignoreMap":23},[19,111389,111390],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111392,100761],{"id":100760},[19,111394,100764],{},[93,111396,111397],{"className":23812,"code":104379,"language":23814,"meta":23,"style":23},[99,111398,111399],{"__ignoreMap":23},[102,111400,111401,111403,111405,111407,111409,111411,111413,111415,111417],{"class":104,"line":105},[102,111402,24567],{"class":1952},[102,111404,26306],{"class":217},[102,111406,23824],{"class":217},[102,111408,26391],{"class":161},[102,111410,104394],{"class":217},[102,111412,100789],{"class":217},[102,111414,102492],{"class":217},[102,111416,100805],{"class":217},[102,111418,104403],{"class":217},[19,111420,102810],{},[93,111422,111423],{"className":23812,"code":100910,"language":23814,"meta":23,"style":23},[99,111424,111425],{"__ignoreMap":23},[102,111426,111427,111429,111431,111433],{"class":104,"line":105},[102,111428,23821],{"class":1952},[102,111430,23824],{"class":217},[102,111432,100921],{"class":217},[102,111434,100924],{"class":217},[19,111436,102827],{},[93,111438,111440],{"className":23812,"code":111439,"language":23814,"meta":23,"style":23},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[99,111441,111442,111459,111468],{"__ignoreMap":23},[102,111443,111444,111446,111448,111450,111453,111455,111457],{"class":104,"line":105},[102,111445,30321],{"class":1952},[102,111447,29167],{"class":217},[102,111449,25106],{"class":161},[102,111451,111452],{"class":217}," mujoco-reacher",[102,111454,100966],{"class":217},[102,111456,100969],{"class":161},[102,111458,100972],{"class":161},[102,111460,111461,111463,111465],{"class":104,"line":24},[102,111462,30321],{"class":1952},[102,111464,100979],{"class":217},[102,111466,111467],{"class":217}," mujoco-reacher\n",[102,111469,111470,111472,111474,111476],{"class":104,"line":1168},[102,111471,23821],{"class":1952},[102,111473,23824],{"class":217},[102,111475,100921],{"class":217},[102,111477,100924],{"class":217},[19,111479,100995],{},[56,111481,111482,111485,111488],{},[59,111483,111484],{},"本章使用低维状态，不使用图像输入。",[59,111486,111487],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[59,111489,111490,111491,325,111493,325,111495,111497],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[99,111492,104021],{},[99,111494,104351],{},[99,111496,103671],{}," 的方法一致。",[14,111499,101036],{"id":101035},[19,111501,111502],{},"Reacher 任务核心:",[93,111504,111507],{"className":111505,"code":111506,"language":5177,"meta":23},[5175],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[99,111508,111506],{"__ignoreMap":23},[19,111510,111511],{},"读取 site 世界坐标:",[93,111513,111515],{"className":30369,"code":111514,"language":30371,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[99,111516,111517,111530],{"__ignoreMap":23},[102,111518,111519,111521,111523,111525,111528],{"class":104,"line":105},[102,111520,103625],{"class":112},[102,111522,158],{"class":108},[102,111524,103396],{"class":112},[102,111526,111527],{"class":217},"\"tip\"",[102,111529,119],{"class":112},[102,111531,111532,111535,111537],{"class":104,"line":24},[102,111533,111534],{"class":112},"tip_pos ",[102,111536,158],{"class":108},[102,111538,111539],{"class":112}," data.site_xpos[site_id]\n",[73,111541,111543],{"id":111542},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111545,111546,111547,111549],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[99,111548,104021],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[93,111551,111553],{"className":30369,"code":111552,"language":30371,"meta":23,"style":23},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[99,111554,111555,111565],{"__ignoreMap":23},[102,111556,111557,111560,111562],{"class":104,"line":105},[102,111558,111559],{"class":112},"tip ",[102,111561,158],{"class":108},[102,111563,111564],{"class":112}," data.site_xpos[tip_site_id]\n",[102,111566,111567,111570,111572],{"class":104,"line":24},[102,111568,111569],{"class":112},"target ",[102,111571,158],{"class":108},[102,111573,111574],{"class":112}," data.site_xpos[target_site_id]\n",[19,111576,111577],{},"这样 reward 就很容易写：",[93,111579,111581],{"className":30369,"code":111580,"language":30371,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[99,111582,111583,111598],{"__ignoreMap":23},[102,111584,111585,111588,111590,111593,111595],{"class":104,"line":105},[102,111586,111587],{"class":112},"dist ",[102,111589,158],{"class":108},[102,111591,111592],{"class":112}," np.linalg.norm(tip ",[102,111594,645],{"class":108},[102,111596,111597],{"class":112}," target)\n",[102,111599,111600,111602,111604,111606],{"class":104,"line":24},[102,111601,110996],{"class":112},[102,111603,158],{"class":108},[102,111605,52262],{"class":108},[102,111607,111608],{"class":112},"dist\n",[19,111610,111611,111612,111615],{},"距离越小，",[99,111613,111614],{},"-dist"," 越接近 0，奖励越高。",[73,111617,111618],{"id":111618},"两关节机械臂的状态",[19,111620,111621],{},"这个模型有两个 hinge joint：",[93,111623,111626],{"className":111624,"code":111625,"language":5177,"meta":23},[5175],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[99,111627,111625],{"__ignoreMap":23},[19,111629,111630],{},"再加上末端和目标位置：",[93,111632,111635],{"className":111633,"code":111634,"language":5177,"meta":23},[5175],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[99,111636,111634],{"__ignoreMap":23},[19,111638,111639],{},"总维度：",[93,111641,111644],{"className":111642,"code":111643,"language":5177,"meta":23},[5175],"2 + 2 + 3 + 3 = 10\n",[99,111645,111643],{"__ignoreMap":23},[73,111647,111649],{"id":111648},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111651,111652],{},"本章把重力设为：",[93,111654,111656],{"className":53058,"code":111655,"language":53060,"meta":23,"style":23},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[99,111657,111658],{"__ignoreMap":23},[102,111659,111660,111662,111664,111666,111668,111670,111672,111674,111676],{"class":104,"line":105},[102,111661,1023],{"class":112},[102,111663,69157],{"class":51291},[102,111665,101185],{"class":1952},[102,111667,158],{"class":112},[102,111669,101190],{"class":217},[102,111671,101193],{"class":1952},[102,111673,158],{"class":112},[102,111675,103762],{"class":217},[102,111677,101135],{"class":112},[19,111679,111680],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111682,101244],{"id":101243},[93,111684,111686],{"className":30369,"code":111685,"language":30371,"meta":23,"style":23},"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",[99,111687,111688,111694,111704,111708,111712,111720,111725,111730,111734,111738,111743,111748,111752,111757,111762,111767,111771,111776,111781,111786,111791,111795,111799,111803,111807,111811,111816,111821,111825,111829,111833,111837,111841,111856,111865,111877,111900,111907,111911,111915,111925,111939,111953,111960,111964,111968,111982,111994,112006,112019,112034,112051,112055,112059,112071,112083,112091,112099,112103,112119,112124,112137,112150,112165,112169,112204,112236,112240,112244,112253,112257,112273,112283,112294,112310,112326,112342,112358,112362,112380,112400,112419,112423,112427,112439],{"__ignoreMap":23},[102,111689,111690,111692],{"class":104,"line":105},[102,111691,30383],{"class":108},[102,111693,101292],{"class":112},[102,111695,111696,111698,111700,111702],{"class":104,"line":24},[102,111697,30383],{"class":108},[102,111699,31371],{"class":112},[102,111701,31374],{"class":108},[102,111703,31377],{"class":112},[102,111705,111706],{"class":104,"line":1168},[102,111707,2389],{"emptyLinePlaceholder":30},[102,111709,111710],{"class":104,"line":1183},[102,111711,2389],{"emptyLinePlaceholder":30},[102,111713,111714,111716,111718],{"class":104,"line":1189},[102,111715,101305],{"class":161},[102,111717,13554],{"class":108},[102,111719,101310],{"class":217},[102,111721,111722],{"class":104,"line":1203},[102,111723,111724],{"class":217},"\u003Cmujoco model=\"two_link_reacher\">\n",[102,111726,111727],{"class":104,"line":1209},[102,111728,111729],{"class":217},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[102,111731,111732],{"class":104,"line":1300},[102,111733,2389],{"emptyLinePlaceholder":30},[102,111735,111736],{"class":104,"line":1306},[102,111737,101329],{"class":217},[102,111739,111740],{"class":104,"line":1318},[102,111741,111742],{"class":217},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[102,111744,111745],{"class":104,"line":1601},[102,111746,111747],{"class":217},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[102,111749,111750],{"class":104,"line":1606},[102,111751,2389],{"emptyLinePlaceholder":30},[102,111753,111754],{"class":104,"line":1612},[102,111755,111756],{"class":217},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[102,111758,111759],{"class":104,"line":1617},[102,111760,111761],{"class":217},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[102,111763,111764],{"class":104,"line":1631},[102,111765,111766],{"class":217},"      \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",[102,111768,111769],{"class":104,"line":1636},[102,111770,2389],{"emptyLinePlaceholder":30},[102,111772,111773],{"class":104,"line":1642},[102,111774,111775],{"class":217},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[102,111777,111778],{"class":104,"line":1663},[102,111779,111780],{"class":217},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[102,111782,111783],{"class":104,"line":1668},[102,111784,111785],{"class":217},"        \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",[102,111787,111788],{"class":104,"line":1682},[102,111789,111790],{"class":217},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[102,111792,111793],{"class":104,"line":1687},[102,111794,106429],{"class":217},[102,111796,111797],{"class":104,"line":1716},[102,111798,101358],{"class":217},[102,111800,111801],{"class":104,"line":1721},[102,111802,101363],{"class":217},[102,111804,111805],{"class":104,"line":1738},[102,111806,2389],{"emptyLinePlaceholder":30},[102,111808,111809],{"class":104,"line":1743},[102,111810,106446],{"class":217},[102,111812,111813],{"class":104,"line":1748},[102,111814,111815],{"class":217},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[102,111817,111818],{"class":104,"line":1753},[102,111819,111820],{"class":217},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[102,111822,111823],{"class":104,"line":1767},[102,111824,106456],{"class":217},[102,111826,111827],{"class":104,"line":1772},[102,111828,101368],{"class":217},[102,111830,111831],{"class":104,"line":2566},[102,111832,95689],{"class":217},[102,111834,111835],{"class":104,"line":2580},[102,111836,2389],{"emptyLinePlaceholder":30},[102,111838,111839],{"class":104,"line":2588},[102,111840,2389],{"emptyLinePlaceholder":30},[102,111842,111843,111845,111848,111851,111853],{"class":104,"line":2593},[102,111844,31938],{"class":108},[102,111846,111847],{"class":1952}," site_position",[102,111849,111850],{"class":112},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[102,111852,1288],{"class":161},[102,111854,111855],{"class":112},") -> np.ndarray:\n",[102,111857,111858,111860,111862],{"class":104,"line":2599},[102,111859,103391],{"class":112},[102,111861,158],{"class":108},[102,111863,111864],{"class":112}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[102,111866,111867,111869,111871,111873,111875],{"class":104,"line":2605},[102,111868,3090],{"class":108},[102,111870,103440],{"class":112},[102,111872,1023],{"class":108},[102,111874,4082],{"class":161},[102,111876,3728],{"class":112},[102,111878,111879,111881,111883,111885,111887,111890,111892,111894,111896,111898],{"class":104,"line":2610},[102,111880,103423],{"class":108},[102,111882,103426],{"class":161},[102,111884,113],{"class":112},[102,111886,165],{"class":108},[102,111888,111889],{"class":217},"\"site not found: ",[102,111891,1009],{"class":161},[102,111893,79801],{"class":112},[102,111895,1059],{"class":161},[102,111897,364],{"class":217},[102,111899,119],{"class":112},[102,111901,111902,111904],{"class":104,"line":7938},[102,111903,4079],{"class":108},[102,111905,111906],{"class":112}," data.site_xpos[site_id].copy()\n",[102,111908,111909],{"class":104,"line":7962},[102,111910,2389],{"emptyLinePlaceholder":30},[102,111912,111913],{"class":104,"line":7967},[102,111914,2389],{"emptyLinePlaceholder":30},[102,111916,111917,111919,111922],{"class":104,"line":7973},[102,111918,31938],{"class":108},[102,111920,111921],{"class":1952}," get_obs",[102,111923,111924],{"class":112},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[102,111926,111927,111930,111932,111935,111937],{"class":104,"line":8000},[102,111928,111929],{"class":112},"    tip ",[102,111931,158],{"class":108},[102,111933,111934],{"class":112}," site_position(model, data, ",[102,111936,111527],{"class":217},[102,111938,119],{"class":112},[102,111940,111941,111944,111946,111948,111951],{"class":104,"line":8005},[102,111942,111943],{"class":112},"    target ",[102,111945,158],{"class":108},[102,111947,111934],{"class":112},[102,111949,111950],{"class":217},"\"target\"",[102,111952,119],{"class":112},[102,111954,111955,111957],{"class":104,"line":8011},[102,111956,4079],{"class":108},[102,111958,111959],{"class":112}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[102,111961,111962],{"class":104,"line":8023},[102,111963,2389],{"emptyLinePlaceholder":30},[102,111965,111966],{"class":104,"line":8035},[102,111967,2389],{"emptyLinePlaceholder":30},[102,111969,111970,111972,111975,111978,111980],{"class":104,"line":8047},[102,111971,31938],{"class":108},[102,111973,111974],{"class":1952}," reward",[102,111976,111977],{"class":112},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[102,111979,152],{"class":161},[102,111981,3728],{"class":112},[102,111983,111984,111986,111988,111990,111992],{"class":104,"line":9706},[102,111985,111929],{"class":112},[102,111987,158],{"class":108},[102,111989,111934],{"class":112},[102,111991,111527],{"class":217},[102,111993,119],{"class":112},[102,111995,111996,111998,112000,112002,112004],{"class":104,"line":9731},[102,111997,111943],{"class":112},[102,111999,158],{"class":108},[102,112001,111934],{"class":112},[102,112003,111950],{"class":217},[102,112005,119],{"class":112},[102,112007,112008,112011,112013,112015,112017],{"class":104,"line":9754},[102,112009,112010],{"class":112},"    dist ",[102,112012,158],{"class":108},[102,112014,111592],{"class":112},[102,112016,645],{"class":108},[102,112018,111597],{"class":112},[102,112020,112021,112024,112026,112029,112031],{"class":104,"line":9778},[102,112022,112023],{"class":112},"    control_cost ",[102,112025,158],{"class":108},[102,112027,112028],{"class":161}," 0.01",[102,112030,6508],{"class":108},[102,112032,112033],{"class":112}," np.sum(np.square(data.ctrl))\n",[102,112035,112036,112038,112040,112042,112044,112046,112048],{"class":104,"line":9783},[102,112037,4079],{"class":108},[102,112039,109788],{"class":161},[102,112041,113],{"class":112},[102,112043,645],{"class":108},[102,112045,111587],{"class":112},[102,112047,645],{"class":108},[102,112049,112050],{"class":112}," control_cost)\n",[102,112052,112053],{"class":104,"line":9788},[102,112054,2389],{"emptyLinePlaceholder":30},[102,112056,112057],{"class":104,"line":9793},[102,112058,2389],{"emptyLinePlaceholder":30},[102,112060,112061,112063,112065,112067,112069],{"class":104,"line":9802},[102,112062,31938],{"class":108},[102,112064,1962],{"class":1952},[102,112066,101389],{"class":112},[102,112068,95677],{"class":161},[102,112070,3728],{"class":112},[102,112072,112073,112075,112077,112079,112081],{"class":104,"line":9807},[102,112074,101398],{"class":112},[102,112076,158],{"class":108},[102,112078,101403],{"class":112},[102,112080,101305],{"class":161},[102,112082,119],{"class":112},[102,112084,112085,112087,112089],{"class":104,"line":9813},[102,112086,101412],{"class":112},[102,112088,158],{"class":108},[102,112090,101417],{"class":112},[102,112092,112093,112095,112097],{"class":104,"line":9834},[102,112094,110144],{"class":112},[102,112096,158],{"class":108},[102,112098,104752],{"class":161},[102,112100,112101],{"class":104,"line":9840},[102,112102,2389],{"emptyLinePlaceholder":30},[102,112104,112105,112107,112109,112111,112113,112115,112117],{"class":104,"line":9854},[102,112106,3190],{"class":108},[102,112108,31607],{"class":112},[102,112110,26034],{"class":108},[102,112112,32434],{"class":161},[102,112114,113],{"class":112},[102,112116,65065],{"class":161},[102,112118,30777],{"class":112},[102,112120,112121],{"class":104,"line":9860},[102,112122,112123],{"class":112},"        mujoco.mj_forward(model, data)\n",[102,112125,112126,112129,112131,112133,112135],{"class":104,"line":9887},[102,112127,112128],{"class":112},"        tip ",[102,112130,158],{"class":108},[102,112132,111934],{"class":112},[102,112134,111527],{"class":217},[102,112136,119],{"class":112},[102,112138,112139,112142,112144,112146,112148],{"class":104,"line":9896},[102,112140,112141],{"class":112},"        target ",[102,112143,158],{"class":108},[102,112145,111934],{"class":112},[102,112147,111950],{"class":217},[102,112149,119],{"class":112},[102,112151,112152,112155,112157,112160,112162],{"class":104,"line":9902},[102,112153,112154],{"class":112},"        error ",[102,112156,158],{"class":108},[102,112158,112159],{"class":112}," target ",[102,112161,645],{"class":108},[102,112163,112164],{"class":112}," tip\n",[102,112166,112167],{"class":104,"line":9910},[102,112168,2389],{"emptyLinePlaceholder":30},[102,112170,112171,112173,112175,112177,112179,112182,112184,112186,112189,112191,112194,112196,112198,112200,112202],{"class":104,"line":9915},[102,112172,106608],{"class":112},[102,112174,304],{"class":161},[102,112176,4432],{"class":112},[102,112178,158],{"class":108},[102,112180,112181],{"class":112}," np.clip(",[102,112183,105251],{"class":161},[102,112185,6508],{"class":108},[102,112187,112188],{"class":112}," error[",[102,112190,190],{"class":161},[102,112192,112193],{"class":112},"], ",[102,112195,645],{"class":108},[102,112197,102394],{"class":161},[102,112199,12425],{"class":112},[102,112201,102394],{"class":161},[102,112203,119],{"class":112},[102,112205,112206,112208,112210,112212,112214,112216,112218,112220,112222,112224,112226,112228,112230,112232,112234],{"class":104,"line":16594},[102,112207,106608],{"class":112},[102,112209,330],{"class":161},[102,112211,4432],{"class":112},[102,112213,158],{"class":108},[102,112215,112181],{"class":112},[102,112217,105251],{"class":161},[102,112219,6508],{"class":108},[102,112221,112188],{"class":112},[102,112223,304],{"class":161},[102,112225,112193],{"class":112},[102,112227,645],{"class":108},[102,112229,102394],{"class":161},[102,112231,12425],{"class":112},[102,112233,102394],{"class":161},[102,112235,119],{"class":112},[102,112237,112238],{"class":104,"line":16600},[102,112239,2389],{"emptyLinePlaceholder":30},[102,112241,112242],{"class":104,"line":16623},[102,112243,101507],{"class":112},[102,112245,112246,112248,112250],{"class":104,"line":16629},[102,112247,110288],{"class":112},[102,112249,9467],{"class":108},[102,112251,112252],{"class":112}," reward(model, data)\n",[102,112254,112255],{"class":104,"line":16652},[102,112256,2389],{"emptyLinePlaceholder":30},[102,112258,112259,112261,112263,112265,112267,112269,112271],{"class":104,"line":16666},[102,112260,2486],{"class":108},[102,112262,31607],{"class":112},[102,112264,441],{"class":108},[102,112266,5744],{"class":161},[102,112268,101550],{"class":108},[102,112270,4082],{"class":161},[102,112272,3728],{"class":112},[102,112274,112275,112278,112280],{"class":104,"line":16686},[102,112276,112277],{"class":112},"            obs ",[102,112279,158],{"class":108},[102,112281,112282],{"class":112}," get_obs(model, data)\n",[102,112284,112285,112287,112289,112291],{"class":104,"line":16692},[102,112286,34641],{"class":161},[102,112288,113],{"class":112},[102,112290,110322],{"class":217},[102,112292,112293],{"class":112},", step)\n",[102,112295,112296,112298,112300,112303,112306,112308],{"class":104,"line":16703},[102,112297,34641],{"class":161},[102,112299,113],{"class":112},[102,112301,112302],{"class":217},"\"  tip:\"",[102,112304,112305],{"class":112},", np.round(tip, ",[102,112307,184],{"class":161},[102,112309,30488],{"class":112},[102,112311,112312,112314,112316,112319,112322,112324],{"class":104,"line":16726},[102,112313,34641],{"class":161},[102,112315,113],{"class":112},[102,112317,112318],{"class":217},"\"  target:\"",[102,112320,112321],{"class":112},", np.round(target, ",[102,112323,184],{"class":161},[102,112325,30488],{"class":112},[102,112327,112328,112330,112332,112335,112338,112340],{"class":104,"line":16748},[102,112329,34641],{"class":161},[102,112331,113],{"class":112},[102,112333,112334],{"class":217},"\"  ctrl:\"",[102,112336,112337],{"class":112},", np.round(data.ctrl.copy(), ",[102,112339,184],{"class":161},[102,112341,30488],{"class":112},[102,112343,112344,112346,112348,112351,112354,112356],{"class":104,"line":16753},[102,112345,34641],{"class":161},[102,112347,113],{"class":112},[102,112349,112350],{"class":217},"\"  obs_dim:\"",[102,112352,112353],{"class":112},", obs.shape[",[102,112355,304],{"class":161},[102,112357,4646],{"class":112},[102,112359,112360],{"class":104,"line":16759},[102,112361,2389],{"emptyLinePlaceholder":30},[102,112363,112364,112366,112368,112370,112372,112374,112376,112378],{"class":104,"line":16773},[102,112365,31290],{"class":161},[102,112367,113],{"class":112},[102,112369,110367],{"class":217},[102,112371,12425],{"class":112},[102,112373,32009],{"class":161},[102,112375,110374],{"class":112},[102,112377,184],{"class":161},[102,112379,30488],{"class":112},[102,112381,112382,112384,112386,112389,112392,112394,112396,112398],{"class":104,"line":16786},[102,112383,31290],{"class":161},[102,112385,113],{"class":112},[102,112387,112388],{"class":217},"\"final tip:\"",[102,112390,112391],{"class":112},", np.round(site_position(model, data, ",[102,112393,111527],{"class":217},[102,112395,110336],{"class":112},[102,112397,184],{"class":161},[102,112399,30488],{"class":112},[102,112401,112402,112404,112406,112409,112411,112413,112415,112417],{"class":104,"line":16791},[102,112403,31290],{"class":161},[102,112405,113],{"class":112},[102,112407,112408],{"class":217},"\"target:\"",[102,112410,112391],{"class":112},[102,112412,111950],{"class":217},[102,112414,110336],{"class":112},[102,112416,184],{"class":161},[102,112418,30488],{"class":112},[102,112420,112421],{"class":104,"line":16805},[102,112422,2389],{"emptyLinePlaceholder":30},[102,112424,112425],{"class":104,"line":16810},[102,112426,2389],{"emptyLinePlaceholder":30},[102,112428,112429,112431,112433,112435,112437],{"class":104,"line":16816},[102,112430,1520],{"class":108},[102,112432,31211],{"class":161},[102,112434,101550],{"class":108},[102,112436,101553],{"class":217},[102,112438,3728],{"class":112},[102,112440,112441],{"class":104,"line":16821},[102,112442,101560],{"class":112},[19,112444,103561],{},[93,112446,112448],{"className":23812,"code":112447,"language":23814,"meta":23,"style":23},"touch ch7_reacher.py\n",[99,112449,112450],{"__ignoreMap":23},[102,112451,112452,112454],{"class":104,"line":105},[102,112453,101274],{"class":1952},[102,112455,112456],{"class":217}," ch7_reacher.py\n",[19,112458,110435],{},[93,112460,112462],{"className":23812,"code":112461,"language":23814,"meta":23,"style":23},"python ch7_reacher.py\n",[99,112463,112464],{"__ignoreMap":23},[102,112465,112466,112468],{"class":104,"line":105},[102,112467,30371],{"class":1952},[102,112469,112456],{"class":217},[73,112471,101563],{"id":101563},[19,112473,112474],{},"读取 site 坐标：",[93,112476,112478],{"className":30369,"code":112477,"language":30371,"meta":23,"style":23},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[99,112479,112480],{"__ignoreMap":23},[102,112481,112482,112484,112486,112488,112490],{"class":104,"line":105},[102,112483,31938],{"class":108},[102,112485,111847],{"class":1952},[102,112487,111850],{"class":112},[102,112489,1288],{"class":161},[102,112491,111855],{"class":112},[19,112493,112494],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112496,110451],{},[93,112498,112500],{"className":30369,"code":112499,"language":30371,"meta":23,"style":23},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[99,112501,112502],{"__ignoreMap":23},[102,112503,112504,112506],{"class":104,"line":105},[102,112505,17036],{"class":108},[102,112507,111959],{"class":112},[19,112509,112510],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112512,109776],{},[93,112514,112516],{"className":30369,"code":112515,"language":30371,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[99,112517,112518,112530,112543],{"__ignoreMap":23},[102,112519,112520,112522,112524,112526,112528],{"class":104,"line":105},[102,112521,111587],{"class":112},[102,112523,158],{"class":108},[102,112525,111592],{"class":112},[102,112527,645],{"class":108},[102,112529,111597],{"class":112},[102,112531,112532,112535,112537,112539,112541],{"class":104,"line":24},[102,112533,112534],{"class":112},"control_cost ",[102,112536,158],{"class":108},[102,112538,112028],{"class":161},[102,112540,6508],{"class":108},[102,112542,112033],{"class":112},[102,112544,112545,112547,112549,112551,112553,112555,112557],{"class":104,"line":1168},[102,112546,17036],{"class":108},[102,112548,109788],{"class":161},[102,112550,113],{"class":112},[102,112552,645],{"class":108},[102,112554,111587],{"class":112},[102,112556,645],{"class":108},[102,112558,112050],{"class":112},[19,112560,112561],{},"奖励由两部分组成：",[56,112563,112564,112569],{},[59,112565,112566,112568],{},[99,112567,111614],{},"：末端离目标越远，奖励越低。",[59,112570,112571,112574],{},[99,112572,112573],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112576,112577],{},"简单控制器：",[93,112579,112581],{"className":30369,"code":112580,"language":30371,"meta":23,"style":23},"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",[99,112582,112583,112596,112628],{"__ignoreMap":23},[102,112584,112585,112588,112590,112592,112594],{"class":104,"line":105},[102,112586,112587],{"class":112},"error ",[102,112589,158],{"class":108},[102,112591,112159],{"class":112},[102,112593,645],{"class":108},[102,112595,112164],{"class":112},[102,112597,112598,112600,112602,112604,112606,112608,112610,112612,112614,112616,112618,112620,112622,112624,112626],{"class":104,"line":24},[102,112599,105862],{"class":112},[102,112601,304],{"class":161},[102,112603,4432],{"class":112},[102,112605,158],{"class":108},[102,112607,112181],{"class":112},[102,112609,105251],{"class":161},[102,112611,6508],{"class":108},[102,112613,112188],{"class":112},[102,112615,190],{"class":161},[102,112617,112193],{"class":112},[102,112619,645],{"class":108},[102,112621,102394],{"class":161},[102,112623,12425],{"class":112},[102,112625,102394],{"class":161},[102,112627,119],{"class":112},[102,112629,112630,112632,112634,112636,112638,112640,112642,112644,112646,112648,112650,112652,112654,112656,112658],{"class":104,"line":1168},[102,112631,105862],{"class":112},[102,112633,330],{"class":161},[102,112635,4432],{"class":112},[102,112637,158],{"class":108},[102,112639,112181],{"class":112},[102,112641,105251],{"class":161},[102,112643,6508],{"class":108},[102,112645,112188],{"class":112},[102,112647,304],{"class":161},[102,112649,112193],{"class":112},[102,112651,645],{"class":108},[102,112653,102394],{"class":161},[102,112655,12425],{"class":112},[102,112657,102394],{"class":161},[102,112659,119],{"class":112},[19,112661,112662],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[73,112664,101699],{"id":101699},[93,112666,112667],{"className":30369,"code":112477,"language":30371,"meta":23,"style":23},[99,112668,112669],{"__ignoreMap":23},[102,112670,112671,112673,112675,112677,112679],{"class":104,"line":105},[102,112672,31938],{"class":108},[102,112674,111847],{"class":1952},[102,112676,111850],{"class":112},[102,112678,1288],{"class":161},[102,112680,111855],{"class":112},[19,112682,112683,112684,112686,112687,82530,112689,28376],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[99,112685,79801],{}," 是 site 的名字，比如 ",[99,112688,111527],{},[99,112690,111950],{},[93,112692,112694],{"className":30369,"code":112693,"language":30371,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[99,112695,112696],{"__ignoreMap":23},[102,112697,112698,112700,112702],{"class":104,"line":105},[102,112699,103625],{"class":112},[102,112701,158],{"class":108},[102,112703,111864],{"class":112},[19,112705,112706],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[93,112708,112710],{"className":30369,"code":112709,"language":30371,"meta":23,"style":23},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[99,112711,112712,112724],{"__ignoreMap":23},[102,112713,112714,112716,112718,112720,112722],{"class":104,"line":105},[102,112715,1520],{"class":108},[102,112717,103440],{"class":112},[102,112719,1023],{"class":108},[102,112721,4082],{"class":161},[102,112723,3728],{"class":112},[102,112725,112726,112728,112730,112732,112734,112736,112738,112740,112742,112744],{"class":104,"line":24},[102,112727,103886],{"class":108},[102,112729,103426],{"class":161},[102,112731,113],{"class":112},[102,112733,165],{"class":108},[102,112735,111889],{"class":217},[102,112737,1009],{"class":161},[102,112739,79801],{"class":112},[102,112741,1059],{"class":161},[102,112743,364],{"class":217},[102,112745,119],{"class":112},[19,112747,112748,112749,112752,112753,112755],{},"如果 site 没找到，就主动报错。",[99,112750,112751],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[99,112754,79801],{}," 的值放进字符串里。",[93,112757,112759],{"className":30369,"code":112758,"language":30371,"meta":23,"style":23},"return data.site_xpos[site_id].copy()\n",[99,112760,112761],{"__ignoreMap":23},[102,112762,112763,112765],{"class":104,"line":105},[102,112764,17036],{"class":108},[102,112766,111906],{"class":112},[19,112768,112769,112770,112772,112773,112776],{},"返回这个 site 的世界坐标。",[99,112771,103671],{}," 里的每一行都是一个 site 的 ",[99,112774,112775],{},"(x, y, z)"," 坐标。",[93,112778,112780],{"className":30369,"code":112779,"language":30371,"meta":23,"style":23},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[99,112781,112782],{"__ignoreMap":23},[102,112783,112784,112786,112788],{"class":104,"line":105},[102,112785,31938],{"class":108},[102,112787,111921],{"class":1952},[102,112789,111924],{"class":112},[19,112791,112792],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[93,112794,112796],{"className":30369,"code":112795,"language":30371,"meta":23,"style":23},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[99,112797,112798,112810],{"__ignoreMap":23},[102,112799,112800,112802,112804,112806,112808],{"class":104,"line":105},[102,112801,111559],{"class":112},[102,112803,158],{"class":108},[102,112805,111934],{"class":112},[102,112807,111527],{"class":217},[102,112809,119],{"class":112},[102,112811,112812,112814,112816,112818,112820],{"class":104,"line":24},[102,112813,111569],{"class":112},[102,112815,158],{"class":108},[102,112817,111934],{"class":112},[102,112819,111950],{"class":217},[102,112821,119],{"class":112},[19,112823,112824],{},"分别读取末端点和目标点的世界坐标。",[93,112826,112827],{"className":30369,"code":112499,"language":30371,"meta":23,"style":23},[99,112828,112829],{"__ignoreMap":23},[102,112830,112831,112833],{"class":104,"line":105},[102,112832,17036],{"class":108},[102,112834,111959],{"class":112},[19,112836,112837],{},"把四部分拼成一个观测数组：",[93,112839,112842],{"className":112840,"code":112841,"language":5177,"meta":23},[5175],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[99,112843,112841],{"__ignoreMap":23},[93,112845,112847],{"className":30369,"code":112846,"language":30371,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\n",[99,112848,112849],{"__ignoreMap":23},[102,112850,112851,112853,112855,112857,112859],{"class":104,"line":105},[102,112852,111587],{"class":112},[102,112854,158],{"class":108},[102,112856,111592],{"class":112},[102,112858,645],{"class":108},[102,112860,111597],{"class":112},[19,112862,112863,112864,112867,112868,112871],{},"计算 tip 到 target 的距离。",[99,112865,112866],{},"tip - target"," 得到一个三维向量，",[99,112869,112870],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,112873,14623],{},[93,112875,112878],{"className":112876,"code":112877,"language":5177,"meta":23},[5175],"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",[99,112879,112877],{"__ignoreMap":23},[93,112881,112883],{"className":30369,"code":112882,"language":30371,"meta":23,"style":23},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[99,112884,112885],{"__ignoreMap":23},[102,112886,112887,112889,112891,112893,112895],{"class":104,"line":105},[102,112888,112534],{"class":112},[102,112890,158],{"class":108},[102,112892,112028],{"class":161},[102,112894,6508],{"class":108},[102,112896,112033],{"class":112},[19,112898,112899,112900,112903,112904,112907],{},"计算动作惩罚。",[99,112901,112902],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[99,112905,112906],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[93,112909,112911],{"className":30369,"code":112910,"language":30371,"meta":23,"style":23},"return float(-dist - control_cost)\n",[99,112912,112913],{"__ignoreMap":23},[102,112914,112915,112917,112919,112921,112923,112925,112927],{"class":104,"line":105},[102,112916,17036],{"class":108},[102,112918,109788],{"class":161},[102,112920,113],{"class":112},[102,112922,645],{"class":108},[102,112924,111587],{"class":112},[102,112926,645],{"class":108},[102,112928,112050],{"class":112},[19,112930,112931],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[93,112933,112934],{"className":30369,"code":110794,"language":30371,"meta":23,"style":23},[99,112935,112936],{"__ignoreMap":23},[102,112937,112938,112940,112942],{"class":104,"line":105},[102,112939,110801],{"class":112},[102,112941,158],{"class":108},[102,112943,104752],{"class":161},[19,112945,112946],{},"累计奖励变量，记录整个运行过程的总分。",[93,112948,112950],{"className":30369,"code":112949,"language":30371,"meta":23,"style":23},"for step in range(500):\n",[99,112951,112952],{"__ignoreMap":23},[102,112953,112954,112956,112958,112960,112962,112964,112966],{"class":104,"line":105},[102,112955,3014],{"class":108},[102,112957,31607],{"class":112},[102,112959,26034],{"class":108},[102,112961,32434],{"class":161},[102,112963,113],{"class":112},[102,112965,65065],{"class":161},[102,112967,30777],{"class":112},[19,112969,112970],{},"运行 500 个控制步。",[93,112972,112973],{"className":30369,"code":104534,"language":30371,"meta":23,"style":23},[99,112974,112975],{"__ignoreMap":23},[102,112976,112977],{"class":104,"line":105},[102,112978,104534],{"class":112},[19,112980,112981,112982,101009,112984,112986],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[99,112983,103222],{},[99,112985,103225],{}," 是当前状态下的坐标。",[93,112988,112990],{"className":30369,"code":112989,"language":30371,"meta":23,"style":23},"error = target - tip\n",[99,112991,112992],{"__ignoreMap":23},[102,112993,112994,112996,112998,113000,113002],{"class":104,"line":105},[102,112995,112587],{"class":112},[102,112997,158],{"class":108},[102,112999,112159],{"class":112},[102,113001,645],{"class":108},[102,113003,112164],{"class":112},[19,113005,113006],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[93,113008,113010],{"className":30369,"code":113009,"language":30371,"meta":23,"style":23},"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",[99,113011,113012,113044],{"__ignoreMap":23},[102,113013,113014,113016,113018,113020,113022,113024,113026,113028,113030,113032,113034,113036,113038,113040,113042],{"class":104,"line":105},[102,113015,105862],{"class":112},[102,113017,304],{"class":161},[102,113019,4432],{"class":112},[102,113021,158],{"class":108},[102,113023,112181],{"class":112},[102,113025,105251],{"class":161},[102,113027,6508],{"class":108},[102,113029,112188],{"class":112},[102,113031,190],{"class":161},[102,113033,112193],{"class":112},[102,113035,645],{"class":108},[102,113037,102394],{"class":161},[102,113039,12425],{"class":112},[102,113041,102394],{"class":161},[102,113043,119],{"class":112},[102,113045,113046,113048,113050,113052,113054,113056,113058,113060,113062,113064,113066,113068,113070,113072,113074],{"class":104,"line":24},[102,113047,105862],{"class":112},[102,113049,330],{"class":161},[102,113051,4432],{"class":112},[102,113053,158],{"class":108},[102,113055,112181],{"class":112},[102,113057,105251],{"class":161},[102,113059,6508],{"class":108},[102,113061,112188],{"class":112},[102,113063,304],{"class":161},[102,113065,112193],{"class":112},[102,113067,645],{"class":108},[102,113069,102394],{"class":161},[102,113071,12425],{"class":112},[102,113073,102394],{"class":161},[102,113075,119],{"class":112},[19,113077,113078,113079,113082],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[99,113080,113081],{},"error -> ctrl -> step"," 的流程。",[93,113084,113085],{"className":30369,"code":104496,"language":30371,"meta":23,"style":23},[99,113086,113087],{"__ignoreMap":23},[102,113088,113089],{"class":104,"line":105},[102,113090,104496],{"class":112},[19,113092,113093],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[93,113095,113097],{"className":30369,"code":113096,"language":30371,"meta":23,"style":23},"obs = get_obs(model, data)\n",[99,113098,113099],{"__ignoreMap":23},[102,113100,113101,113103,113105],{"class":104,"line":105},[102,113102,110845],{"class":112},[102,113104,158],{"class":108},[102,113106,112282],{"class":112},[19,113108,113109,113110,113113],{},"读取最新观测。后面打印 ",[99,113111,113112],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113115,102307],{"id":102306},[19,113117,113118],{},"观测维度为:",[93,113120,113123],{"className":113121,"code":113122,"language":5177,"meta":23},[5175],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[99,113124,113122],{"__ignoreMap":23},[19,113126,113127],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113129,113130],{},"程序每 100 步打印：",[93,113132,113135],{"className":113133,"code":113134,"language":5177,"meta":23},[5175],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[99,113136,113134],{"__ignoreMap":23},[19,113138,113139,113140,113142],{},"如果控制有效，你应该看到最终 ",[99,113141,103222],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113144,102339],{"id":102338},[56,113146,113147,113150,113153,113159,113165,113172,113182],{},[59,113148,113149],{},"修改目标点位置。",[59,113151,113152],{},"重新运行，观察最终 tip 是否变化。",[59,113154,113155,113156,113158],{},"把 gravity 改成 ",[99,113157,102580],{},"，观察控制是否变差。",[59,113160,111172,113161,111176,113163,28376],{},[99,113162,102149],{},[99,113164,190],{},[59,113166,102402,113167,102405,113169,113171],{},[99,113168,110587],{},[99,113170,107298],{},"，观察机械臂是否更难移动。",[59,113173,102402,113174,82521,113176,102405,113178,113181],{},[99,113175,103225],{},[99,113177,104137],{},[99,113179,113180],{},"0.2 0 0.6","，观察 reward 和 final tip。",[59,113183,113184],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113186,102444],{"id":102443},[73,113188,113190],{"id":113189},"site-not-found",[99,113191,113192],{},"site not found",[19,113194,113195,113196,101009,113199,28376],{},"检查 XML 中是否有 ",[99,113197,113198],{},"site name=\"tip\"",[99,113200,113201],{},"site name=\"target\"",[73,113203,113204],{"id":113204},"机械臂完全不动",[19,113206,102514],{},[56,113208,113209,113214,113217,113222],{},[59,113210,113211,113213],{},[99,113212,102149],{}," 是否为 2",[59,113215,113216],{},"actuator 是否引用正确 joint",[59,113218,113219,113221],{},[99,113220,101067],{}," 是否被赋值",[59,113223,113224,113225],{},"是否执行了 ",[99,113226,100676],{},[73,113228,113229],{"id":113229},"控制效果不好",[19,113231,113232],{},"正常。本章重点不是控制器最优，而是任务结构:",[93,113234,113237],{"className":113235,"code":113236,"language":5177,"meta":23},[5175],"obs → action → mj_step → reward → next_obs\n",[99,113238,113236],{"__ignoreMap":23},[73,113240,113242],{"id":113241},"tip-坐标不变化","tip 坐标不变化",[19,113244,102566],{},[56,113246,113247,113252,113260,113269],{},[59,113248,113249,113250,28376],{},"是否每步调用了 ",[99,113251,100676],{},[59,113253,113254,113255,101009,113257,28376],{},"是否写入了 ",[99,113256,106117],{},[99,113258,113259],{},"data.ctrl[1]",[59,113261,113262,113263,325,113266,28376],{},"actuator 是否正确引用 ",[99,113264,113265],{},"joint1",[99,113267,113268],{},"joint2",[59,113270,113271],{},"控制输入是否太小。",[73,113273,113274],{"id":113274},"目标点不会动",[19,113276,113277],{},"本章的 target 是固定 site：",[93,113279,113281],{"className":53058,"code":113280,"language":53060,"meta":23,"style":23},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[99,113282,113283],{"__ignoreMap":23},[102,113284,113285,113287,113289,113291,113293,113295,113297,113299,113302],{"class":104,"line":105},[102,113286,1023],{"class":112},[102,113288,103201],{"class":51291},[102,113290,14910],{"class":1952},[102,113292,158],{"class":112},[102,113294,111950],{"class":217},[102,113296,101097],{"class":1952},[102,113298,158],{"class":112},[102,113300,113301],{"class":217},"\"0.5 0 0.4\"",[102,113303,113304],{"class":112}," ...\u002F>\n",[19,113306,113307,113308,113310],{},"它直接挂在 ",[99,113309,101832],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[73,113312,113313],{"id":113313},"机械臂不像真实机械臂",[19,113315,113316],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113318,102598],{"id":102597},[19,113320,113321],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113323,113324],{},"核心公式：",[93,113326,113329],{"className":113327,"code":113328,"language":5177,"meta":23},[5175],"distance = ||tip - target||\nreward = -distance - action_cost\n",[99,113330,113328],{"__ignoreMap":23},[19,113332,113333],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5116,113335,113336],{},"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":23,"searchDepth":24,"depth":24,"links":113338},[113339,113340,113341,113346,113350,113351,113352,113360],{"id":100637,"depth":24,"text":100638},{"id":100760,"depth":24,"text":100761},{"id":101035,"depth":24,"text":101036,"children":113342},[113343,113344,113345],{"id":111542,"depth":1168,"text":111543},{"id":111618,"depth":1168,"text":111618},{"id":111648,"depth":1168,"text":111649},{"id":101243,"depth":24,"text":101244,"children":113347},[113348,113349],{"id":101563,"depth":1168,"text":101563},{"id":101699,"depth":1168,"text":101699},{"id":102306,"depth":24,"text":102307},{"id":102338,"depth":24,"text":102339},{"id":102443,"depth":24,"text":102444,"children":113353},[113354,113355,113356,113357,113358,113359],{"id":113189,"depth":1168,"text":113192},{"id":113204,"depth":1168,"text":113204},{"id":113229,"depth":1168,"text":113229},{"id":113241,"depth":1168,"text":113242},{"id":113274,"depth":1168,"text":113274},{"id":113313,"depth":1168,"text":113313},{"id":102597,"depth":24,"text":102598},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111346,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113367,"title":113368,"body":113369,"description":23,"extension":28,"meta":116831,"navigation":30,"path":116832,"seo":116833,"stem":116834,"__hash__":116835},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113370,"toc":116802},[113371,113374,113376,113379,113382,113407,113410,113416,113419,113425,113427,113429,113453,113455,113473,113475,113518,113520,113547,113549,113552,113604,113607,113613,113622,113625,113663,113666,113705,113708,113716,113723,113726,113732,113734,113788,113795,113840,113843,113847,113863,113873,113875,115136,115138,115150,115152,115163,115165,115168,115189,115192,115195,115228,115234,115237,115270,115273,115276,115317,115322,115336,115339,115352,115357,115380,115382,115397,115407,115422,115429,115449,115464,115482,115485,115502,115510,115526,115532,115564,115577,115609,115619,115654,115668,115714,115728,115770,115781,115794,115800,115833,115836,115863,115873,115913,115923,115940,115947,115965,115968,116009,116022,116037,116040,116063,116066,116078,116081,116100,116105,116126,116129,116144,116147,116181,116193,116208,116211,116236,116239,116258,116261,116293,116296,116320,116326,116356,116363,116376,116379,116381,116383,116389,116392,116395,116407,116410,116412,116466,116468,116472,116478,116487,116490,116497,116499,116522,116525,116529,116531,116549,116555,116557,116590,116593,116599,116603,116606,116626,116631,116635,116642,116662,116667,116671,116674,116694,116697,116783,116787,116790,116796,116799],[10,113372,113368],{"id":113373},"_8gymnasium-风格强化学习接口基础",[14,113375,100638],{"id":100637},[19,113377,113378],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113380,113381],{},"你将实现:",[93,113383,113385],{"className":30369,"code":113384,"language":30371,"meta":23,"style":23},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[99,113386,113387,113397],{"__ignoreMap":23},[102,113388,113389,113392,113394],{"class":104,"line":105},[102,113390,113391],{"class":112},"obs, info ",[102,113393,158],{"class":108},[102,113395,113396],{"class":112}," env.reset()\n",[102,113398,113399,113402,113404],{"class":104,"line":24},[102,113400,113401],{"class":112},"obs, reward, terminated, truncated, info ",[102,113403,158],{"class":108},[102,113405,113406],{"class":112}," env.step(action)\n",[19,113408,113409],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113411,113412,113413,113415],{},"前面章节的代码都是“脚本式”的：在 ",[99,113414,102286],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113417,113418],{},"可以先记住 Gymnasium 环境的核心交互：",[93,113420,113423],{"className":113421,"code":113422,"language":5177,"meta":23},[5175],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[99,113424,113422],{"__ignoreMap":23},[14,113426,100761],{"id":100760},[19,113428,100764],{},[93,113430,113431],{"className":23812,"code":104379,"language":23814,"meta":23,"style":23},[99,113432,113433],{"__ignoreMap":23},[102,113434,113435,113437,113439,113441,113443,113445,113447,113449,113451],{"class":104,"line":105},[102,113436,24567],{"class":1952},[102,113438,26306],{"class":217},[102,113440,23824],{"class":217},[102,113442,26391],{"class":161},[102,113444,104394],{"class":217},[102,113446,100789],{"class":217},[102,113448,102492],{"class":217},[102,113450,100805],{"class":217},[102,113452,104403],{"class":217},[19,113454,102810],{},[93,113456,113458],{"className":23812,"code":113457,"language":23814,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[99,113459,113460],{"__ignoreMap":23},[102,113461,113462,113464,113466,113468,113470],{"class":104,"line":105},[102,113463,23821],{"class":1952},[102,113465,23824],{"class":217},[102,113467,100921],{"class":217},[102,113469,107702],{"class":217},[102,113471,113472],{"class":217}," gymnasium\n",[19,113474,102827],{},[93,113476,113478],{"className":23812,"code":113477,"language":23814,"meta":23,"style":23},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[99,113479,113480,113497,113506],{"__ignoreMap":23},[102,113481,113482,113484,113486,113488,113491,113493,113495],{"class":104,"line":105},[102,113483,30321],{"class":1952},[102,113485,29167],{"class":217},[102,113487,25106],{"class":161},[102,113489,113490],{"class":217}," mujoco-gym-api",[102,113492,100966],{"class":217},[102,113494,100969],{"class":161},[102,113496,100972],{"class":161},[102,113498,113499,113501,113503],{"class":104,"line":24},[102,113500,30321],{"class":1952},[102,113502,100979],{"class":217},[102,113504,113505],{"class":217}," mujoco-gym-api\n",[102,113507,113508,113510,113512,113514,113516],{"class":104,"line":1168},[102,113509,23821],{"class":1952},[102,113511,23824],{"class":217},[102,113513,100921],{"class":217},[102,113515,107702],{"class":217},[102,113517,113472],{"class":217},[19,113519,100995],{},[56,113521,113522,113532,113535,113541],{},[59,113523,113524,113525,113528,113529,28376],{},"本章使用 ",[99,113526,113527],{},"gymnasium","，不是旧版 ",[99,113530,113531],{},"gym",[59,113533,113534],{},"Gymnasium API 与旧 Gym API 有差异。",[59,113536,113537,113538,28376],{},"旧 Gym 常见返回值是 4 个: ",[99,113539,113540],{},"obs, reward, done, info",[59,113542,113543,113544,28376],{},"Gymnasium 返回值是 5 个: ",[99,113545,113546],{},"obs, reward, terminated, truncated, info",[14,113548,101036],{"id":101035},[19,113550,113551],{},"强化学习环境接口包含:",[250,113553,113554,113563],{},[253,113555,113556],{},[256,113557,113558,113561],{},[259,113559,113560],{"align":23726},"方法",[259,113562,102687],{"align":23726},[297,113564,113565,113575,113585,113595],{},[256,113566,113567,113572],{},[302,113568,113569],{"align":23726},[99,113570,113571],{},"reset()",[302,113573,113574],{"align":23726},"重置环境",[256,113576,113577,113582],{},[302,113578,113579],{"align":23726},[99,113580,113581],{},"step(action)",[302,113583,113584],{"align":23726},"执行动作",[256,113586,113587,113592],{},[302,113588,113589],{"align":23726},[99,113590,113591],{},"observation_space",[302,113593,113594],{"align":23726},"观测空间",[256,113596,113597,113602],{},[302,113598,113599],{"align":23726},[99,113600,113601],{},"action_space",[302,113603,23644],{"align":23726},[19,113605,113606],{},"一个最小环境需要完成:",[93,113608,113611],{"className":113609,"code":113610,"language":5177,"meta":23},[5175],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[99,113612,113610],{"__ignoreMap":23},[73,113614,113616,101009,113619,104629],{"id":113615},"terminated-和-truncated-的区别",[99,113617,113618],{},"terminated",[99,113620,113621],{},"truncated",[19,113623,113624],{},"Gymnasium 把“结束”拆成两个概念：",[250,113626,113627,113637],{},[253,113628,113629],{},[256,113630,113631,113633,113635],{},[259,113632,104565],{"align":23726},[259,113634,100691],{"align":23726},[259,113636,21177],{"align":23726},[297,113638,113639,113651],{},[256,113640,113641,113645,113648],{},[302,113642,113643],{"align":23726},[99,113644,113618],{},[302,113646,113647],{"align":23726},"任务自然结束",[302,113649,113650],{"align":23726},"机械臂到达目标、机器人摔倒",[256,113652,113653,113657,113660],{},[302,113654,113655],{"align":23726},[99,113656,113621],{},[302,113658,113659],{"align":23726},"因外部限制截断",[302,113661,113662],{"align":23726},"达到最大步数、时间限制",[19,113664,113665],{},"本章中：",[93,113667,113669],{"className":30369,"code":113668,"language":30371,"meta":23,"style":23},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[99,113670,113671,113686],{"__ignoreMap":23},[102,113672,113673,113676,113678,113681,113683],{"class":104,"line":105},[102,113674,113675],{"class":112},"terminated ",[102,113677,158],{"class":108},[102,113679,113680],{"class":112}," dist ",[102,113682,1023],{"class":108},[102,113684,113685],{"class":161}," 0.05\n",[102,113687,113688,113691,113693,113695,113698,113700,113702],{"class":104,"line":24},[102,113689,113690],{"class":112},"truncated ",[102,113692,158],{"class":108},[102,113694,38864],{"class":161},[102,113696,113697],{"class":112},".steps ",[102,113699,1699],{"class":108},[102,113701,38864],{"class":161},[102,113703,113704],{"class":112},".max_steps\n",[19,113706,113707],{},"也就是：",[56,113709,113710,113713],{},[59,113711,113712],{},"末端距离目标小于 0.05，任务成功结束。",[59,113714,113715],{},"步数超过上限，episode 被截断。",[73,113717,113719,101009,113721],{"id":113718},"observation_space-和-action_space",[99,113720,113591],{},[99,113722,113601],{},[19,113724,113725],{},"这两个对象告诉算法：",[93,113727,113730],{"className":113728,"code":113729,"language":5177,"meta":23},[5175],"观测长什么样\n动作允许多大\n",[99,113731,113729],{"__ignoreMap":23},[19,113733,14623],{},[93,113735,113737],{"className":30369,"code":113736,"language":30371,"meta":23,"style":23},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[99,113738,113739],{"__ignoreMap":23},[102,113740,113741,113743,113746,113748,113751,113754,113757,113759,113761,113764,113766,113768,113770,113772,113774,113776,113778,113781,113783,113785],{"class":104,"line":105},[102,113742,30814],{"class":161},[102,113744,113745],{"class":112},".action_space ",[102,113747,158],{"class":108},[102,113749,113750],{"class":112}," spaces.Box(",[102,113752,113753],{"class":5206},"low",[102,113755,113756],{"class":108},"=-",[102,113758,102394],{"class":161},[102,113760,12425],{"class":112},[102,113762,113763],{"class":5206},"high",[102,113765,158],{"class":108},[102,113767,102394],{"class":161},[102,113769,12425],{"class":112},[102,113771,95954],{"class":5206},[102,113773,158],{"class":108},[102,113775,113],{"class":112},[102,113777,190],{"class":161},[102,113779,113780],{"class":112},",), ",[102,113782,93491],{"class":5206},[102,113784,158],{"class":108},[102,113786,113787],{"class":112},"np.float32)\n",[19,113789,113790,113791,113794],{},"表示动作是 2 维数组，每个值都在 ",[99,113792,113793],{},"[-1, 1]"," 范围内。",[93,113796,113798],{"className":30369,"code":113797,"language":30371,"meta":23,"style":23},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[99,113799,113800],{"__ignoreMap":23},[102,113801,113802,113804,113807,113809,113811,113813,113815,113818,113820,113822,113824,113826,113828,113830,113832,113834,113836,113838],{"class":104,"line":105},[102,113803,30814],{"class":161},[102,113805,113806],{"class":112},".observation_space ",[102,113808,158],{"class":108},[102,113810,113750],{"class":112},[102,113812,113753],{"class":5206},[102,113814,113756],{"class":108},[102,113816,113817],{"class":112},"np.inf, ",[102,113819,113763],{"class":5206},[102,113821,158],{"class":108},[102,113823,113817],{"class":112},[102,113825,95954],{"class":5206},[102,113827,158],{"class":108},[102,113829,113],{"class":112},[102,113831,559],{"class":161},[102,113833,113780],{"class":112},[102,113835,93491],{"class":5206},[102,113837,158],{"class":108},[102,113839,113787],{"class":112},[19,113841,113842],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[73,113844,113846],{"id":113845},"frame_skip-是什么","frame_skip 是什么",[93,113848,113850],{"className":30369,"code":113849,"language":30371,"meta":23,"style":23},"self.frame_skip = 5\n",[99,113851,113852],{"__ignoreMap":23},[102,113853,113854,113856,113859,113861],{"class":104,"line":105},[102,113855,30814],{"class":161},[102,113857,113858],{"class":112},".frame_skip ",[102,113860,158],{"class":108},[102,113862,54418],{"class":161},[19,113864,113865,113866,113869,113870,113872],{},"表示外部调用一次 ",[99,113867,113868],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[99,113871,101206],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,113874,101244],{"id":101243},[93,113876,113878],{"className":30369,"code":113877,"language":30371,"meta":23,"style":23},"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",[99,113879,113880,113892,113898,113908,113919,113923,113927,113935,113940,113944,113948,113952,113956,113960,113964,113968,113973,113977,113981,113985,113990,113994,113998,114002,114006,114010,114014,114018,114022,114026,114030,114034,114038,114042,114060,114075,114079,114092,114102,114117,114134,114138,114159,114178,114203,114217,114221,114231,114243,114253,114257,114299,114337,114341,114351,114367,114382,114401,114408,114412,114425,114440,114455,114468,114487,114503,114507,114548,114563,114578,114582,114621,114632,114645,114649,114659,114668,114672,114682,114697,114715,114719,114730,114747,114760,114764,114774,114778,114789,114800,114804,114818,114832,114848,114852,114865,114882,114897,114904,114908,114912,114924,114934,114952,114964,114976,114980,114988,115004,115013,115022,115030,115072,115085,115090,115094,115112,115116,115120,115132],{"__ignoreMap":23},[102,113881,113882,113884,113887,113889],{"class":104,"line":105},[102,113883,30383],{"class":108},[102,113885,113886],{"class":112}," gymnasium ",[102,113888,31374],{"class":108},[102,113890,113891],{"class":112}," gym\n",[102,113893,113894,113896],{"class":104,"line":24},[102,113895,30383],{"class":108},[102,113897,101292],{"class":112},[102,113899,113900,113902,113904,113906],{"class":104,"line":1168},[102,113901,30383],{"class":108},[102,113903,31371],{"class":112},[102,113905,31374],{"class":108},[102,113907,31377],{"class":112},[102,113909,113910,113912,113914,113916],{"class":104,"line":1183},[102,113911,30728],{"class":108},[102,113913,113886],{"class":112},[102,113915,30383],{"class":108},[102,113917,113918],{"class":112}," spaces\n",[102,113920,113921],{"class":104,"line":1189},[102,113922,2389],{"emptyLinePlaceholder":30},[102,113924,113925],{"class":104,"line":1203},[102,113926,2389],{"emptyLinePlaceholder":30},[102,113928,113929,113931,113933],{"class":104,"line":1209},[102,113930,101305],{"class":161},[102,113932,13554],{"class":108},[102,113934,101310],{"class":217},[102,113936,113937],{"class":104,"line":1300},[102,113938,113939],{"class":217},"\u003Cmujoco model=\"gym_reacher\">\n",[102,113941,113942],{"class":104,"line":1306},[102,113943,111729],{"class":217},[102,113945,113946],{"class":104,"line":1318},[102,113947,2389],{"emptyLinePlaceholder":30},[102,113949,113950],{"class":104,"line":1601},[102,113951,101329],{"class":217},[102,113953,113954],{"class":104,"line":1606},[102,113955,111747],{"class":217},[102,113957,113958],{"class":104,"line":1612},[102,113959,2389],{"emptyLinePlaceholder":30},[102,113961,113962],{"class":104,"line":1617},[102,113963,111756],{"class":217},[102,113965,113966],{"class":104,"line":1631},[102,113967,111761],{"class":217},[102,113969,113970],{"class":104,"line":1636},[102,113971,113972],{"class":217},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[102,113974,113975],{"class":104,"line":1642},[102,113976,2389],{"emptyLinePlaceholder":30},[102,113978,113979],{"class":104,"line":1663},[102,113980,111775],{"class":217},[102,113982,113983],{"class":104,"line":1668},[102,113984,111780],{"class":217},[102,113986,113987],{"class":104,"line":1682},[102,113988,113989],{"class":217},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[102,113991,113992],{"class":104,"line":1687},[102,113993,111790],{"class":217},[102,113995,113996],{"class":104,"line":1716},[102,113997,106429],{"class":217},[102,113999,114000],{"class":104,"line":1721},[102,114001,101358],{"class":217},[102,114003,114004],{"class":104,"line":1738},[102,114005,101363],{"class":217},[102,114007,114008],{"class":104,"line":1743},[102,114009,2389],{"emptyLinePlaceholder":30},[102,114011,114012],{"class":104,"line":1748},[102,114013,106446],{"class":217},[102,114015,114016],{"class":104,"line":1753},[102,114017,111815],{"class":217},[102,114019,114020],{"class":104,"line":1767},[102,114021,111820],{"class":217},[102,114023,114024],{"class":104,"line":1772},[102,114025,106456],{"class":217},[102,114027,114028],{"class":104,"line":2566},[102,114029,101368],{"class":217},[102,114031,114032],{"class":104,"line":2580},[102,114033,95689],{"class":217},[102,114035,114036],{"class":104,"line":2588},[102,114037,2389],{"emptyLinePlaceholder":30},[102,114039,114040],{"class":104,"line":2593},[102,114041,2389],{"emptyLinePlaceholder":30},[102,114043,114044,114046,114049,114051,114053,114055,114058],{"class":104,"line":2599},[102,114045,14684],{"class":108},[102,114047,114048],{"class":1952}," ReacherEnv",[102,114050,113],{"class":112},[102,114052,113531],{"class":1952},[102,114054,671],{"class":112},[102,114056,114057],{"class":1952},"Env",[102,114059,30777],{"class":112},[102,114061,114062,114065,114067,114069,114072],{"class":104,"line":2605},[102,114063,114064],{"class":112},"    metadata ",[102,114066,158],{"class":108},[102,114068,4437],{"class":112},[102,114070,114071],{"class":217},"\"render_modes\"",[102,114073,114074],{"class":112},": []}\n",[102,114076,114077],{"class":104,"line":2610},[102,114078,2389],{"emptyLinePlaceholder":30},[102,114080,114081,114083,114085,114088,114090],{"class":104,"line":7938},[102,114082,30792],{"class":108},[102,114084,30795],{"class":161},[102,114086,114087],{"class":112},"(self) -> ",[102,114089,95677],{"class":161},[102,114091,3728],{"class":112},[102,114093,114094,114096,114098,114100],{"class":104,"line":7962},[102,114095,30808],{"class":161},[102,114097,17251],{"class":112},[102,114099,30820],{"class":161},[102,114101,1965],{"class":112},[102,114103,114104,114106,114109,114111,114113,114115],{"class":104,"line":7967},[102,114105,30836],{"class":161},[102,114107,114108],{"class":112},".model ",[102,114110,158],{"class":108},[102,114112,101403],{"class":112},[102,114114,101305],{"class":161},[102,114116,119],{"class":112},[102,114118,114119,114121,114124,114126,114129,114131],{"class":104,"line":7973},[102,114120,30836],{"class":161},[102,114122,114123],{"class":112},".data ",[102,114125,158],{"class":108},[102,114127,114128],{"class":112}," mujoco.MjData(",[102,114130,30814],{"class":161},[102,114132,114133],{"class":112},".model)\n",[102,114135,114136],{"class":104,"line":8000},[102,114137,2389],{"emptyLinePlaceholder":30},[102,114139,114140,114142,114145,114147,114150,114152,114155,114157],{"class":104,"line":8005},[102,114141,30836],{"class":161},[102,114143,114144],{"class":112},".tip_site_id ",[102,114146,158],{"class":108},[102,114148,114149],{"class":112}," mujoco.mj_name2id(",[102,114151,30814],{"class":161},[102,114153,114154],{"class":112},".model, mujoco.mjtObj.mjOBJ_SITE, ",[102,114156,111527],{"class":217},[102,114158,119],{"class":112},[102,114160,114161,114163,114166,114168,114170,114172,114174,114176],{"class":104,"line":8011},[102,114162,30836],{"class":161},[102,114164,114165],{"class":112},".target_site_id ",[102,114167,158],{"class":108},[102,114169,114149],{"class":112},[102,114171,30814],{"class":161},[102,114173,114154],{"class":112},[102,114175,111950],{"class":217},[102,114177,119],{"class":112},[102,114179,114180,114182,114184,114186,114188,114190,114193,114195,114197,114199,114201],{"class":104,"line":8023},[102,114181,2486],{"class":108},[102,114183,38864],{"class":161},[102,114185,114144],{"class":112},[102,114187,1023],{"class":108},[102,114189,4082],{"class":161},[102,114191,114192],{"class":108}," or",[102,114194,38864],{"class":161},[102,114196,114165],{"class":112},[102,114198,1023],{"class":108},[102,114200,4082],{"class":161},[102,114202,3728],{"class":112},[102,114204,114205,114208,114210,114212,114215],{"class":104,"line":8035},[102,114206,114207],{"class":108},"            raise",[102,114209,103426],{"class":161},[102,114211,113],{"class":112},[102,114213,114214],{"class":217},"\"required sites not found\"",[102,114216,119],{"class":112},[102,114218,114219],{"class":104,"line":8047},[102,114220,2389],{"emptyLinePlaceholder":30},[102,114222,114223,114225,114227,114229],{"class":104,"line":9706},[102,114224,30836],{"class":161},[102,114226,113858],{"class":112},[102,114228,158],{"class":108},[102,114230,54418],{"class":161},[102,114232,114233,114235,114238,114240],{"class":104,"line":9731},[102,114234,30836],{"class":161},[102,114236,114237],{"class":112},".max_steps ",[102,114239,158],{"class":108},[102,114241,114242],{"class":161}," 200\n",[102,114244,114245,114247,114249,114251],{"class":104,"line":9754},[102,114246,30836],{"class":161},[102,114248,113697],{"class":112},[102,114250,158],{"class":108},[102,114252,47324],{"class":161},[102,114254,114255],{"class":104,"line":9778},[102,114256,2389],{"emptyLinePlaceholder":30},[102,114258,114259,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283,114285,114287,114289,114291,114293,114295,114297],{"class":104,"line":9783},[102,114260,30836],{"class":161},[102,114262,113745],{"class":112},[102,114264,158],{"class":108},[102,114266,113750],{"class":112},[102,114268,113753],{"class":5206},[102,114270,113756],{"class":108},[102,114272,102394],{"class":161},[102,114274,12425],{"class":112},[102,114276,113763],{"class":5206},[102,114278,158],{"class":108},[102,114280,102394],{"class":161},[102,114282,12425],{"class":112},[102,114284,95954],{"class":5206},[102,114286,158],{"class":108},[102,114288,113],{"class":112},[102,114290,190],{"class":161},[102,114292,113780],{"class":112},[102,114294,93491],{"class":5206},[102,114296,158],{"class":108},[102,114298,113787],{"class":112},[102,114300,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321,114323,114325,114327,114329,114331,114333,114335],{"class":104,"line":9788},[102,114302,30836],{"class":161},[102,114304,113806],{"class":112},[102,114306,158],{"class":108},[102,114308,113750],{"class":112},[102,114310,113753],{"class":5206},[102,114312,113756],{"class":108},[102,114314,113817],{"class":112},[102,114316,113763],{"class":5206},[102,114318,158],{"class":108},[102,114320,113817],{"class":112},[102,114322,95954],{"class":5206},[102,114324,158],{"class":108},[102,114326,113],{"class":112},[102,114328,559],{"class":161},[102,114330,113780],{"class":112},[102,114332,93491],{"class":5206},[102,114334,158],{"class":108},[102,114336,113787],{"class":112},[102,114338,114339],{"class":104,"line":9793},[102,114340,2389],{"emptyLinePlaceholder":30},[102,114342,114343,114345,114348],{"class":104,"line":9802},[102,114344,30792],{"class":108},[102,114346,114347],{"class":1952}," _get_obs",[102,114349,114350],{"class":112},"(self) -> np.ndarray:\n",[102,114352,114353,114355,114357,114359,114362,114364],{"class":104,"line":9807},[102,114354,112128],{"class":112},[102,114356,158],{"class":108},[102,114358,38864],{"class":161},[102,114360,114361],{"class":112},".data.site_xpos[",[102,114363,30814],{"class":161},[102,114365,114366],{"class":112},".tip_site_id].copy()\n",[102,114368,114369,114371,114373,114375,114377,114379],{"class":104,"line":9813},[102,114370,112141],{"class":112},[102,114372,158],{"class":108},[102,114374,38864],{"class":161},[102,114376,114361],{"class":112},[102,114378,30814],{"class":161},[102,114380,114381],{"class":112},".target_site_id].copy()\n",[102,114383,114384,114386,114388,114391,114393,114396,114398],{"class":104,"line":9834},[102,114385,110173],{"class":112},[102,114387,158],{"class":108},[102,114389,114390],{"class":112}," np.concatenate([",[102,114392,30814],{"class":161},[102,114394,114395],{"class":112},".data.qpos.copy(), ",[102,114397,30814],{"class":161},[102,114399,114400],{"class":112},".data.qvel.copy(), tip, target])\n",[102,114402,114403,114405],{"class":104,"line":9840},[102,114404,14742],{"class":108},[102,114406,114407],{"class":112}," obs.astype(np.float32)\n",[102,114409,114410],{"class":104,"line":9854},[102,114411,2389],{"emptyLinePlaceholder":30},[102,114413,114414,114416,114419,114421,114423],{"class":104,"line":9860},[102,114415,30792],{"class":108},[102,114417,114418],{"class":1952}," _get_reward",[102,114420,114087],{"class":112},[102,114422,152],{"class":161},[102,114424,3728],{"class":112},[102,114426,114427,114429,114431,114433,114435,114437],{"class":104,"line":9887},[102,114428,112128],{"class":112},[102,114430,158],{"class":108},[102,114432,38864],{"class":161},[102,114434,114361],{"class":112},[102,114436,30814],{"class":161},[102,114438,114439],{"class":112},".tip_site_id]\n",[102,114441,114442,114444,114446,114448,114450,114452],{"class":104,"line":9896},[102,114443,112141],{"class":112},[102,114445,158],{"class":108},[102,114447,38864],{"class":161},[102,114449,114361],{"class":112},[102,114451,30814],{"class":161},[102,114453,114454],{"class":112},".target_site_id]\n",[102,114456,114457,114460,114462,114464,114466],{"class":104,"line":9902},[102,114458,114459],{"class":112},"        dist ",[102,114461,158],{"class":108},[102,114463,111592],{"class":112},[102,114465,645],{"class":108},[102,114467,111597],{"class":112},[102,114469,114470,114473,114475,114477,114479,114482,114484],{"class":104,"line":9910},[102,114471,114472],{"class":112},"        control_cost ",[102,114474,158],{"class":108},[102,114476,112028],{"class":161},[102,114478,6508],{"class":108},[102,114480,114481],{"class":112}," np.sum(np.square(",[102,114483,30814],{"class":161},[102,114485,114486],{"class":112},".data.ctrl))\n",[102,114488,114489,114491,114493,114495,114497,114499,114501],{"class":104,"line":9915},[102,114490,14742],{"class":108},[102,114492,109788],{"class":161},[102,114494,113],{"class":112},[102,114496,645],{"class":108},[102,114498,111587],{"class":112},[102,114500,645],{"class":108},[102,114502,112050],{"class":112},[102,114504,114505],{"class":104,"line":16594},[102,114506,2389],{"emptyLinePlaceholder":30},[102,114508,114509,114511,114514,114517,114519,114522,114524,114526,114528,114530,114532,114535,114538,114540,114542,114544,114546],{"class":104,"line":16600},[102,114510,30792],{"class":108},[102,114512,114513],{"class":1952}," reset",[102,114515,114516],{"class":112},"(self, ",[102,114518,568],{"class":108},[102,114520,114521],{"class":112},", seed: ",[102,114523,116],{"class":161},[102,114525,25100],{"class":108},[102,114527,38924],{"class":161},[102,114529,13554],{"class":108},[102,114531,38924],{"class":161},[102,114533,114534],{"class":112},", options: ",[102,114536,114537],{"class":161},"dict",[102,114539,25100],{"class":108},[102,114541,38924],{"class":161},[102,114543,13554],{"class":108},[102,114545,38924],{"class":161},[102,114547,30777],{"class":112},[102,114549,114550,114552,114555,114558,114560],{"class":104,"line":16623},[102,114551,30808],{"class":161},[102,114553,114554],{"class":112},"().reset(",[102,114556,114557],{"class":5206},"seed",[102,114559,158],{"class":108},[102,114561,114562],{"class":112},"seed)\n",[102,114564,114565,114568,114570,114573,114575],{"class":104,"line":16629},[102,114566,114567],{"class":112},"        mujoco.mj_resetData(",[102,114569,30814],{"class":161},[102,114571,114572],{"class":112},".model, ",[102,114574,30814],{"class":161},[102,114576,114577],{"class":112},".data)\n",[102,114579,114580],{"class":104,"line":16652},[102,114581,2389],{"emptyLinePlaceholder":30},[102,114583,114584,114586,114589,114591,114593,114596,114598,114600,114602,114604,114606,114608,114610,114612,114614,114616,114618],{"class":104,"line":16666},[102,114585,30836],{"class":161},[102,114587,114588],{"class":112},".data.qpos[:] ",[102,114590,158],{"class":108},[102,114592,38864],{"class":161},[102,114594,114595],{"class":112},".np_random.uniform(",[102,114597,113753],{"class":5206},[102,114599,113756],{"class":108},[102,114601,86201],{"class":161},[102,114603,12425],{"class":112},[102,114605,113763],{"class":5206},[102,114607,158],{"class":108},[102,114609,86201],{"class":161},[102,114611,12425],{"class":112},[102,114613,31487],{"class":5206},[102,114615,158],{"class":108},[102,114617,30814],{"class":161},[102,114619,114620],{"class":112},".model.nq)\n",[102,114622,114623,114625,114628,114630],{"class":104,"line":16686},[102,114624,30836],{"class":161},[102,114626,114627],{"class":112},".data.qvel[:] ",[102,114629,158],{"class":108},[102,114631,104752],{"class":161},[102,114633,114634,114637,114639,114641,114643],{"class":104,"line":16692},[102,114635,114636],{"class":112},"        mujoco.mj_forward(",[102,114638,30814],{"class":161},[102,114640,114572],{"class":112},[102,114642,30814],{"class":161},[102,114644,114577],{"class":112},[102,114646,114647],{"class":104,"line":16703},[102,114648,2389],{"emptyLinePlaceholder":30},[102,114650,114651,114653,114655,114657],{"class":104,"line":16726},[102,114652,30836],{"class":161},[102,114654,113697],{"class":112},[102,114656,158],{"class":108},[102,114658,47324],{"class":161},[102,114660,114661,114663,114665],{"class":104,"line":16748},[102,114662,14742],{"class":108},[102,114664,38864],{"class":161},[102,114666,114667],{"class":112},"._get_obs(), {}\n",[102,114669,114670],{"class":104,"line":16753},[102,114671,2389],{"emptyLinePlaceholder":30},[102,114673,114674,114676,114679],{"class":104,"line":16759},[102,114675,30792],{"class":108},[102,114677,114678],{"class":1952}," step",[102,114680,114681],{"class":112},"(self, action):\n",[102,114683,114684,114686,114688,114691,114693,114695],{"class":104,"line":16773},[102,114685,110213],{"class":112},[102,114687,158],{"class":108},[102,114689,114690],{"class":112}," np.asarray(action, ",[102,114692,93491],{"class":5206},[102,114694,158],{"class":108},[102,114696,113787],{"class":112},[102,114698,114699,114701,114703,114705,114707,114710,114712],{"class":104,"line":16786},[102,114700,110213],{"class":112},[102,114702,158],{"class":108},[102,114704,107438],{"class":112},[102,114706,30814],{"class":161},[102,114708,114709],{"class":112},".action_space.low, ",[102,114711,30814],{"class":161},[102,114713,114714],{"class":112},".action_space.high)\n",[102,114716,114717],{"class":104,"line":16791},[102,114718,2389],{"emptyLinePlaceholder":30},[102,114720,114721,114723,114726,114728],{"class":104,"line":16805},[102,114722,30836],{"class":161},[102,114724,114725],{"class":112},".data.ctrl[:] ",[102,114727,158],{"class":108},[102,114729,107461],{"class":112},[102,114731,114732,114734,114736,114738,114740,114742,114744],{"class":104,"line":16810},[102,114733,3392],{"class":108},[102,114735,101492],{"class":112},[102,114737,26034],{"class":108},[102,114739,32434],{"class":161},[102,114741,113],{"class":112},[102,114743,30814],{"class":161},[102,114745,114746],{"class":112},".frame_skip):\n",[102,114748,114749,114752,114754,114756,114758],{"class":104,"line":16816},[102,114750,114751],{"class":112},"            mujoco.mj_step(",[102,114753,30814],{"class":161},[102,114755,114572],{"class":112},[102,114757,30814],{"class":161},[102,114759,114577],{"class":112},[102,114761,114762],{"class":104,"line":16821},[102,114763,2389],{"emptyLinePlaceholder":30},[102,114765,114766,114768,114770,114772],{"class":104,"line":16835},[102,114767,30836],{"class":161},[102,114769,113697],{"class":112},[102,114771,9467],{"class":108},[102,114773,55690],{"class":161},[102,114775,114776],{"class":104,"line":16840},[102,114777,2389],{"emptyLinePlaceholder":30},[102,114779,114780,114782,114784,114786],{"class":104,"line":16845},[102,114781,110173],{"class":112},[102,114783,158],{"class":108},[102,114785,38864],{"class":161},[102,114787,114788],{"class":112},"._get_obs()\n",[102,114790,114791,114793,114795,114797],{"class":104,"line":16859},[102,114792,110278],{"class":112},[102,114794,158],{"class":108},[102,114796,38864],{"class":161},[102,114798,114799],{"class":112},"._get_reward()\n",[102,114801,114802],{"class":104,"line":16871},[102,114803,2389],{"emptyLinePlaceholder":30},[102,114805,114806,114808,114810,114812,114814,114816],{"class":104,"line":16876},[102,114807,112128],{"class":112},[102,114809,158],{"class":108},[102,114811,38864],{"class":161},[102,114813,114361],{"class":112},[102,114815,30814],{"class":161},[102,114817,114439],{"class":112},[102,114819,114820,114822,114824,114826,114828,114830],{"class":104,"line":16889},[102,114821,112141],{"class":112},[102,114823,158],{"class":108},[102,114825,38864],{"class":161},[102,114827,114361],{"class":112},[102,114829,30814],{"class":161},[102,114831,114454],{"class":112},[102,114833,114834,114836,114838,114840,114843,114845],{"class":104,"line":16894},[102,114835,114459],{"class":112},[102,114837,158],{"class":108},[102,114839,109788],{"class":161},[102,114841,114842],{"class":112},"(np.linalg.norm(tip ",[102,114844,645],{"class":108},[102,114846,114847],{"class":112}," target))\n",[102,114849,114850],{"class":104,"line":16899},[102,114851,2389],{"emptyLinePlaceholder":30},[102,114853,114854,114857,114859,114861,114863],{"class":104,"line":16904},[102,114855,114856],{"class":112},"        terminated ",[102,114858,158],{"class":108},[102,114860,113680],{"class":112},[102,114862,1023],{"class":108},[102,114864,113685],{"class":161},[102,114866,114867,114870,114872,114874,114876,114878,114880],{"class":104,"line":16917},[102,114868,114869],{"class":112},"        truncated ",[102,114871,158],{"class":108},[102,114873,38864],{"class":161},[102,114875,113697],{"class":112},[102,114877,1699],{"class":108},[102,114879,38864],{"class":161},[102,114881,113704],{"class":112},[102,114883,114884,114887,114889,114891,114894],{"class":104,"line":16922},[102,114885,114886],{"class":112},"        info ",[102,114888,158],{"class":108},[102,114890,4437],{"class":112},[102,114892,114893],{"class":217},"\"distance\"",[102,114895,114896],{"class":112},": dist}\n",[102,114898,114899,114901],{"class":104,"line":32624},[102,114900,14742],{"class":108},[102,114902,114903],{"class":112}," obs, reward, terminated, truncated, info\n",[102,114905,114906],{"class":104,"line":32630},[102,114907,2389],{"emptyLinePlaceholder":30},[102,114909,114910],{"class":104,"line":32636},[102,114911,2389],{"emptyLinePlaceholder":30},[102,114913,114914,114916,114918,114920,114922],{"class":104,"line":32642},[102,114915,31938],{"class":108},[102,114917,1962],{"class":1952},[102,114919,101389],{"class":112},[102,114921,95677],{"class":161},[102,114923,3728],{"class":112},[102,114925,114926,114929,114931],{"class":104,"line":32648},[102,114927,114928],{"class":112},"    env ",[102,114930,158],{"class":108},[102,114932,114933],{"class":112}," ReacherEnv()\n",[102,114935,114936,114939,114941,114944,114946,114948,114950],{"class":104,"line":32659},[102,114937,114938],{"class":112},"    obs, info ",[102,114940,158],{"class":108},[102,114942,114943],{"class":112}," env.reset(",[102,114945,114557],{"class":5206},[102,114947,158],{"class":108},[102,114949,304],{"class":161},[102,114951,119],{"class":112},[102,114953,114954,114956,114958,114961],{"class":104,"line":32665},[102,114955,31290],{"class":161},[102,114957,113],{"class":112},[102,114959,114960],{"class":217},"\"initial obs shape:\"",[102,114962,114963],{"class":112},", obs.shape)\n",[102,114965,114966,114968,114970,114973],{"class":104,"line":32685},[102,114967,31290],{"class":161},[102,114969,113],{"class":112},[102,114971,114972],{"class":217},"\"initial info:\"",[102,114974,114975],{"class":112},", info)\n",[102,114977,114978],{"class":104,"line":32691},[102,114979,2389],{"emptyLinePlaceholder":30},[102,114981,114982,114984,114986],{"class":104,"line":32702},[102,114983,110144],{"class":112},[102,114985,158],{"class":108},[102,114987,104752],{"class":161},[102,114989,114990,114992,114994,114996,114998,115000,115002],{"class":104,"line":32708},[102,114991,3190],{"class":108},[102,114993,31607],{"class":112},[102,114995,26034],{"class":108},[102,114997,32434],{"class":161},[102,114999,113],{"class":112},[102,115001,813],{"class":161},[102,115003,30777],{"class":112},[102,115005,115006,115008,115010],{"class":104,"line":32714},[102,115007,110213],{"class":112},[102,115009,158],{"class":108},[102,115011,115012],{"class":112}," env.action_space.sample()\n",[102,115014,115015,115018,115020],{"class":104,"line":32720},[102,115016,115017],{"class":112},"        obs, reward, terminated, truncated, info ",[102,115019,158],{"class":108},[102,115021,113406],{"class":112},[102,115023,115024,115026,115028],{"class":104,"line":32726},[102,115025,110288],{"class":112},[102,115027,9467],{"class":108},[102,115029,110293],{"class":112},[102,115031,115032,115034,115036,115038,115040,115043,115045,115047,115050,115052,115054,115057,115059,115061,115064,115066,115068,115070],{"class":104,"line":32732},[102,115033,32442],{"class":161},[102,115035,113],{"class":112},[102,115037,110322],{"class":217},[102,115039,110325],{"class":112},[102,115041,115042],{"class":217},"\"reward:\"",[102,115044,12425],{"class":112},[102,115046,32009],{"class":161},[102,115048,115049],{"class":112},"(reward, ",[102,115051,184],{"class":161},[102,115053,110336],{"class":112},[102,115055,115056],{"class":217},"\"distance:\"",[102,115058,12425],{"class":112},[102,115060,32009],{"class":161},[102,115062,115063],{"class":112},"(info[",[102,115065,114893],{"class":217},[102,115067,112193],{"class":112},[102,115069,184],{"class":161},[102,115071,30488],{"class":112},[102,115073,115074,115076,115079,115082],{"class":104,"line":32738},[102,115075,2486],{"class":108},[102,115077,115078],{"class":112}," terminated ",[102,115080,115081],{"class":108},"or",[102,115083,115084],{"class":112}," truncated:\n",[102,115086,115087],{"class":104,"line":32744},[102,115088,115089],{"class":108},"            break\n",[102,115091,115092],{"class":104,"line":32764},[102,115093,2389],{"emptyLinePlaceholder":30},[102,115095,115096,115098,115100,115102,115104,115106,115108,115110],{"class":104,"line":32770},[102,115097,31290],{"class":161},[102,115099,113],{"class":112},[102,115101,110367],{"class":217},[102,115103,12425],{"class":112},[102,115105,32009],{"class":161},[102,115107,110374],{"class":112},[102,115109,184],{"class":161},[102,115111,30488],{"class":112},[102,115113,115114],{"class":104,"line":32786},[102,115115,2389],{"emptyLinePlaceholder":30},[102,115117,115118],{"class":104,"line":32792},[102,115119,2389],{"emptyLinePlaceholder":30},[102,115121,115122,115124,115126,115128,115130],{"class":104,"line":32806},[102,115123,1520],{"class":108},[102,115125,31211],{"class":161},[102,115127,101550],{"class":108},[102,115129,101553],{"class":217},[102,115131,3728],{"class":112},[102,115133,115134],{"class":104,"line":32812},[102,115135,101560],{"class":112},[19,115137,103561],{},[93,115139,115141],{"className":23812,"code":115140,"language":23814,"meta":23,"style":23},"touch ch8_gym_env.py\n",[99,115142,115143],{"__ignoreMap":23},[102,115144,115145,115147],{"class":104,"line":105},[102,115146,101274],{"class":1952},[102,115148,115149],{"class":217}," ch8_gym_env.py\n",[19,115151,110435],{},[93,115153,115155],{"className":23812,"code":115154,"language":23814,"meta":23,"style":23},"python ch8_gym_env.py\n",[99,115156,115157],{"__ignoreMap":23},[102,115158,115159,115161],{"class":104,"line":105},[102,115160,30371],{"class":1952},[102,115162,115149],{"class":217},[73,115164,101563],{"id":101563},[19,115166,115167],{},"继承 Gymnasium 环境：",[93,115169,115171],{"className":30369,"code":115170,"language":30371,"meta":23,"style":23},"class ReacherEnv(gym.Env):\n",[99,115172,115173],{"__ignoreMap":23},[102,115174,115175,115177,115179,115181,115183,115185,115187],{"class":104,"line":105},[102,115176,14684],{"class":108},[102,115178,114048],{"class":1952},[102,115180,113],{"class":112},[102,115182,113531],{"class":1952},[102,115184,671],{"class":112},[102,115186,114057],{"class":1952},[102,115188,30777],{"class":112},[19,115190,115191],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115193,115194],{},"初始化模型：",[93,115196,115198],{"className":30369,"code":115197,"language":30371,"meta":23,"style":23},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[99,115199,115200,115214],{"__ignoreMap":23},[102,115201,115202,115204,115206,115208,115210,115212],{"class":104,"line":105},[102,115203,30814],{"class":161},[102,115205,114108],{"class":112},[102,115207,158],{"class":108},[102,115209,101403],{"class":112},[102,115211,101305],{"class":161},[102,115213,119],{"class":112},[102,115215,115216,115218,115220,115222,115224,115226],{"class":104,"line":24},[102,115217,30814],{"class":161},[102,115219,114123],{"class":112},[102,115221,158],{"class":108},[102,115223,114128],{"class":112},[102,115225,30814],{"class":161},[102,115227,114133],{"class":112},[19,115229,115230,115231,115233],{},"这和前面章节一样，只是现在放到了类的 ",[99,115232,30820],{}," 里。",[19,115235,115236],{},"缓存 site ID：",[93,115238,115240],{"className":30369,"code":115239,"language":30371,"meta":23,"style":23},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[99,115241,115242,115256],{"__ignoreMap":23},[102,115243,115244,115246,115248,115250,115252,115254],{"class":104,"line":105},[102,115245,30814],{"class":161},[102,115247,114144],{"class":112},[102,115249,158],{"class":108},[102,115251,114149],{"class":112},[102,115253,89545],{"class":161},[102,115255,119],{"class":112},[102,115257,115258,115260,115262,115264,115266,115268],{"class":104,"line":24},[102,115259,30814],{"class":161},[102,115261,114165],{"class":112},[102,115263,158],{"class":108},[102,115265,114149],{"class":112},[102,115267,89545],{"class":161},[102,115269,119],{"class":112},[19,115271,115272],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115274,115275],{},"reset：",[93,115277,115279],{"className":30369,"code":115278,"language":30371,"meta":23,"style":23},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[99,115280,115281],{"__ignoreMap":23},[102,115282,115283,115285,115287,115289,115291,115293,115295,115297,115299,115301,115303,115305,115307,115309,115311,115313,115315],{"class":104,"line":105},[102,115284,31938],{"class":108},[102,115286,114513],{"class":1952},[102,115288,114516],{"class":112},[102,115290,568],{"class":108},[102,115292,114521],{"class":112},[102,115294,116],{"class":161},[102,115296,25100],{"class":108},[102,115298,38924],{"class":161},[102,115300,13554],{"class":108},[102,115302,38924],{"class":161},[102,115304,114534],{"class":112},[102,115306,114537],{"class":161},[102,115308,25100],{"class":108},[102,115310,38924],{"class":161},[102,115312,13554],{"class":108},[102,115314,38924],{"class":161},[102,115316,30777],{"class":112},[19,115318,115319,115321],{},[99,115320,70047],{}," 做四件事：",[56,115323,115324,115327,115330,115333],{},[59,115325,115326],{},"设置随机种子。",[59,115328,115329],{},"重置 MuJoCo data。",[59,115331,115332],{},"随机初始化关节角。",[59,115334,115335],{},"返回初始观测和 info。",[19,115337,115338],{},"step：",[93,115340,115342],{"className":30369,"code":115341,"language":30371,"meta":23,"style":23},"def step(self, action):\n",[99,115343,115344],{"__ignoreMap":23},[102,115345,115346,115348,115350],{"class":104,"line":105},[102,115347,31938],{"class":108},[102,115349,114678],{"class":1952},[102,115351,114681],{"class":112},[19,115353,115354,115356],{},[99,115355,107125],{}," 做六件事：",[56,115358,115359,115362,115368,115371,115374,115377],{},[59,115360,115361],{},"检查并裁剪 action。",[59,115363,115364,115365,28376],{},"写入 ",[99,115366,115367],{},"self.data.ctrl",[59,115369,115370],{},"连续推进若干个 MuJoCo 物理步。",[59,115372,115373],{},"计算新观测。",[59,115375,115376],{},"计算奖励和结束条件。",[59,115378,115379],{},"返回 Gymnasium 标准五元组。",[73,115381,101699],{"id":101699},[93,115383,115385],{"className":30369,"code":115384,"language":30371,"meta":23,"style":23},"import gymnasium as gym\n",[99,115386,115387],{"__ignoreMap":23},[102,115388,115389,115391,115393,115395],{"class":104,"line":105},[102,115390,30383],{"class":108},[102,115392,113886],{"class":112},[102,115394,31374],{"class":108},[102,115396,113891],{"class":112},[19,115398,115399,115400,115402,115403,115406],{},"导入 Gymnasium，并起别名 ",[99,115401,113531],{},"。后面写 ",[99,115404,115405],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[93,115408,115410],{"className":30369,"code":115409,"language":30371,"meta":23,"style":23},"from gymnasium import spaces\n",[99,115411,115412],{"__ignoreMap":23},[102,115413,115414,115416,115418,115420],{"class":104,"line":105},[102,115415,30728],{"class":108},[102,115417,113886],{"class":112},[102,115419,30383],{"class":108},[102,115421,113918],{"class":112},[19,115423,115424,115425,115428],{},"导入空间定义工具。",[99,115426,115427],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[93,115430,115431],{"className":30369,"code":115170,"language":30371,"meta":23,"style":23},[99,115432,115433],{"__ignoreMap":23},[102,115434,115435,115437,115439,115441,115443,115445,115447],{"class":104,"line":105},[102,115436,14684],{"class":108},[102,115438,114048],{"class":1952},[102,115440,113],{"class":112},[102,115442,113531],{"class":1952},[102,115444,671],{"class":112},[102,115446,114057],{"class":1952},[102,115448,30777],{"class":112},[19,115450,115451,115452,115455,115456,115458,115459,101009,115461,115463],{},"定义一个类，名字叫 ",[99,115453,115454],{},"ReacherEnv","。括号里的 ",[99,115457,115405],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[99,115460,70047],{},[99,115462,107125],{}," 这两个核心方法。",[93,115465,115467],{"className":30369,"code":115466,"language":30371,"meta":23,"style":23},"metadata = {\"render_modes\": []}\n",[99,115468,115469],{"__ignoreMap":23},[102,115470,115471,115474,115476,115478,115480],{"class":104,"line":105},[102,115472,115473],{"class":112},"metadata ",[102,115475,158],{"class":108},[102,115477,4437],{"class":112},[102,115479,114071],{"class":217},[102,115481,114074],{"class":112},[19,115483,115484],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[93,115486,115488],{"className":30369,"code":115487,"language":30371,"meta":23,"style":23},"def __init__(self) -> None:\n",[99,115489,115490],{"__ignoreMap":23},[102,115491,115492,115494,115496,115498,115500],{"class":104,"line":105},[102,115493,31938],{"class":108},[102,115495,30795],{"class":161},[102,115497,114087],{"class":112},[102,115499,95677],{"class":161},[102,115501,3728],{"class":112},[19,115503,115504,115506,115507,28376],{},[99,115505,30820],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[99,115508,115509],{},"env = ReacherEnv()",[93,115511,115513],{"className":30369,"code":115512,"language":30371,"meta":23,"style":23},"super().__init__()\n",[99,115514,115515],{"__ignoreMap":23},[102,115516,115517,115520,115522,115524],{"class":104,"line":105},[102,115518,115519],{"class":161},"super",[102,115521,17251],{"class":112},[102,115523,30820],{"class":161},[102,115525,1965],{"class":112},[19,115527,115528,115529,115531],{},"调用父类 ",[99,115530,115405],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[93,115533,115534],{"className":30369,"code":115197,"language":30371,"meta":23,"style":23},[99,115535,115536,115550],{"__ignoreMap":23},[102,115537,115538,115540,115542,115544,115546,115548],{"class":104,"line":105},[102,115539,30814],{"class":161},[102,115541,114108],{"class":112},[102,115543,158],{"class":108},[102,115545,101403],{"class":112},[102,115547,101305],{"class":161},[102,115549,119],{"class":112},[102,115551,115552,115554,115556,115558,115560,115562],{"class":104,"line":24},[102,115553,30814],{"class":161},[102,115555,114123],{"class":112},[102,115557,158],{"class":108},[102,115559,114128],{"class":112},[102,115561,30814],{"class":161},[102,115563,114133],{"class":112},[19,115565,115566,115567,115569,115570,101009,115573,115576],{},"把 MuJoCo 模型和状态保存到 ",[99,115568,30814],{}," 上。",[99,115571,115572],{},"self.model",[99,115574,115575],{},"self.data"," 表示这个环境对象自己的模型和状态。",[93,115578,115579],{"className":30369,"code":115239,"language":30371,"meta":23,"style":23},[99,115580,115581,115595],{"__ignoreMap":23},[102,115582,115583,115585,115587,115589,115591,115593],{"class":104,"line":105},[102,115584,30814],{"class":161},[102,115586,114144],{"class":112},[102,115588,158],{"class":108},[102,115590,114149],{"class":112},[102,115592,89545],{"class":161},[102,115594,119],{"class":112},[102,115596,115597,115599,115601,115603,115605,115607],{"class":104,"line":24},[102,115598,30814],{"class":161},[102,115600,114165],{"class":112},[102,115602,158],{"class":108},[102,115604,114149],{"class":112},[102,115606,89545],{"class":161},[102,115608,119],{"class":112},[19,115610,115611,115612,101009,115615,115618],{},"提前查好 tip 和 target 的 site ID。这样 ",[99,115613,115614],{},"_get_obs",[99,115616,115617],{},"_get_reward"," 里就不用每次按名字查找。",[93,115620,115622],{"className":30369,"code":115621,"language":30371,"meta":23,"style":23},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[99,115623,115624,115634,115644],{"__ignoreMap":23},[102,115625,115626,115628,115630,115632],{"class":104,"line":105},[102,115627,30814],{"class":161},[102,115629,113858],{"class":112},[102,115631,158],{"class":108},[102,115633,54418],{"class":161},[102,115635,115636,115638,115640,115642],{"class":104,"line":24},[102,115637,30814],{"class":161},[102,115639,114237],{"class":112},[102,115641,158],{"class":108},[102,115643,114242],{"class":161},[102,115645,115646,115648,115650,115652],{"class":104,"line":1168},[102,115647,30814],{"class":161},[102,115649,113697],{"class":112},[102,115651,158],{"class":108},[102,115653,47324],{"class":161},[19,115655,115656,115659,115660,115663,115664,115667],{},[99,115657,115658],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[99,115661,115662],{},"max_steps"," 是一个 episode 最多运行多少步。",[99,115665,115666],{},"steps"," 记录当前 episode 已经走了多少步。",[93,115669,115670],{"className":30369,"code":113736,"language":30371,"meta":23,"style":23},[99,115671,115672],{"__ignoreMap":23},[102,115673,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698,115700,115702,115704,115706,115708,115710,115712],{"class":104,"line":105},[102,115675,30814],{"class":161},[102,115677,113745],{"class":112},[102,115679,158],{"class":108},[102,115681,113750],{"class":112},[102,115683,113753],{"class":5206},[102,115685,113756],{"class":108},[102,115687,102394],{"class":161},[102,115689,12425],{"class":112},[102,115691,113763],{"class":5206},[102,115693,158],{"class":108},[102,115695,102394],{"class":161},[102,115697,12425],{"class":112},[102,115699,95954],{"class":5206},[102,115701,158],{"class":108},[102,115703,113],{"class":112},[102,115705,190],{"class":161},[102,115707,113780],{"class":112},[102,115709,93491],{"class":5206},[102,115711,158],{"class":108},[102,115713,113787],{"class":112},[19,115715,115716,115717,115720,115721,101009,115724,115727],{},"定义动作空间。",[99,115718,115719],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[99,115722,115723],{},"low=-1.0",[99,115725,115726],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[93,115729,115730],{"className":30369,"code":113797,"language":30371,"meta":23,"style":23},[99,115731,115732],{"__ignoreMap":23},[102,115733,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768],{"class":104,"line":105},[102,115735,30814],{"class":161},[102,115737,113806],{"class":112},[102,115739,158],{"class":108},[102,115741,113750],{"class":112},[102,115743,113753],{"class":5206},[102,115745,113756],{"class":108},[102,115747,113817],{"class":112},[102,115749,113763],{"class":5206},[102,115751,158],{"class":108},[102,115753,113817],{"class":112},[102,115755,95954],{"class":5206},[102,115757,158],{"class":108},[102,115759,113],{"class":112},[102,115761,559],{"class":161},[102,115763,113780],{"class":112},[102,115765,93491],{"class":5206},[102,115767,158],{"class":108},[102,115769,113787],{"class":112},[19,115771,115772,115773,115776,115777,115780],{},"定义观测空间。",[99,115774,115775],{},"shape=(10,)"," 表示观测是 10 个数。",[99,115778,115779],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[93,115782,115784],{"className":30369,"code":115783,"language":30371,"meta":23,"style":23},"def _get_obs(self) -> np.ndarray:\n",[99,115785,115786],{"__ignoreMap":23},[102,115787,115788,115790,115792],{"class":104,"line":105},[102,115789,31938],{"class":108},[102,115791,114347],{"class":1952},[102,115793,114350],{"class":112},[19,115795,115796,115797,115799],{},"定义内部函数，用来生成观测。函数名前面的 ",[99,115798,1105],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[93,115801,115803],{"className":30369,"code":115802,"language":30371,"meta":23,"style":23},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[99,115804,115805,115819],{"__ignoreMap":23},[102,115806,115807,115809,115811,115813,115815,115817],{"class":104,"line":105},[102,115808,111559],{"class":112},[102,115810,158],{"class":108},[102,115812,38864],{"class":161},[102,115814,114361],{"class":112},[102,115816,30814],{"class":161},[102,115818,114366],{"class":112},[102,115820,115821,115823,115825,115827,115829,115831],{"class":104,"line":24},[102,115822,111569],{"class":112},[102,115824,158],{"class":108},[102,115826,38864],{"class":161},[102,115828,114361],{"class":112},[102,115830,30814],{"class":161},[102,115832,114381],{"class":112},[19,115834,115835],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[93,115837,115839],{"className":30369,"code":115838,"language":30371,"meta":23,"style":23},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[99,115840,115841,115857],{"__ignoreMap":23},[102,115842,115843,115845,115847,115849,115851,115853,115855],{"class":104,"line":105},[102,115844,110845],{"class":112},[102,115846,158],{"class":108},[102,115848,114390],{"class":112},[102,115850,30814],{"class":161},[102,115852,114395],{"class":112},[102,115854,30814],{"class":161},[102,115856,114400],{"class":112},[102,115858,115859,115861],{"class":104,"line":24},[102,115860,17036],{"class":108},[102,115862,114407],{"class":112},[19,115864,115865,115866,115869,115870,115872],{},"拼接观测，并转换成 ",[99,115867,115868],{},"float32","。很多强化学习库默认使用 ",[99,115871,115868],{},"，所以这里主动转换。",[93,115874,115875],{"className":30369,"code":115278,"language":30371,"meta":23,"style":23},[99,115876,115877],{"__ignoreMap":23},[102,115878,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901,115903,115905,115907,115909,115911],{"class":104,"line":105},[102,115880,31938],{"class":108},[102,115882,114513],{"class":1952},[102,115884,114516],{"class":112},[102,115886,568],{"class":108},[102,115888,114521],{"class":112},[102,115890,116],{"class":161},[102,115892,25100],{"class":108},[102,115894,38924],{"class":161},[102,115896,13554],{"class":108},[102,115898,38924],{"class":161},[102,115900,114534],{"class":112},[102,115902,114537],{"class":161},[102,115904,25100],{"class":108},[102,115906,38924],{"class":161},[102,115908,13554],{"class":108},[102,115910,38924],{"class":161},[102,115912,30777],{"class":112},[19,115914,115915,115916,115918,115919,115922],{},"定义 reset。",[99,115917,114557],{}," 用来控制随机数，保证实验可以复现。",[99,115920,115921],{},"options"," 用来接收额外配置，本章暂时不用。",[93,115924,115926],{"className":30369,"code":115925,"language":30371,"meta":23,"style":23},"super().reset(seed=seed)\n",[99,115927,115928],{"__ignoreMap":23},[102,115929,115930,115932,115934,115936,115938],{"class":104,"line":105},[102,115931,115519],{"class":161},[102,115933,114554],{"class":112},[102,115935,114557],{"class":5206},[102,115937,158],{"class":108},[102,115939,114562],{"class":112},[19,115941,115942,115943,115946],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[99,115944,115945],{},"self.np_random"," 生成可复现的随机数。",[93,115948,115950],{"className":30369,"code":115949,"language":30371,"meta":23,"style":23},"mujoco.mj_resetData(self.model, self.data)\n",[99,115951,115952],{"__ignoreMap":23},[102,115953,115954,115957,115959,115961,115963],{"class":104,"line":105},[102,115955,115956],{"class":112},"mujoco.mj_resetData(",[102,115958,30814],{"class":161},[102,115960,114572],{"class":112},[102,115962,30814],{"class":161},[102,115964,114577],{"class":112},[19,115966,115967],{},"把 MuJoCo 状态重置到默认状态。",[93,115969,115971],{"className":30369,"code":115970,"language":30371,"meta":23,"style":23},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[99,115972,115973],{"__ignoreMap":23},[102,115974,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993,115995,115997,115999,116001,116003,116005,116007],{"class":104,"line":105},[102,115976,30814],{"class":161},[102,115978,114588],{"class":112},[102,115980,158],{"class":108},[102,115982,38864],{"class":161},[102,115984,114595],{"class":112},[102,115986,113753],{"class":5206},[102,115988,113756],{"class":108},[102,115990,86201],{"class":161},[102,115992,12425],{"class":112},[102,115994,113763],{"class":5206},[102,115996,158],{"class":108},[102,115998,86201],{"class":161},[102,116000,12425],{"class":112},[102,116002,31487],{"class":5206},[102,116004,158],{"class":108},[102,116006,30814],{"class":161},[102,116008,114620],{"class":112},[19,116010,115332,116011,116014,116015,116018,116019,116021],{},[99,116012,116013],{},"[:]"," 表示修改整个数组。",[99,116016,116017],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[99,116020,102141],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[93,116023,116025],{"className":30369,"code":116024,"language":30371,"meta":23,"style":23},"self.data.qvel[:] = 0.0\n",[99,116026,116027],{"__ignoreMap":23},[102,116028,116029,116031,116033,116035],{"class":104,"line":105},[102,116030,30814],{"class":161},[102,116032,114627],{"class":112},[102,116034,158],{"class":108},[102,116036,104752],{"class":161},[19,116038,116039],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[93,116041,116043],{"className":30369,"code":116042,"language":30371,"meta":23,"style":23},"self.steps = 0\nreturn self._get_obs(), {}\n",[99,116044,116045,116055],{"__ignoreMap":23},[102,116046,116047,116049,116051,116053],{"class":104,"line":105},[102,116048,30814],{"class":161},[102,116050,113697],{"class":112},[102,116052,158],{"class":108},[102,116054,47324],{"class":161},[102,116056,116057,116059,116061],{"class":104,"line":24},[102,116058,17036],{"class":108},[102,116060,38864],{"class":161},[102,116062,114667],{"class":112},[19,116064,116065],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[93,116067,116068],{"className":30369,"code":115341,"language":30371,"meta":23,"style":23},[99,116069,116070],{"__ignoreMap":23},[102,116071,116072,116074,116076],{"class":104,"line":105},[102,116073,31938],{"class":108},[102,116075,114678],{"class":1952},[102,116077,114681],{"class":112},[19,116079,116080],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[93,116082,116084],{"className":30369,"code":116083,"language":30371,"meta":23,"style":23},"action = np.asarray(action, dtype=np.float32)\n",[99,116085,116086],{"__ignoreMap":23},[102,116087,116088,116090,116092,116094,116096,116098],{"class":104,"line":105},[102,116089,107433],{"class":112},[102,116091,158],{"class":108},[102,116093,114690],{"class":112},[102,116095,93491],{"class":5206},[102,116097,158],{"class":108},[102,116099,113787],{"class":112},[19,116101,116102,116103,28376],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[99,116104,115868],{},[93,116106,116108],{"className":30369,"code":116107,"language":30371,"meta":23,"style":23},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[99,116109,116110],{"__ignoreMap":23},[102,116111,116112,116114,116116,116118,116120,116122,116124],{"class":104,"line":105},[102,116113,107433],{"class":112},[102,116115,158],{"class":108},[102,116117,107438],{"class":112},[102,116119,30814],{"class":161},[102,116121,114709],{"class":112},[102,116123,30814],{"class":161},[102,116125,114714],{"class":112},[19,116127,116128],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[93,116130,116132],{"className":30369,"code":116131,"language":30371,"meta":23,"style":23},"self.data.ctrl[:] = action\n",[99,116133,116134],{"__ignoreMap":23},[102,116135,116136,116138,116140,116142],{"class":104,"line":105},[102,116137,30814],{"class":161},[102,116139,114725],{"class":112},[102,116141,158],{"class":108},[102,116143,107461],{"class":112},[19,116145,116146],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[93,116148,116150],{"className":30369,"code":116149,"language":30371,"meta":23,"style":23},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[99,116151,116152,116168],{"__ignoreMap":23},[102,116153,116154,116156,116158,116160,116162,116164,116166],{"class":104,"line":105},[102,116155,3014],{"class":108},[102,116157,101492],{"class":112},[102,116159,26034],{"class":108},[102,116161,32434],{"class":161},[102,116163,113],{"class":112},[102,116165,30814],{"class":161},[102,116167,114746],{"class":112},[102,116169,116170,116173,116175,116177,116179],{"class":104,"line":24},[102,116171,116172],{"class":112},"    mujoco.mj_step(",[102,116174,30814],{"class":161},[102,116176,114572],{"class":112},[102,116178,30814],{"class":161},[102,116180,114577],{"class":112},[19,116182,116183,116184,116187,116188,116190,116191,28376],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[99,116185,116186],{},"frame_skip=5","，所以外部调用一次 ",[99,116189,113868],{},"，内部实际执行 5 次 ",[99,116192,101206],{},[93,116194,116196],{"className":30369,"code":116195,"language":30371,"meta":23,"style":23},"self.steps += 1\n",[99,116197,116198],{"__ignoreMap":23},[102,116199,116200,116202,116204,116206],{"class":104,"line":105},[102,116201,30814],{"class":161},[102,116203,113697],{"class":112},[102,116205,9467],{"class":108},[102,116207,55690],{"class":161},[19,116209,116210],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[93,116212,116214],{"className":30369,"code":116213,"language":30371,"meta":23,"style":23},"obs = self._get_obs()\nreward = self._get_reward()\n",[99,116215,116216,116226],{"__ignoreMap":23},[102,116217,116218,116220,116222,116224],{"class":104,"line":105},[102,116219,110845],{"class":112},[102,116221,158],{"class":108},[102,116223,38864],{"class":161},[102,116225,114788],{"class":112},[102,116227,116228,116230,116232,116234],{"class":104,"line":24},[102,116229,110996],{"class":112},[102,116231,158],{"class":108},[102,116233,38864],{"class":161},[102,116235,114799],{"class":112},[19,116237,116238],{},"计算新的观测和奖励。",[93,116240,116242],{"className":30369,"code":116241,"language":30371,"meta":23,"style":23},"dist = float(np.linalg.norm(tip - target))\n",[99,116243,116244],{"__ignoreMap":23},[102,116245,116246,116248,116250,116252,116254,116256],{"class":104,"line":105},[102,116247,111587],{"class":112},[102,116249,158],{"class":108},[102,116251,109788],{"class":161},[102,116253,114842],{"class":112},[102,116255,645],{"class":108},[102,116257,114847],{"class":112},[19,116259,116260],{},"计算末端到目标的距离，并转换成 Python float。",[93,116262,116263],{"className":30369,"code":113668,"language":30371,"meta":23,"style":23},[99,116264,116265,116277],{"__ignoreMap":23},[102,116266,116267,116269,116271,116273,116275],{"class":104,"line":105},[102,116268,113675],{"class":112},[102,116270,158],{"class":108},[102,116272,113680],{"class":112},[102,116274,1023],{"class":108},[102,116276,113685],{"class":161},[102,116278,116279,116281,116283,116285,116287,116289,116291],{"class":104,"line":24},[102,116280,113690],{"class":112},[102,116282,158],{"class":108},[102,116284,38864],{"class":161},[102,116286,113697],{"class":112},[102,116288,1699],{"class":108},[102,116290,38864],{"class":161},[102,116292,113704],{"class":112},[19,116294,116295],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[93,116297,116299],{"className":30369,"code":116298,"language":30371,"meta":23,"style":23},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[99,116300,116301,116314],{"__ignoreMap":23},[102,116302,116303,116306,116308,116310,116312],{"class":104,"line":105},[102,116304,116305],{"class":112},"info ",[102,116307,158],{"class":108},[102,116309,4437],{"class":112},[102,116311,114893],{"class":217},[102,116313,114896],{"class":112},[102,116315,116316,116318],{"class":104,"line":24},[102,116317,17036],{"class":108},[102,116319,114903],{"class":112},[19,116321,116322,116325],{},[99,116323,116324],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[93,116327,116329],{"className":30369,"code":116328,"language":30371,"meta":23,"style":23},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[99,116330,116331,116340],{"__ignoreMap":23},[102,116332,116333,116336,116338],{"class":104,"line":105},[102,116334,116335],{"class":112},"env ",[102,116337,158],{"class":108},[102,116339,114933],{"class":112},[102,116341,116342,116344,116346,116348,116350,116352,116354],{"class":104,"line":24},[102,116343,113391],{"class":112},[102,116345,158],{"class":108},[102,116347,114943],{"class":112},[102,116349,114557],{"class":5206},[102,116351,158],{"class":108},[102,116353,304],{"class":161},[102,116355,119],{"class":112},[19,116357,116358,116359,116362],{},"创建环境并重置。",[99,116360,116361],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[93,116364,116366],{"className":30369,"code":116365,"language":30371,"meta":23,"style":23},"action = env.action_space.sample()\n",[99,116367,116368],{"__ignoreMap":23},[102,116369,116370,116372,116374],{"class":104,"line":105},[102,116371,107433],{"class":112},[102,116373,158],{"class":108},[102,116375,115012],{"class":112},[19,116377,116378],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116380,102307],{"id":102306},[19,116382,105475],{},[93,116384,116387],{"className":116385,"code":116386,"language":5177,"meta":23},[5175],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[99,116388,116386],{"__ignoreMap":23},[19,116390,116391],{},"这个环境已经具备强化学习环境的基本结构。",[19,116393,116394],{},"主函数里使用随机动作：",[93,116396,116397],{"className":30369,"code":116365,"language":30371,"meta":23,"style":23},[99,116398,116399],{"__ignoreMap":23},[102,116400,116401,116403,116405],{"class":104,"line":105},[102,116402,107433],{"class":112},[102,116404,158],{"class":108},[102,116406,115012],{"class":112},[19,116408,116409],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116411,102339],{"id":102338},[56,116413,116414,116417,116423,116432,116441,116450,116456],{},[59,116415,116416],{},"运行程序。",[59,116418,116419,116420,28376],{},"确认 ",[99,116421,116422],{},"obs.shape == (10,)",[59,116424,111172,116425,116428,116429,28376],{},[99,116426,116427],{},"env.action_space","，应类似 ",[99,116430,116431],{},"Box(-1.0, 1.0, (2,), float32)",[59,116433,105576,116434,116437,116438,28376],{},[99,116435,116436],{},"self.max_steps = 10","，确认环境会更快 ",[99,116439,116440],{},"truncated=True",[59,116442,102402,116443,102405,116446,116449],{},[99,116444,116445],{},"terminated = dist \u003C 0.05",[99,116447,116448],{},"dist \u003C 0.2","，观察是否更容易结束。",[59,116451,102402,116452,116455],{},[99,116453,116454],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[59,116457,116458,116459,116461,116462,116465],{},"在 ",[99,116460,116324],{}," 里加入 ",[99,116463,116464],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116467,102444],{"id":102443},[73,116469,116471],{"id":116470},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116473,116474,116475,116477],{},"Gymnasium 的 ",[99,116476,107125],{}," 返回 5 个值:",[93,116479,116481],{"className":30369,"code":116480,"language":30371,"meta":23,"style":23},"obs, reward, terminated, truncated, info\n",[99,116482,116483],{"__ignoreMap":23},[102,116484,116485],{"class":104,"line":105},[102,116486,116480],{"class":112},[19,116488,116489],{},"不是旧 Gym 的 4 个值。",[73,116491,116493,116496],{"id":116492},"datactrl-action-维度错误",[99,116494,116495],{},"data.ctrl[:] = action"," 维度错误",[19,116498,102514],{},[93,116500,116502],{"className":30369,"code":116501,"language":30371,"meta":23,"style":23},"print(self.model.nu)\nprint(action.shape)\n",[99,116503,116504,116515],{"__ignoreMap":23},[102,116505,116506,116508,116510,116512],{"class":104,"line":105},[102,116507,30406],{"class":161},[102,116509,113],{"class":112},[102,116511,30814],{"class":161},[102,116513,116514],{"class":112},".model.nu)\n",[102,116516,116517,116519],{"class":104,"line":24},[102,116518,30406],{"class":161},[102,116520,116521],{"class":112},"(action.shape)\n",[19,116523,116524],{},"两者必须匹配。",[73,116526,116528],{"id":116527},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116530,102453],{},[93,116532,116534],{"className":30369,"code":116533,"language":30371,"meta":23,"style":23},"mujoco.mj_forward(self.model, self.data)\n",[99,116535,116536],{"__ignoreMap":23},[102,116537,116538,116541,116543,116545,116547],{"class":104,"line":105},[102,116539,116540],{"class":112},"mujoco.mj_forward(",[102,116542,30814],{"class":161},[102,116544,114572],{"class":112},[102,116546,30814],{"class":161},[102,116548,114577],{"class":112},[73,116550,116552,116554],{"id":116551},"observation_space-维度和-obs-不一致",[99,116553,113591],{}," 维度和 obs 不一致",[19,116556,102566],{},[93,116558,116560],{"className":30369,"code":116559,"language":30371,"meta":23,"style":23},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[99,116561,116562,116572,116579],{"__ignoreMap":23},[102,116563,116564,116566,116568,116570],{"class":104,"line":105},[102,116565,110845],{"class":112},[102,116567,158],{"class":108},[102,116569,38864],{"class":161},[102,116571,114788],{"class":112},[102,116573,116574,116576],{"class":104,"line":24},[102,116575,30406],{"class":161},[102,116577,116578],{"class":112},"(obs.shape)\n",[102,116580,116581,116583,116585,116587],{"class":104,"line":1168},[102,116582,30406],{"class":161},[102,116584,113],{"class":112},[102,116586,30814],{"class":161},[102,116588,116589],{"class":112},".observation_space.shape)\n",[19,116591,116592],{},"两者必须一致。本章观测是：",[93,116594,116597],{"className":116595,"code":116596,"language":5177,"meta":23},[5175],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[99,116598,116596],{"__ignoreMap":23},[73,116600,116602],{"id":116601},"action-超过范围","action 超过范围",[19,116604,116605],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[93,116607,116608],{"className":30369,"code":116107,"language":30371,"meta":23,"style":23},[99,116609,116610],{"__ignoreMap":23},[102,116611,116612,116614,116616,116618,116620,116622,116624],{"class":104,"line":105},[102,116613,107433],{"class":112},[102,116615,158],{"class":108},[102,116617,107438],{"class":112},[102,116619,30814],{"class":161},[102,116621,114709],{"class":112},[102,116623,30814],{"class":161},[102,116625,114714],{"class":112},[19,116627,116628,116629,28376],{},"这能避免无效动作直接写入 ",[99,116630,101067],{},[73,116632,116634],{"id":116633},"忘记返回-info","忘记返回 info",[19,116636,116474,116637,101009,116639,116641],{},[99,116638,70047],{},[99,116640,107125],{}," 都会返回 info：",[93,116643,116644],{"className":30369,"code":113384,"language":30371,"meta":23,"style":23},[99,116645,116646,116654],{"__ignoreMap":23},[102,116647,116648,116650,116652],{"class":104,"line":105},[102,116649,113391],{"class":112},[102,116651,158],{"class":108},[102,116653,113396],{"class":112},[102,116655,116656,116658,116660],{"class":104,"line":24},[102,116657,113401],{"class":112},[102,116659,158],{"class":108},[102,116661,113406],{"class":112},[19,116663,116664,116665,28376],{},"即使暂时没有额外信息，也返回 ",[99,116666,32450],{},[14,116668,116670],{"id":116669},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116672,116673],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[56,116675,116676,116679,116682,116685,116688,116691],{},[59,116677,116678],{},"更稳定的 reward。",[59,116680,116681],{},"合理的 episode 长度。",[59,116683,116684],{},"可重复的随机目标采样。",[59,116686,116687],{},"render 接口。",[59,116689,116690],{},"环境注册代码。",[59,116692,116693],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116695,116696],{},"如果只是自己写训练循环，最小形式是：",[93,116698,116700],{"className":30369,"code":116699,"language":30371,"meta":23,"style":23},"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",[99,116701,116702,116710,116726,116730,116746,116755,116764,116774],{"__ignoreMap":23},[102,116703,116704,116706,116708],{"class":104,"line":105},[102,116705,116335],{"class":112},[102,116707,158],{"class":108},[102,116709,114933],{"class":112},[102,116711,116712,116714,116716,116718,116720,116722,116724],{"class":104,"line":24},[102,116713,113391],{"class":112},[102,116715,158],{"class":108},[102,116717,114943],{"class":112},[102,116719,114557],{"class":5206},[102,116721,158],{"class":108},[102,116723,304],{"class":161},[102,116725,119],{"class":112},[102,116727,116728],{"class":104,"line":1168},[102,116729,2389],{"emptyLinePlaceholder":30},[102,116731,116732,116734,116736,116738,116740,116742,116744],{"class":104,"line":1183},[102,116733,3014],{"class":108},[102,116735,101492],{"class":112},[102,116737,26034],{"class":108},[102,116739,32434],{"class":161},[102,116741,113],{"class":112},[102,116743,6400],{"class":161},[102,116745,30777],{"class":112},[102,116747,116748,116751,116753],{"class":104,"line":1189},[102,116749,116750],{"class":112},"    action ",[102,116752,158],{"class":108},[102,116754,115012],{"class":112},[102,116756,116757,116760,116762],{"class":104,"line":1203},[102,116758,116759],{"class":112},"    obs, reward, terminated, truncated, info ",[102,116761,158],{"class":108},[102,116763,113406],{"class":112},[102,116765,116766,116768,116770,116772],{"class":104,"line":1209},[102,116767,3090],{"class":108},[102,116769,115078],{"class":112},[102,116771,115081],{"class":108},[102,116773,115084],{"class":112},[102,116775,116776,116779,116781],{"class":104,"line":1300},[102,116777,116778],{"class":112},"        obs, info ",[102,116780,158],{"class":108},[102,116782,113396],{"class":112},[14,116784,116786],{"id":116785},"_9本章小结","9.本章小结",[19,116788,116789],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[93,116791,116794],{"className":116792,"code":116793,"language":5177,"meta":23},[5175],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[99,116795,116793],{"__ignoreMap":23},[19,116797,116798],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5116,116800,116801],{},"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":23,"searchDepth":24,"depth":24,"links":116803},[116804,116805,116806,116813,116817,116818,116819,116829,116830],{"id":100637,"depth":24,"text":100638},{"id":100760,"depth":24,"text":100761},{"id":101035,"depth":24,"text":101036,"children":116807},[116808,116810,116812],{"id":113615,"depth":1168,"text":116809},"terminated 和 truncated 的区别",{"id":113718,"depth":1168,"text":116811},"observation_space 和 action_space",{"id":113845,"depth":1168,"text":113846},{"id":101243,"depth":24,"text":101244,"children":116814},[116815,116816],{"id":101563,"depth":1168,"text":101563},{"id":101699,"depth":1168,"text":101699},{"id":102306,"depth":24,"text":102307},{"id":102338,"depth":24,"text":102339},{"id":102443,"depth":24,"text":102444,"children":116820},[116821,116822,116824,116825,116827,116828],{"id":116470,"depth":1168,"text":116471},{"id":116492,"depth":1168,"text":116823},"data.ctrl[:] = action 维度错误",{"id":116527,"depth":1168,"text":116528},{"id":116551,"depth":1168,"text":116826},"observation_space 维度和 obs 不一致",{"id":116601,"depth":1168,"text":116602},{"id":116633,"depth":1168,"text":116634},{"id":116669,"depth":24,"text":116670},{"id":116785,"depth":24,"text":116786},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113368,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116837,"title":116838,"body":116839,"description":117262,"extension":28,"meta":117263,"navigation":30,"path":117264,"seo":117265,"stem":117266,"__hash__":117267},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116840,"toc":117252},[116841,116845,116848,116851,116871,116877,116883,116893,116896,116899,116919,116922,116926,116929,116935,116938,116952,116955,116958,117032,117035,117041,117044,117067,117070,117120,117123,117129,117132,117135,117138,117157,117160,117166,117169,117172,117175,117195,117198,117201,117204,117249],[10,116842,116844],{"id":116843},"mujoco-学习","MuJoCo 学习",[19,116846,116847],{},"初版",[19,116849,116850],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[56,116852,116853,116856,116859,116868],{},[59,116854,116855],{},"MuJoCo 模型文件在描述什么。",[59,116857,116858],{},"Python 代码怎样读取和推进仿真。",[59,116860,116861,325,116863,325,116865,116867],{},[99,116862,104021],{},[99,116864,104351],{},[99,116866,104354],{}," 这些数组为什么重要。",[59,116869,116870],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,116872,116873,116874,116876],{},"默认环境为 Fedora 44、Python >= 3.10、",[99,116875,101018],{}," 官方 Python bindings。",[19,116878,116879,116880,116882],{},"注意：本文禁止使用 ",[99,116881,101003],{},"。所有示例均使用：",[93,116884,116885],{"className":30369,"code":101569,"language":30371,"meta":23,"style":23},[99,116886,116887],{"__ignoreMap":23},[102,116888,116889,116891],{"class":104,"line":105},[102,116890,30383],{"class":108},[102,116892,101292],{"class":112},[14,116894,116895],{"id":116895},"适合谁阅读",[19,116897,116898],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[56,116900,116901,116904,116907,116910],{},[59,116902,116903],{},"没学过 MuJoCo，只会一点 Python。",[59,116905,116906],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[59,116908,116909],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[59,116911,116912,116913,116915,116916,116918],{},"以前接触过 ",[99,116914,101003],{},"，现在想迁移到官方 ",[99,116917,101012],{}," Python bindings。",[19,116920,116921],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,116923,116925],{"id":116924},"mujoco-到底是什么","MuJoCo 到底是什么",[19,116927,116928],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[93,116930,116933],{"className":116931,"code":116932,"language":5177,"meta":23},[5175],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[99,116934,116932],{"__ignoreMap":23},[19,116936,116937],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[56,116939,116940,116943,116946,116949],{},[59,116941,116942],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[59,116944,116945],{},"快速测试控制算法，不必一开始就上真实机器人。",[59,116947,116948],{},"生成强化学习环境。",[59,116950,116951],{},"采集状态、动作、图像、奖励等训练数据。",[14,116953,116954],{"id":116954},"学习前的心智模型",[19,116956,116957],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[250,116959,116960,116972],{},[253,116961,116962],{},[256,116963,116964,116967,116970],{},[259,116965,116966],{"align":23726},"部分",[259,116968,116969],{"align":23726},"负责什么",[259,116971,21177],{"align":23726},[297,116973,116974,116985,116997,117009,117021],{},[256,116975,116976,116979,116982],{},[302,116977,116978],{"align":23726},"MJCF XML",[302,116980,116981],{"align":23726},"定义世界和机器人结构",[302,116983,116984],{"align":23726},"地面、盒子、关节、电机、摄像头",[256,116986,116987,116991,116994],{},[302,116988,116989],{"align":23726},[99,116990,100700],{},[302,116992,116993],{"align":23726},"编译后的静态模型",[302,116995,116996],{"align":23726},"有几个关节、有几个电机、时间步长是多少",[256,116998,116999,117003,117006],{},[302,117000,117001],{"align":23726},[99,117002,100710],{},[302,117004,117005],{"align":23726},"运行中的动态状态",[302,117007,117008],{"align":23726},"当前时间、位置、速度、电机输入",[256,117010,117011,117015,117018],{},[302,117012,117013],{"align":23726},[99,117014,101206],{},[302,117016,117017],{"align":23726},"推进一步物理仿真",[302,117019,117020],{"align":23726},"根据重力、力、碰撞更新状态",[256,117022,117023,117026,117029],{},[302,117024,117025],{"align":23726},"Viewer \u002F Renderer",[302,117027,117028],{"align":23726},"把仿真显示出来",[302,117030,117031],{"align":23726},"打开窗口或保存图片",[19,117033,117034],{},"一句话总结：",[93,117036,117039],{"className":117037,"code":117038,"language":5177,"meta":23},[5175],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[99,117040,117038],{"__ignoreMap":23},[19,117042,117043],{},"参考来源：",[1120,117045,117046,117053,117060],{},[59,117047,117048,117049],{},"MuJoCo Python 官方文档：",[351,117050,117051],{"href":117051,"rel":117052},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23855],[59,117054,117055,117056],{},"MuJoCo XML Reference：",[351,117057,117058],{"href":117058,"rel":117059},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23855],[59,117061,117062,117063],{},"MuJoCo Overview：",[351,117064,117065],{"href":117065,"rel":117066},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23855],[14,117068,117069],{"id":117069},"章节目录",[56,117071,117072,117078,117084,117090,117096,117102,117108,117114],{},[59,117073,117074],{},[351,117075,117077],{"href":117076},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[59,117079,117080],{},[351,117081,117083],{"href":117082},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[59,117085,117086],{},[351,117087,117089],{"href":117088},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[59,117091,117092],{},[351,117093,117095],{"href":117094},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[59,117097,117098],{},[351,117099,117101],{"href":117100},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[59,117103,117104],{},[351,117105,117107],{"href":117106},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[59,117109,117110],{},[351,117111,117113],{"href":117112},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[59,117115,117116],{},[351,117117,117119],{"href":117118},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117121,117122],{"id":117122},"推荐学习路线",[93,117124,117127],{"className":117125,"code":117126,"language":5177,"meta":23},[5175],"环境安装\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",[99,117128,117126],{"__ignoreMap":23},[19,117130,117131],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117133,117134],{"id":117134},"建议的目录结构",[19,117136,117137],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[93,117139,117141],{"className":23812,"code":117140,"language":23814,"meta":23,"style":23},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[99,117142,117143,117151],{"__ignoreMap":23},[102,117144,117145,117147,117149],{"class":104,"line":105},[102,117146,101257],{"class":1952},[102,117148,29207],{"class":161},[102,117150,101262],{"class":217},[102,117152,117153,117155],{"class":104,"line":24},[102,117154,101267],{"class":161},[102,117156,101262],{"class":217},[19,117158,117159],{},"每一章的代码都单独保存：",[93,117161,117164],{"className":117162,"code":117163,"language":5177,"meta":23},[5175],"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",[99,117165,117163],{"__ignoreMap":23},[19,117167,117168],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117170,117171],{"id":117171},"学习方法",[19,117173,117174],{},"每章建议按这个顺序操作：",[56,117176,117177,117180,117183,117186,117189,117192],{},[59,117178,117179],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[59,117181,117182],{},"复制最小可运行代码，保存成指定文件。",[59,117184,117185],{},"运行代码，确认没有报错。",[59,117187,117188],{},"对照“运行结果说明”理解输出。",[59,117190,117191],{},"做“验证步骤”，主动改一两个参数。",[59,117193,117194],{},"遇到报错先看“常见错误与解决方案”。",[19,117196,117197],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117199,117200],{"id":117200},"全局排错顺序",[19,117202,117203],{},"遇到问题时，按下面顺序查：",[56,117205,117206,117212,117218,117223,117226,117229,117236,117246],{},[59,117207,117208,117209],{},"Python 环境是否激活：",[99,117210,117211],{},"which python",[59,117213,117214,117215],{},"MuJoCo 是否能导入：",[99,117216,117217],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[59,117219,117220,117221],{},"是否误装了 ",[99,117222,101003],{},[59,117224,117225],{},"XML 标签是否闭合、属性是否拼写正确",[59,117227,117228],{},"actuator 引用的 joint 名字是否存在",[59,117230,117231,117233,117234],{},[99,117232,101067],{}," 的长度是否等于 ",[99,117235,102149],{},[59,117237,105576,117238,82530,117240,117242,117243],{},[99,117239,104021],{},[99,117241,104351],{}," 后是否调用了 ",[99,117244,117245],{},"mujoco.mj_forward",[59,117247,117248],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5116,117250,117251],{},"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":23,"searchDepth":24,"depth":24,"links":117253},[117254,117255,117256,117257,117258,117259,117260,117261],{"id":116895,"depth":24,"text":116895},{"id":116924,"depth":24,"text":116925},{"id":116954,"depth":24,"text":116954},{"id":117069,"depth":24,"text":117069},{"id":117122,"depth":24,"text":117122},{"id":117134,"depth":24,"text":117134},{"id":117171,"depth":24,"text":117171},{"id":117200,"depth":24,"text":117200},"仿真搭建。",{"category":23368},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116838,"description":117262},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117269,"title":117270,"body":117271,"description":27,"extension":28,"meta":117726,"navigation":30,"path":117727,"seo":117728,"stem":117729,"__hash__":117730},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117272,"toc":117724},[117273,117276,117279,117285,117721],[10,117274,117270],{"id":117275},"_1-最常用的基本操作更新",[19,117277,117278],{},"装linux系统教程：",[19,117280,117281],{},[351,117282,117283],{"href":117283,"rel":117284},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23855],[93,117286,117290],{"className":117287,"code":117288,"language":117289,"meta":23,"style":23},"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",[99,117291,117292,117297,117302,117311,117316,117325,117330,117350,117355,117366,117371,117380,117385,117413,117418,117437,117442,117461,117465,117470,117486,117490,117495,117525,117529,117534,117550,117554,117559,117574,117578,117583,117599,117603,117608,117620,117632,117636,117641,117658,117662,117667,117685,117689,117694,117703,117707,117712],{"__ignoreMap":23},[102,117293,117294],{"class":104,"line":105},[102,117295,117296],{"class":171},"#更新相关的知识\n",[102,117298,117299],{"class":104,"line":24},[102,117300,117301],{"class":171},"# 更新软件包列表（从服务器获取最新软件信息）\n",[102,117303,117304,117306,117309],{"class":104,"line":1168},[102,117305,24567],{"class":1952},[102,117307,117308],{"class":217}," apt",[102,117310,26233],{"class":217},[102,117312,117313],{"class":104,"line":1183},[102,117314,117315],{"class":171},"# 升级所有可更新的软件包（不删除旧包）\n",[102,117317,117318,117320,117322],{"class":104,"line":1189},[102,117319,24567],{"class":1952},[102,117321,117308],{"class":217},[102,117323,117324],{"class":217}," upgrade\n",[102,117326,117327],{"class":104,"line":1203},[102,117328,117329],{"class":171},"#更新和升级软件包\n",[102,117331,117332,117334,117336,117339,117341,117343,117345,117348],{"class":104,"line":1209},[102,117333,24567],{"class":1952},[102,117335,117308],{"class":217},[102,117337,117338],{"class":217}," update",[102,117340,26181],{"class":112},[102,117342,24567],{"class":1952},[102,117344,117308],{"class":217},[102,117346,117347],{"class":217}," upgrade",[102,117349,100972],{"class":161},[102,117351,117352],{"class":104,"line":1300},[102,117353,117354],{"class":171},"#列出可更新的软件包及版本信息\n",[102,117356,117357,117360,117363],{"class":104,"line":1306},[102,117358,117359],{"class":1952},"apt",[102,117361,117362],{"class":217}," list",[102,117364,117365],{"class":161}," --upgradable\n",[102,117367,117368],{"class":104,"line":1318},[102,117369,117370],{"class":171},"#彻底升级（处理依赖关系，可能删除旧包）\n",[102,117372,117373,117375,117377],{"class":104,"line":1601},[102,117374,24567],{"class":1952},[102,117376,117308],{"class":217},[102,117378,117379],{"class":217}," full-upgrade\n",[102,117381,117382],{"class":104,"line":1606},[102,117383,117384],{"class":171},"#设置指定版本\n",[102,117386,117387,117389,117391,117393,117395,117398,117400,117402,117404,117406,117409,117411],{"class":104,"line":1612},[102,117388,24567],{"class":1952},[102,117390,117308],{"class":217},[102,117392,23824],{"class":217},[102,117394,28893],{"class":108},[102,117396,117397],{"class":217},"package_nam",[102,117399,187],{"class":112},[102,117401,1073],{"class":108},[102,117403,158],{"class":217},[102,117405,1023],{"class":108},[102,117407,117408],{"class":217},"version_numbe",[102,117410,783],{"class":112},[102,117412,51298],{"class":108},[102,117414,117415],{"class":104,"line":1617},[102,117416,117417],{"class":171},"#只安装软件包不升级\n",[102,117419,117420,117422,117424,117426,117428,117430,117432,117434],{"class":104,"line":1631},[102,117421,24567],{"class":1952},[102,117423,117308],{"class":217},[102,117425,23824],{"class":217},[102,117427,28893],{"class":108},[102,117429,117397],{"class":217},[102,117431,187],{"class":112},[102,117433,1073],{"class":108},[102,117435,117436],{"class":161}," --no-upgrade\n",[102,117438,117439],{"class":104,"line":1636},[102,117440,117441],{"class":171},"#只升级，不存在就不安装\n",[102,117443,117444,117446,117448,117450,117452,117454,117456,117458],{"class":104,"line":1642},[102,117445,24567],{"class":1952},[102,117447,117308],{"class":217},[102,117449,23824],{"class":217},[102,117451,28893],{"class":108},[102,117453,117397],{"class":217},[102,117455,187],{"class":112},[102,117457,1073],{"class":108},[102,117459,117460],{"class":161}," --only-upgrade\n",[102,117462,117463],{"class":104,"line":1663},[102,117464,2389],{"emptyLinePlaceholder":30},[102,117466,117467],{"class":104,"line":1668},[102,117468,117469],{"class":171},"#安装指定的软件命令\n",[102,117471,117472,117474,117476,117478,117480,117482,117484],{"class":104,"line":1682},[102,117473,24567],{"class":1952},[102,117475,117308],{"class":217},[102,117477,23824],{"class":217},[102,117479,28893],{"class":108},[102,117481,117397],{"class":217},[102,117483,187],{"class":112},[102,117485,51298],{"class":108},[102,117487,117488],{"class":104,"line":1687},[102,117489,2389],{"emptyLinePlaceholder":30},[102,117491,117492],{"class":104,"line":1716},[102,117493,117494],{"class":171},"#安装多个软件包\n",[102,117496,117497,117499,117501,117503,117505,117508,117511,117513,117515,117518,117520,117522],{"class":104,"line":1721},[102,117498,24567],{"class":1952},[102,117500,117308],{"class":217},[102,117502,23824],{"class":217},[102,117504,28893],{"class":108},[102,117506,117507],{"class":217},"package_",[102,117509,117510],{"class":108},"1>",[102,117512,28893],{"class":108},[102,117514,117507],{"class":217},[102,117516,117517],{"class":108},"2>",[102,117519,28893],{"class":108},[102,117521,117507],{"class":217},[102,117523,117524],{"class":108},"3>\n",[102,117526,117527],{"class":104,"line":1738},[102,117528,2389],{"emptyLinePlaceholder":30},[102,117530,117531],{"class":104,"line":1743},[102,117532,117533],{"class":171},"#更新指定的软件命令\n",[102,117535,117536,117538,117540,117542,117544,117546,117548],{"class":104,"line":1748},[102,117537,24567],{"class":1952},[102,117539,117308],{"class":217},[102,117541,117338],{"class":217},[102,117543,28893],{"class":108},[102,117545,117397],{"class":217},[102,117547,187],{"class":112},[102,117549,51298],{"class":108},[102,117551,117552],{"class":104,"line":1753},[102,117553,2389],{"emptyLinePlaceholder":30},[102,117555,117556],{"class":104,"line":1767},[102,117557,117558],{"class":171},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[102,117560,117561,117563,117566,117568,117570,117572],{"class":104,"line":1772},[102,117562,117359],{"class":1952},[102,117564,117565],{"class":217}," show",[102,117567,28893],{"class":108},[102,117569,117397],{"class":217},[102,117571,187],{"class":112},[102,117573,51298],{"class":108},[102,117575,117576],{"class":104,"line":2566},[102,117577,2389],{"emptyLinePlaceholder":30},[102,117579,117580],{"class":104,"line":2580},[102,117581,117582],{"class":171},"#删除软件包命令\n",[102,117584,117585,117587,117589,117591,117593,117595,117597],{"class":104,"line":2588},[102,117586,24567],{"class":1952},[102,117588,117308],{"class":217},[102,117590,26070],{"class":217},[102,117592,28893],{"class":108},[102,117594,117397],{"class":217},[102,117596,187],{"class":112},[102,117598,51298],{"class":108},[102,117600,117601],{"class":104,"line":2593},[102,117602,2389],{"emptyLinePlaceholder":30},[102,117604,117605],{"class":104,"line":2599},[102,117606,117607],{"class":171},"# 清理旧版本和缓存（释放磁盘空间）\n",[102,117609,117610,117612,117614,117617],{"class":104,"line":2605},[102,117611,24567],{"class":1952},[102,117613,117308],{"class":217},[102,117615,117616],{"class":217}," autoremove",[102,117618,117619],{"class":171},"  # 删除不再需要的依赖和库文件\n",[102,117621,117622,117624,117626,117629],{"class":104,"line":2610},[102,117623,24567],{"class":1952},[102,117625,117308],{"class":217},[102,117627,117628],{"class":217}," clean",[102,117630,117631],{"class":171},"       # 清理下载的缓存包\n",[102,117633,117634],{"class":104,"line":7938},[102,117635,2389],{"emptyLinePlaceholder":30},[102,117637,117638],{"class":104,"line":7962},[102,117639,117640],{"class":171},"#移除软件包及配置文件\n",[102,117642,117643,117645,117647,117650,117652,117654,117656],{"class":104,"line":7967},[102,117644,24567],{"class":1952},[102,117646,117308],{"class":217},[102,117648,117649],{"class":217}," purge",[102,117651,28893],{"class":108},[102,117653,117397],{"class":217},[102,117655,187],{"class":112},[102,117657,51298],{"class":108},[102,117659,117660],{"class":104,"line":7973},[102,117661,2389],{"emptyLinePlaceholder":30},[102,117663,117664],{"class":104,"line":8000},[102,117665,117666],{"class":171},"#查找软件包命令\n",[102,117668,117669,117671,117673,117676,117678,117681,117683],{"class":104,"line":8005},[102,117670,24567],{"class":1952},[102,117672,117308],{"class":217},[102,117674,117675],{"class":217}," search",[102,117677,28893],{"class":108},[102,117679,117680],{"class":217},"keywor",[102,117682,427],{"class":112},[102,117684,51298],{"class":108},[102,117686,117687],{"class":104,"line":8011},[102,117688,2389],{"emptyLinePlaceholder":30},[102,117690,117691],{"class":104,"line":8023},[102,117692,117693],{"class":171},"#列出所有已安装的包\n",[102,117695,117696,117698,117700],{"class":104,"line":8035},[102,117697,117359],{"class":1952},[102,117699,117362],{"class":217},[102,117701,117702],{"class":161}," --installed\n",[102,117704,117705],{"class":104,"line":8047},[102,117706,2389],{"emptyLinePlaceholder":30},[102,117708,117709],{"class":104,"line":9706},[102,117710,117711],{"class":171},"#列出所有已安装的包的版本信息\n",[102,117713,117714,117716,117718],{"class":104,"line":9731},[102,117715,117359],{"class":1952},[102,117717,117362],{"class":217},[102,117719,117720],{"class":161}," --all-versions\n",[5116,117722,117723],{},"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":23,"searchDepth":24,"depth":24,"links":117725},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117270,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117732,"title":117733,"body":117734,"description":27,"extension":28,"meta":118475,"navigation":30,"path":118476,"seo":118477,"stem":118478,"__hash__":118479},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117735,"toc":118462},[117736,117739,117743,117746,117752,117756,117760,117766,117771,117776,117781,117786,117791,117794,117797,117800,117803,117807,117810,117815,117818,117823,117826,117831,117838,117841,117844,117847,117850,117853,117864,117868,117872,117877,117882,117886,117891,117895,117900,117904,117908,117913,117916,117961,117966,117970,117974,117979,117985,117990,118000,118005,118015,118020,118025,118052,118056,118059,118064,118067,118092,118096,118101,118104,118109,118114,118134,118139,118142,118157,118161,118214,118217,118222,118226,118229,118244,118247,118250,118255,118259,118263,118266,118270,118274,118277,118282,118287,118291,118298,118306,118309,118316,118321,118326,118329,118334,118341,118346,118353,118357,118359,118364,118368,118371,118374,118379,118382,118387,118390,118395,118400,118405,118409,118414,118418,118459],[10,117737,117733],{"id":117738},"_2-linux装机教程",[14,117740,117742],{"id":117741},"_21-实体机","2.1 实体机",[19,117744,117745],{},"使用清华源：（Ubuntu24.04）",[19,117747,117748],{},[351,117749,117750],{"href":117750,"rel":117751},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23855],[14,117753,117755],{"id":117754},"_22-普通虚拟机","2.2 普通虚拟机",[73,117757,117759],{"id":117758},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,117761,117762],{},[351,117763,117764],{"href":117764,"rel":117765},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23855],[19,117767,117768],{},[1451,117769],{"alt":23,"src":117770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,117772,117773],{},[1451,117774],{"alt":23,"src":117775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,117777,117778],{},[1451,117779],{"alt":23,"src":117780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,117782,117783],{},[1451,117784],{"alt":23,"src":117785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,117787,117788],{},[1451,117789],{"alt":23,"src":117790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,117792,117793],{},"内存4G（4096MB）；",[19,117795,117796],{},"CPU给4个核；",[19,117798,117799],{},"硬盘动态分配60G；",[19,117801,117802],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[73,117804,117806],{"id":117805},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,117808,117809],{},"按照1.1的步骤下载Ubuntu",[19,117811,117812],{},[1451,117813],{"alt":23,"src":117814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,117816,117817],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,117819,117820],{},[1451,117821],{"alt":23,"src":117822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,117824,117825],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,117827,117828],{},[1451,117829],{"alt":23,"src":117830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,117832,117833,117834,117837],{},"选择“正常安装”(找不到都用Alt+F7)， ",[262,117835,117836],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,117839,117840],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,117842,117843],{},"将改动写入磁盘吗 继续",[19,117845,117846],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,117848,117849],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,117851,117852],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,117854,117855,117856,117859,117860,117863],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[262,117857,117858],{},"除了"," 选不发送系统信息与不升级之外， ",[262,117861,117862],{},"其它"," 都跳过或前进）",[73,117865,117867],{"id":117866},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21988,117869,117871],{"id":117870},"_2231-全屏","2.2.3.1 全屏",[19,117873,117874],{},[1451,117875],{"alt":23,"src":117876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,117878,117879],{},[1451,117880],{"alt":23,"src":117881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21988,117883,117885],{"id":117884},"_2232-文件交换","2.2.3.2 文件交换",[19,117887,117888],{},[1451,117889],{"alt":23,"src":117890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21988,117892,117894],{"id":117893},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,117896,117897],{},[1451,117898],{"alt":23,"src":117899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,117901,117903],{"id":117902},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[73,117905,117907],{"id":117906},"_231-简介与优缺点","2.3.1 简介与优缺点",[56,117909,117910],{},[59,117911,117912],{},"什么情况下推荐？",[19,117914,117915],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[56,117917,117918],{"start":24},[59,117919,117920,117921],{},"优缺点：",[56,117922,117923,117953],{},[59,117924,117925,117926],{},"优点：",[56,117927,117928,117931,117938,117941,117944,117947,117950],{},[59,117929,117930],{},"WSL2是最好的Linux发行版;(bushi)",[59,117932,117933,117934,117937],{},"性能损耗极低。且比在Windows上跑深度性能 ",[262,117935,117936],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[59,117939,117940],{},"非常方便调用USB设备，可以USB直通;",[59,117942,117943],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[59,117945,117946],{},"非常方便Win与WSL2互相传文件等协同操作;",[59,117948,117949],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[59,117951,117952],{},"非常方便使用Windows的VScode远程开发;",[59,117954,117955,117956],{},"缺点：",[56,117957,117958],{},[59,117959,117960],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,117962,117963],{},[1451,117964],{"alt":23,"src":117965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[73,117967,117969],{"id":117968},"_232-安装教程","2.3.2 安装教程",[21988,117971,117973],{"id":117972},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[56,117975,117976],{},[59,117977,117978],{},"方法一(图形界面)",[19,117980,117981,117982,24609],{},"用Win+R输入",[99,117983,117984],{},"appwiz.cpl",[19,117986,117987],{},[1451,117988],{"alt":23,"src":117989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,117991,117992,117993,117996,117997,26464],{},"点击OK进入 ",[262,117994,117995],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[262,117998,117999],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118001,118002],{},[1451,118003],{"alt":23,"src":118004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118006,118007,118008,101009,118011,118014],{},"选择 ",[262,118009,118010],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[262,118012,118013],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118016,118017],{},[1451,118018],{"alt":23,"src":118019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[56,118021,118022],{"start":24},[59,118023,118024],{},"方法二(命令行)",[93,118026,118030],{"className":118027,"code":118028,"language":118029,"meta":23,"style":23},"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",[99,118031,118032,118037,118042,118047],{"__ignoreMap":23},[102,118033,118034],{"class":104,"line":105},[102,118035,118036],{},"# 开启 Linux 子系统\n",[102,118038,118039],{"class":104,"line":24},[102,118040,118041],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[102,118043,118044],{"class":104,"line":1168},[102,118045,118046],{},"# 开启虚拟机平台\n",[102,118048,118049],{"class":104,"line":1183},[102,118050,118051],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21988,118053,118055],{"id":118054},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118057,118058],{},"用管理员权限打开powershell",[19,118060,118061],{},[1451,118062],{"alt":23,"src":118063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118065,118066],{},"升级WSL并设置默认版本为WSL2",[93,118068,118070],{"className":118027,"code":118069,"language":118029,"meta":23,"style":23},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[99,118071,118072,118077,118082,118087],{"__ignoreMap":23},[102,118073,118074],{"class":104,"line":105},[102,118075,118076],{},"# 更新 wsl\n",[102,118078,118079],{"class":104,"line":24},[102,118080,118081],{},"wsl --update\n",[102,118083,118084],{"class":104,"line":1168},[102,118085,118086],{},"# 将 wsl 版本设置为 wsl2\n",[102,118088,118089],{"class":104,"line":1183},[102,118090,118091],{},"wsl --set-default-version 2\n",[21988,118093,118095],{"id":118094},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[56,118097,118098],{},[59,118099,118100],{},"方式一(商店下载)",[19,118102,118103],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118105,118106],{},[1451,118107],{"alt":23,"src":118108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[56,118110,118111],{"start":24},[59,118112,118113],{},"方式二(命令行安装)",[93,118115,118117],{"className":118027,"code":118116,"language":118029,"meta":23,"style":23},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[99,118118,118119,118124,118129],{"__ignoreMap":23},[102,118120,118121],{"class":104,"line":105},[102,118122,118123],{},"# 列出可安装的 Linux 版本\n",[102,118125,118126],{"class":104,"line":24},[102,118127,118128],{},"#（需要科学手段）\n",[102,118130,118131],{"class":104,"line":1168},[102,118132,118133],{},"wsl --list --online\n",[19,118135,118136],{},[1451,118137],{"alt":23,"src":118138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118140,118141],{},"选择对应发行版并安装",[93,118143,118145],{"className":118027,"code":118144,"language":118029,"meta":23,"style":23},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[99,118146,118147,118152],{"__ignoreMap":23},[102,118148,118149],{"class":104,"line":105},[102,118150,118151],{},"# Ubuntu安装完毕后需要重启系统\n",[102,118153,118154],{"class":104,"line":24},[102,118155,118156],{},"wsl --install -d Ubuntu-24.04\n",[21988,118158,118160],{"id":118159},"_2324-查看系统状态","2.3.2.4 查看系统状态",[93,118162,118164],{"className":118027,"code":118163,"language":118029,"meta":23,"style":23},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[99,118165,118166,118171,118176,118181,118186,118190,118194,118199,118204,118209],{"__ignoreMap":23},[102,118167,118168],{"class":104,"line":105},[102,118169,118170],{},"# 查看 wsl\n",[102,118172,118173],{"class":104,"line":24},[102,118174,118175],{},"wsl -l\n",[102,118177,118178],{"class":104,"line":1168},[102,118179,118180],{},"# 查看 wsl 运行版本或模式\n",[102,118182,118183],{"class":104,"line":1183},[102,118184,118185],{},"wsl -l -v\n",[102,118187,118188],{"class":104,"line":1189},[102,118189,2389],{"emptyLinePlaceholder":30},[102,118191,118192],{"class":104,"line":1203},[102,118193,2389],{"emptyLinePlaceholder":30},[102,118195,118196],{"class":104,"line":1209},[102,118197,118198],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[102,118200,118201],{"class":104,"line":1300},[102,118202,118203],{},"wsl --set-version \u003Cdistro> 2\n",[102,118205,118206],{"class":104,"line":1306},[102,118207,118208],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[102,118210,118211],{"class":104,"line":1318},[102,118212,118213],{},"wsl --unregister \u003Cdistro>\n",[19,118215,118216],{},"输出Version为2即正常",[19,118218,118219],{},[1451,118220],{"alt":23,"src":118221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21988,118223,118225],{"id":118224},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118227,118228],{},"直接在Powershell里输入wsl命令进入子系统",[93,118230,118232],{"className":118027,"code":118231,"language":118029,"meta":23,"style":23},"# 进入子系统\nwsl\n",[99,118233,118234,118239],{"__ignoreMap":23},[102,118235,118236],{"class":104,"line":105},[102,118237,118238],{},"# 进入子系统\n",[102,118240,118241],{"class":104,"line":24},[102,118242,118243],{},"wsl\n",[19,118245,118246],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118248,118249],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118251,118252],{},[1451,118253],{"alt":23,"src":118254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[73,118256,118258],{"id":118257},"_233-配置各种环境","2.3.3 配置各种环境",[21988,118260,118262],{"id":118261},"_2331-换源","2.3.3.1 换源",[19,118264,118265],{},"(同实体机LINUX，往下找教程)",[21988,118267,118269],{"id":118268},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22900,118271,118273],{"id":118272},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118275,118276],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118278,118279],{},[1451,118280],{"alt":23,"src":118281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118283,118284],{},[1451,118285],{"alt":23,"src":118286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22900,118288,118290],{"id":118289},"_23322-cuda","2.3.3.2.2 CUDA",[19,118292,118293,118294],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[351,118295,118296],{"href":118296,"rel":118297},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23855],[19,118299,118300,118303],{},[1451,118301],{"alt":23,"src":118302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1451,118304],{"alt":23,"src":118305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118307,118308],{},"在下方的网站，选择合适的版本。",[19,118310,118311,118312],{},"WSL2 专属 CUDA 指南：",[351,118313,118314],{"href":118314,"rel":118315},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23855],[19,118317,118318],{},[262,118319,118320],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118322,118323],{},[1451,118324],{"alt":23,"src":118325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118327,118328],{},"挨行敲一遍",[19,118330,118331],{},[1451,118332],{"alt":23,"src":118333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118335,118336,118337,118340],{},"敲完后，输入",[99,118338,118339],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118342,118343],{},[1451,118344],{"alt":23,"src":118345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118347,118348,118349,118352],{},"（请详看下方教程的",[262,118350,118351],{},"安装CUDA的配置环境来看","如何配置环境）",[22900,118354,118356],{"id":118355},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118358,118265],{},[19,118360,118361],{},[1451,118362],{"alt":23,"src":118363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21988,118365,118367],{"id":118366},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118369,118370],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118372,118373],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118375,118376],{},[1451,118377],{"alt":23,"src":118378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118380,118381],{},"连接WSL2",[19,118383,118384],{},[1451,118385],{"alt":23,"src":118386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118388,118389],{},"远程开发成功。",[19,118391,118392],{},[1451,118393],{"alt":23,"src":118394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118396,118397],{},[1451,118398],{"alt":23,"src":118399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118401,118402],{},[1451,118403],{"alt":23,"src":118404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21988,118406,118408],{"id":118407},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118410,118411],{},[1451,118412],{"alt":23,"src":118413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21988,118415,118417],{"id":118416},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[93,118419,118421],{"className":117287,"code":118420,"language":117289,"meta":23,"style":23},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[99,118422,118423,118431,118439,118450,118454],{"__ignoreMap":23},[102,118424,118425,118427,118429],{"class":104,"line":105},[102,118426,24567],{"class":1952},[102,118428,117308],{"class":217},[102,118430,26233],{"class":217},[102,118432,118433,118435,118437],{"class":104,"line":24},[102,118434,24567],{"class":1952},[102,118436,117308],{"class":217},[102,118438,117324],{"class":217},[102,118440,118441,118443,118445,118447],{"class":104,"line":1168},[102,118442,24567],{"class":1952},[102,118444,117308],{"class":217},[102,118446,23824],{"class":217},[102,118448,118449],{"class":217}," mesa-utils\n",[102,118451,118452],{"class":104,"line":1183},[102,118453,2389],{"emptyLinePlaceholder":30},[102,118455,118456],{"class":104,"line":1189},[102,118457,118458],{"class":171},"#然后重启wsl2即可\n",[5116,118460,118461],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":23,"searchDepth":24,"depth":24,"links":118463},[118464,118465,118470],{"id":117741,"depth":24,"text":117742},{"id":117754,"depth":24,"text":117755,"children":118466},[118467,118468,118469],{"id":117758,"depth":1168,"text":117759},{"id":117805,"depth":1168,"text":117806},{"id":117866,"depth":1168,"text":117867},{"id":117902,"depth":24,"text":117903,"children":118471},[118472,118473,118474],{"id":117906,"depth":1168,"text":117907},{"id":117968,"depth":1168,"text":117969},{"id":118257,"depth":1168,"text":118258},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117733,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118481,"title":118482,"body":118483,"description":27,"extension":28,"meta":121419,"navigation":30,"path":121420,"seo":121421,"stem":121422,"__hash__":121423},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118484,"toc":121391},[118485,118488,118492,118498,118502,118508,118512,118700,118703,118708,118712,118716,118719,118722,118728,118733,118736,118739,118744,118777,118782,118786,118863,118866,118871,118875,118878,118917,118920,118929,118947,118952,118959,119076,119081,119084,119111,119116,119120,119129,119179,119186,119190,119193,119207,119214,119248,119253,119257,119280,119283,119288,119292,119295,119298,119301,119343,119347,119350,119353,119394,119398,119402,119405,119410,119415,119418,119441,119444,119452,119457,119460,119465,119470,119473,119478,119482,119487,119510,119515,119577,119585,119590,119595,119598,119603,119606,119611,119616,119634,119639,119645,119650,119664,119668,119671,119674,119677,119720,119723,119728,119829,119832,119837,119841,119845,119882,119886,119890,119894,119940,119944,119989,119993,120000,120008,120063,120066,120143,120146,120169,120173,120176,120181,120186,120194,120197,120202,120207,120212,120215,120220,120229,120232,120237,120240,120311,120316,120319,120324,120327,120332,120335,120340,120343,120348,120353,120356,120431,120434,120447,120452,120455,120469,120472,120501,120506,120535,120538,120543,120547,120552,120561,120564,120569,120572,120577,120580,120583,120588,120591,120596,120601,120604,120609,120612,120737,120742,120772,120775,120780,120785,120802,120805,120848,120851,120878,120883,120896,121039,121043,121048,121062,121065,121116,121119,121149,121152,121168,121173,121187,121190,121257,121262,121271,121276,121279,121291,121296,121303,121327,121330,121335,121338,121357,121362,121369,121381,121388],[10,118486,118482],{"id":118487},"_3-安装必备配置",[14,118489,118491],{"id":118490},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[93,118493,118496],{"className":118494,"code":118495,"language":5177},[5175],"  打开下方网站（注意，该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",[99,118497,118495],{"__ignoreMap":23},[73,118499,118501],{"id":118500},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[93,118503,118506],{"className":118504,"code":118505,"language":5177},[5175],"  输入以下命令\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",[99,118507,118505],{"__ignoreMap":23},[73,118509,118511],{"id":118510},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[93,118513,118517],{"className":118514,"code":118515,"language":118516,"meta":23,"style":23},"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",[99,118518,118519,118527,118538,118550,118564,118568,118578,118583,118587,118591,118596,118600,118612,118616,118621,118625,118636,118640,118656,118660,118671,118675,118680,118684,118692],{"__ignoreMap":23},[102,118520,118521,118523,118525],{"class":104,"line":105},[102,118522,24567],{"class":1952},[102,118524,117308],{"class":217},[102,118526,26233],{"class":217},[102,118528,118529,118531,118533,118535],{"class":104,"line":24},[102,118530,24567],{"class":1952},[102,118532,117308],{"class":217},[102,118534,23824],{"class":217},[102,118536,118537],{"class":217}," vim\n",[102,118539,118540,118542,118545,118547],{"class":104,"line":1168},[102,118541,24567],{"class":1952},[102,118543,118544],{"class":217}," rm",[102,118546,25316],{"class":161},[102,118548,118549],{"class":217}," \u002Fetc\u002Fapt\u002Fsources.list\n",[102,118551,118552,118554,118556,118558,118561],{"class":104,"line":1183},[102,118553,24567],{"class":1952},[102,118555,118544],{"class":217},[102,118557,25316],{"class":161},[102,118559,118560],{"class":217}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[102,118562,118563],{"class":161},"**\n",[102,118565,118566],{"class":104,"line":1189},[102,118567,2389],{"emptyLinePlaceholder":30},[102,118569,118570,118572,118575],{"class":104,"line":1203},[102,118571,24567],{"class":1952},[102,118573,118574],{"class":217}," vim",[102,118576,118577],{"class":217}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[102,118579,118580],{"class":104,"line":1209},[102,118581,118582],{"class":217},"```\n",[102,118584,118585],{"class":104,"line":1300},[102,118586,2389],{"emptyLinePlaceholder":30},[102,118588,118589],{"class":104,"line":1306},[102,118590,2389],{"emptyLinePlaceholder":30},[102,118592,118593],{"class":104,"line":1318},[102,118594,118595],{"class":1952},"选择好Ubuntu版本后，复制下方的内容。\n",[102,118597,118598],{"class":104,"line":1601},[102,118599,2389],{"emptyLinePlaceholder":30},[102,118601,118602,118604,118607,118610],{"class":104,"line":1606},[102,118603,339],{"class":108},[102,118605,118606],{"class":217},"[](",[102,118608,118609],{"class":1952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[102,118611,119],{"class":217},[102,118613,118614],{"class":104,"line":1612},[102,118615,2389],{"emptyLinePlaceholder":30},[102,118617,118618],{"class":104,"line":1617},[102,118619,118620],{"class":1952},"粘贴进去\n",[102,118622,118623],{"class":104,"line":1631},[102,118624,2389],{"emptyLinePlaceholder":30},[102,118626,118627,118629,118631,118634],{"class":104,"line":1636},[102,118628,339],{"class":108},[102,118630,118606],{"class":217},[102,118632,118633],{"class":1952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[102,118635,119],{"class":217},[102,118637,118638],{"class":104,"line":1642},[102,118639,2389],{"emptyLinePlaceholder":30},[102,118641,118642,118645,118648,118651,118653],{"class":104,"line":1663},[102,118643,118644],{"class":1952},"按一下ESC，然后英文冒号，输入",[102,118646,118647],{"class":217}," `",[102,118649,118650],{"class":1952},":wq!",[102,118652,1085],{"class":217},[102,118654,118655],{"class":1952},"然后回车\n",[102,118657,118658],{"class":104,"line":1668},[102,118659,2389],{"emptyLinePlaceholder":30},[102,118661,118662,118664,118666,118669],{"class":104,"line":1682},[102,118663,339],{"class":108},[102,118665,118606],{"class":217},[102,118667,118668],{"class":1952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[102,118670,119],{"class":217},[102,118672,118673],{"class":104,"line":1687},[102,118674,2389],{"emptyLinePlaceholder":30},[102,118676,118677],{"class":104,"line":1716},[102,118678,118679],{"class":1952},"输入以下命令\n",[102,118681,118682],{"class":104,"line":1721},[102,118683,2389],{"emptyLinePlaceholder":30},[102,118685,118686,118689],{"class":104,"line":1738},[102,118687,118688],{"class":217},"```",[102,118690,118691],{"class":1952},"Bash\n",[102,118693,118694,118696,118698],{"class":104,"line":1743},[102,118695,24567],{"class":1952},[102,118697,117308],{"class":217},[102,118699,26233],{"class":217},[19,118701,118702],{},"这里被替换成对应学校则成功",[19,118704,118705],{},[1451,118706],{"alt":23,"src":118707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118709,118711],{"id":118710},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[73,118713,118715],{"id":118714},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118717,118718],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118720,118721],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,118723,118724],{},[351,118725,118726],{"href":118726,"rel":118727},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23855],[19,118729,118730],{},[1451,118731],{"alt":23,"src":118732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,118734,118735],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,118737,118738],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,118740,118741],{},[1451,118742],{"alt":23,"src":118743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[93,118745,118747],{"className":117287,"code":118746,"language":117289,"meta":23,"style":23},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[99,118748,118749,118754,118761,118766],{"__ignoreMap":23},[102,118750,118751],{"class":104,"line":105},[102,118752,118753],{"class":171},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[102,118755,118756,118758],{"class":104,"line":24},[102,118757,101267],{"class":161},[102,118759,118760],{"class":217}," ~\u002FDownloads\n",[102,118762,118763],{"class":104,"line":1168},[102,118764,118765],{"class":171},"#下方chrome安装包名不一定是这个，根据名字来看\n",[102,118767,118768,118770,118772,118774],{"class":104,"line":1183},[102,118769,24567],{"class":1952},[102,118771,117308],{"class":217},[102,118773,23824],{"class":217},[102,118775,118776],{"class":217}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,118778,118779],{},[1451,118780],{"alt":23,"src":118781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[73,118783,118785],{"id":118784},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[93,118787,118789],{"className":117287,"code":118788,"language":117289,"meta":23,"style":23},"# 老版\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",[99,118790,118791,118796,118804,118815,118820,118824,118829,118839,118847,118858],{"__ignoreMap":23},[102,118792,118793],{"class":104,"line":105},[102,118794,118795],{"class":171},"# 老版\n",[102,118797,118798,118800,118802],{"class":104,"line":24},[102,118799,24567],{"class":1952},[102,118801,117308],{"class":217},[102,118803,26233],{"class":217},[102,118805,118806,118808,118810,118812],{"class":104,"line":1168},[102,118807,24567],{"class":1952},[102,118809,117308],{"class":217},[102,118811,23824],{"class":217},[102,118813,118814],{"class":217}," neofetch\n",[102,118816,118817],{"class":104,"line":1183},[102,118818,118819],{"class":1952},"neofetch\n",[102,118821,118822],{"class":104,"line":1189},[102,118823,2389],{"emptyLinePlaceholder":30},[102,118825,118826],{"class":104,"line":1203},[102,118827,118828],{"class":171},"# 新版\n",[102,118830,118831,118833,118836],{"class":104,"line":1209},[102,118832,24567],{"class":1952},[102,118834,118835],{"class":217}," add-apt-repository",[102,118837,118838],{"class":217}," ppa:zhangsongcui3371\u002Ffastfetch\n",[102,118840,118841,118843,118845],{"class":104,"line":1300},[102,118842,24567],{"class":1952},[102,118844,117308],{"class":217},[102,118846,26233],{"class":217},[102,118848,118849,118851,118853,118855],{"class":104,"line":1306},[102,118850,24567],{"class":1952},[102,118852,117308],{"class":217},[102,118854,23824],{"class":217},[102,118856,118857],{"class":217}," fastfetch\n",[102,118859,118860],{"class":104,"line":1318},[102,118861,118862],{"class":1952},"fastfetch\n",[19,118864,118865],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,118867,118868],{},[1451,118869],{"alt":23,"src":118870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[73,118872,118874],{"id":118873},"_323-移除snap应用","3.2.3 移除snap应用",[19,118876,118877],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[93,118879,118881],{"className":117287,"code":118880,"language":117289,"meta":23,"style":23},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[99,118882,118883,118895,118906],{"__ignoreMap":23},[102,118884,118885,118887,118889,118892],{"class":104,"line":105},[102,118886,24567],{"class":1952},[102,118888,26504],{"class":217},[102,118890,118891],{"class":217}," disable",[102,118893,118894],{"class":217}," snapd.service\n",[102,118896,118897,118899,118901,118903],{"class":104,"line":24},[102,118898,24567],{"class":1952},[102,118900,26504],{"class":217},[102,118902,118891],{"class":217},[102,118904,118905],{"class":217}," snapd.socket\n",[102,118907,118908,118910,118912,118914],{"class":104,"line":1168},[102,118909,24567],{"class":1952},[102,118911,26504],{"class":217},[102,118913,118891],{"class":217},[102,118915,118916],{"class":217}," snapd.seeded.service\n",[19,118918,118919],{},"然后查看snap应用列表",[19,118921,118922,118923,118928],{},"根据你安装的选择不同（最小安装或普通安装），有",[351,118924,118927],{"href":118925,"rel":118926},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23855],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[93,118930,118932],{"className":117287,"code":118931,"language":117289,"meta":23,"style":23},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[99,118933,118934,118939],{"__ignoreMap":23},[102,118935,118936],{"class":104,"line":105},[102,118937,118938],{"class":171},"# 查询当前系统上snap安装了哪些app\n",[102,118940,118941,118944],{"class":104,"line":24},[102,118942,118943],{"class":1952},"snap",[102,118945,118946],{"class":217}," list\n",[19,118948,118949],{},[1451,118950],{"alt":23,"src":118951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,118953,118954,118955,118958],{},"卸载掉图中所有应用，按照 ",[262,118956,118957],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[93,118960,118962],{"className":117287,"code":118961,"language":117289,"meta":23,"style":23},"#移除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",[99,118963,118964,118969,118981,118986,118997,119002,119013,119018,119029,119034,119038,119043,119054,119065],{"__ignoreMap":23},[102,118965,118966],{"class":104,"line":105},[102,118967,118968],{"class":171},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[102,118970,118971,118973,118976,118978],{"class":104,"line":24},[102,118972,24567],{"class":1952},[102,118974,118975],{"class":217}," snap",[102,118977,26070],{"class":217},[102,118979,118980],{"class":217}," snap-store\n",[102,118982,118983],{"class":104,"line":1168},[102,118984,118985],{"class":171},"#移除firefox浏览器\n",[102,118987,118988,118990,118992,118994],{"class":104,"line":1183},[102,118989,24567],{"class":1952},[102,118991,118975],{"class":217},[102,118993,26070],{"class":217},[102,118995,118996],{"class":217}," firefox\n",[102,118998,118999],{"class":104,"line":1189},[102,119000,119001],{"class":171},"#移除gnome-42-2204\n",[102,119003,119004,119006,119008,119010],{"class":104,"line":1203},[102,119005,24567],{"class":1952},[102,119007,118975],{"class":217},[102,119009,26070],{"class":217},[102,119011,119012],{"class":217}," gnome-42-2204\n",[102,119014,119015],{"class":104,"line":1209},[102,119016,119017],{"class":171},"#移除gtk-common-themes\n",[102,119019,119020,119022,119024,119026],{"class":104,"line":1300},[102,119021,24567],{"class":1952},[102,119023,118975],{"class":217},[102,119025,26070],{"class":217},[102,119027,119028],{"class":217}," gtk-common-themes\n",[102,119030,119031],{"class":104,"line":1306},[102,119032,119033],{"class":171},"#移除其它...\n",[102,119035,119036],{"class":104,"line":1318},[102,119037,2663],{"class":112},[102,119039,119040],{"class":104,"line":1601},[102,119041,119042],{"class":171},"#移除core22,bare以及snapd\n",[102,119044,119045,119047,119049,119051],{"class":104,"line":1606},[102,119046,24567],{"class":1952},[102,119048,118975],{"class":217},[102,119050,26070],{"class":217},[102,119052,119053],{"class":217}," core22\n",[102,119055,119056,119058,119060,119062],{"class":104,"line":1612},[102,119057,24567],{"class":1952},[102,119059,118975],{"class":217},[102,119061,26070],{"class":217},[102,119063,119064],{"class":217}," bare\n",[102,119066,119067,119069,119071,119073],{"class":104,"line":1617},[102,119068,24567],{"class":1952},[102,119070,118975],{"class":217},[102,119072,26070],{"class":217},[102,119074,119075],{"class":217}," snapd\n",[19,119077,119078],{},[1451,119079],{"alt":23,"src":119080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119082,119083],{},"输入以下命令查看是否还有snap包",[93,119085,119087],{"className":117287,"code":119086,"language":117289,"meta":23,"style":23},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[99,119088,119089,119095,119099,119103,119107],{"__ignoreMap":23},[102,119090,119091,119093],{"class":104,"line":105},[102,119092,118943],{"class":1952},[102,119094,118946],{"class":217},[102,119096,119097],{"class":104,"line":24},[102,119098,118795],{"class":171},[102,119100,119101],{"class":104,"line":1168},[102,119102,118819],{"class":1952},[102,119104,119105],{"class":104,"line":1183},[102,119106,118828],{"class":171},[102,119108,119109],{"class":104,"line":1189},[102,119110,118862],{"class":1952},[19,119112,119113],{},[1451,119114],{"alt":23,"src":119115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[73,119117,119119],{"id":119118},"_324-移除snap","3.2.4 移除snap",[19,119121,119122,119123,119128],{},"在删除掉",[351,119124,119127],{"href":119125,"rel":119126},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23855],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[93,119130,119132],{"className":117287,"code":119131,"language":117289,"meta":23,"style":23}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[99,119133,119134,119139,119152,119157,119168],{"__ignoreMap":23},[102,119135,119136],{"class":104,"line":105},[102,119137,119138],{"class":171}," #使用apt移除掉snap\n",[102,119140,119141,119143,119145,119147,119150],{"class":104,"line":24},[102,119142,24567],{"class":1952},[102,119144,117308],{"class":217},[102,119146,117616],{"class":217},[102,119148,119149],{"class":161}," --purge",[102,119151,119075],{"class":217},[102,119153,119154],{"class":104,"line":1168},[102,119155,119156],{"class":171},"#移除snapd的一些目录\n",[102,119158,119159,119161,119163,119165],{"class":104,"line":1183},[102,119160,24567],{"class":1952},[102,119162,118544],{"class":217},[102,119164,25316],{"class":161},[102,119166,119167],{"class":217}," \u002Fvar\u002Fcache\u002Fsnapd\n",[102,119169,119170,119172,119174,119176],{"class":104,"line":1189},[102,119171,24567],{"class":1952},[102,119173,118544],{"class":217},[102,119175,25316],{"class":161},[102,119177,119178],{"class":217}," ~\u002Fsnap\n",[19,119180,119181,119182,119185],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[99,119183,119184],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[73,119187,119189],{"id":119188},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119191,119192],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[93,119194,119196],{"className":117287,"code":119195,"language":117289,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[99,119197,119198],{"__ignoreMap":23},[102,119199,119200,119202,119204],{"class":104,"line":105},[102,119201,24567],{"class":1952},[102,119203,118574],{"class":217},[102,119205,119206],{"class":217}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119208,119209,119210,119213],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[99,119211,119212],{},":wq"," 回车",[93,119215,119217],{"className":117287,"code":119216,"language":117289,"meta":23,"style":23},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[99,119218,119219,119226,119240],{"__ignoreMap":23},[102,119220,119221,119224],{"class":104,"line":105},[102,119222,119223],{"class":1952},"Package:",[102,119225,119075],{"class":217},[102,119227,119228,119231,119234,119237],{"class":104,"line":24},[102,119229,119230],{"class":1952},"Pin:",[102,119232,119233],{"class":217}," release",[102,119235,119236],{"class":217}," a=",[102,119238,119239],{"class":161},"*\n",[102,119241,119242,119245],{"class":104,"line":1168},[102,119243,119244],{"class":1952},"Pin-Priority:",[102,119246,119247],{"class":161}," -10\n",[19,119249,119250],{},[1451,119251],{"alt":23,"src":119252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[73,119254,119256],{"id":119255},"_326-测试是否成功","3.2.6 测试是否成功",[93,119258,119260],{"className":117287,"code":119259,"language":117289,"meta":23,"style":23},"sudo apt update\nsudo apt install firefox\n",[99,119261,119262,119270],{"__ignoreMap":23},[102,119263,119264,119266,119268],{"class":104,"line":105},[102,119265,24567],{"class":1952},[102,119267,117308],{"class":217},[102,119269,26233],{"class":217},[102,119271,119272,119274,119276,119278],{"class":104,"line":24},[102,119273,24567],{"class":1952},[102,119275,117308],{"class":217},[102,119277,23824],{"class":217},[102,119279,118996],{"class":217},[19,119281,119282],{},"这里提示snapd无法被安装，就证明成功了",[19,119284,119285],{},[1451,119286],{"alt":23,"src":119287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[73,119289,119291],{"id":119290},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119293,119294],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119296,119297],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119299,119300],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[93,119302,119304],{"className":117287,"code":119303,"language":117289,"meta":23,"style":23},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[99,119305,119306,119311,119320,119325,119333],{"__ignoreMap":23},[102,119307,119308],{"class":104,"line":105},[102,119309,119310],{"class":171},"# 添加Mozilla提供的源\n",[102,119312,119313,119315,119317],{"class":104,"line":24},[102,119314,24567],{"class":1952},[102,119316,118835],{"class":217},[102,119318,119319],{"class":217}," ppa:mozillateam\u002Fppa\n",[102,119321,119322],{"class":104,"line":1168},[102,119323,119324],{"class":171},"# 安装Firefox\n",[102,119326,119327,119329,119331],{"class":104,"line":1183},[102,119328,24567],{"class":1952},[102,119330,117308],{"class":217},[102,119332,26233],{"class":217},[102,119334,119335,119337,119339,119341],{"class":104,"line":1189},[102,119336,24567],{"class":1952},[102,119338,117308],{"class":217},[102,119340,23824],{"class":217},[102,119342,118996],{"class":217},[73,119344,119346],{"id":119345},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119348,119349],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119351,119352],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[93,119354,119356],{"className":117287,"code":119355,"language":117289,"meta":23,"style":23},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[99,119357,119358,119363,119373,119381,119385],{"__ignoreMap":23},[102,119359,119360],{"class":104,"line":105},[102,119361,119362],{"class":171},"#删掉禁止安装snap的配置文件\n",[102,119364,119365,119367,119369,119371],{"class":104,"line":24},[102,119366,24567],{"class":1952},[102,119368,118544],{"class":217},[102,119370,25316],{"class":161},[102,119372,119206],{"class":217},[102,119374,119375,119377,119379],{"class":104,"line":1168},[102,119376,24567],{"class":1952},[102,119378,117308],{"class":217},[102,119380,26233],{"class":217},[102,119382,119383],{"class":104,"line":1183},[102,119384,2389],{"emptyLinePlaceholder":30},[102,119386,119387,119389,119391],{"class":104,"line":1189},[102,119388,24567],{"class":1952},[102,119390,117308],{"class":217},[102,119392,119393],{"class":217}," dist-update\n",[14,119395,119397],{"id":119396},"_33-中文输入法","3.3 中文输入法",[73,119399,119401],{"id":119400},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119403,119404],{},"官网下载搜狗输入法",[19,119406,119407],{},[1451,119408],{"alt":23,"src":119409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119411,119412],{},[1451,119413],{"alt":23,"src":119414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119416,119417],{},"打开终端输入如下",[93,119419,119421],{"className":117287,"code":119420,"language":117289,"meta":23,"style":23},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[99,119422,119423,119430],{"__ignoreMap":23},[102,119424,119425,119427],{"class":104,"line":105},[102,119426,101267],{"class":161},[102,119428,119429],{"class":217}," ~\u002FDownloads\u002F\n",[102,119431,119432,119434,119436,119438],{"class":104,"line":24},[102,119433,24567],{"class":1952},[102,119435,117308],{"class":217},[102,119437,23824],{"class":217},[102,119439,119440],{"class":217}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119442,119443],{},"打开Fcitx",[19,119445,119446,119449],{},[1451,119447],{"alt":23,"src":119448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1451,119450],{"alt":23,"src":119451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119453,119454],{},[1451,119455],{"alt":23,"src":119456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119458,119459],{},"添加搜狗输入法",[19,119461,119462],{},[1451,119463],{"alt":23,"src":119464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119466,119467],{},[1451,119468],{"alt":23,"src":119469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119471,119472],{},"将搜狗输入法设置为唯一输入法",[19,119474,119475],{},[1451,119476],{"alt":23,"src":119477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[73,119479,119481],{"id":119480},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[56,119483,119484],{},[59,119485,119486],{},"卸载旧输入法",[93,119488,119490],{"className":118514,"code":119489,"language":118516,"meta":23,"style":23},"sudo apt purge fcitx* ibus*\n",[99,119491,119492],{"__ignoreMap":23},[102,119493,119494,119496,119498,119500,119503,119505,119508],{"class":104,"line":105},[102,119495,24567],{"class":1952},[102,119497,117308],{"class":217},[102,119499,117649],{"class":217},[102,119501,119502],{"class":217}," fcitx",[102,119504,568],{"class":161},[102,119506,119507],{"class":217}," ibus",[102,119509,119239],{"class":161},[56,119511,119512],{"start":24},[59,119513,119514],{},"安装Fcitx5",[93,119516,119518],{"className":117287,"code":119517,"language":117289,"meta":23,"style":23},"# 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",[99,119519,119520,119525,119539,119543,119548,119557,119565],{"__ignoreMap":23},[102,119521,119522],{"class":104,"line":105},[102,119523,119524],{"class":171},"# Ubuntu22.04及以上、Debian12及以上\n",[102,119526,119527,119529,119531,119533,119536],{"class":104,"line":24},[102,119528,24567],{"class":1952},[102,119530,117308],{"class":217},[102,119532,23824],{"class":217},[102,119534,119535],{"class":217}," fcitx5",[102,119537,119538],{"class":217}," fcitx5-chinese-addons\n",[102,119540,119541],{"class":104,"line":1168},[102,119542,2389],{"emptyLinePlaceholder":30},[102,119544,119545],{"class":104,"line":1183},[102,119546,119547],{"class":171},"# Ubuntu20.04\n",[102,119549,119550,119552,119554],{"class":104,"line":1189},[102,119551,24567],{"class":1952},[102,119553,118835],{"class":217},[102,119555,119556],{"class":217}," ppa:zhsj\u002Ffcitx5\n",[102,119558,119559,119561,119563],{"class":104,"line":1203},[102,119560,24567],{"class":1952},[102,119562,117308],{"class":217},[102,119564,26233],{"class":217},[102,119566,119567,119569,119571,119573,119575],{"class":104,"line":1209},[102,119568,24567],{"class":1952},[102,119570,117308],{"class":217},[102,119572,23824],{"class":217},[102,119574,119535],{"class":217},[102,119576,119538],{"class":217},[56,119578,119579,119582],{"start":1168},[59,119580,119581],{},"Reboot System",[59,119583,119584],{},"启动Fcitx5",[19,119586,119587],{},[1451,119588],{"alt":23,"src":119589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[56,119591,119592],{"start":1189},[59,119593,119594],{},"修改一些设置",[19,119596,119597],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119599,119600],{},[1451,119601],{"alt":23,"src":119602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119604,119605],{},"添加快捷键以便于更好切换中英文",[19,119607,119608],{},[1451,119609],{"alt":23,"src":119610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[56,119612,119613],{"start":1203},[59,119614,119615],{},"重启",[93,119617,119619],{"className":118514,"code":119618,"language":118516,"meta":23,"style":23},"sudo shutdown -r now\n",[99,119620,119621],{"__ignoreMap":23},[102,119622,119623,119625,119628,119631],{"class":104,"line":105},[102,119624,24567],{"class":1952},[102,119626,119627],{"class":217}," shutdown",[102,119629,119630],{"class":161}," -r",[102,119632,119633],{"class":217}," now\n",[56,119635,119636],{"start":1209},[59,119637,119638],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119640,119641],{},[351,119642,119643],{"href":119643,"rel":119644},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23855],[56,119646,119647],{"start":1300},[59,119648,119649],{},"再重启",[93,119651,119652],{"className":118514,"code":119618,"language":118516,"meta":23,"style":23},[99,119653,119654],{"__ignoreMap":23},[102,119655,119656,119658,119660,119662],{"class":104,"line":105},[102,119657,24567],{"class":1952},[102,119659,119627],{"class":217},[102,119661,119630],{"class":161},[102,119663,119633],{"class":217},[14,119665,119667],{"id":119666},"_34-pip3源替换","3.4 pip3源替换",[19,119669,119670],{},"非Debian系发行版需要做。",[19,119672,119673],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119675,119676],{},"使用dnf的系统也可能不用做。",[93,119678,119680],{"className":117287,"code":119679,"language":117289,"meta":23,"style":23},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[99,119681,119682,119687,119694,119699,119704],{"__ignoreMap":23},[102,119683,119684],{"class":104,"line":105},[102,119685,119686],{"class":171},"# 检查是否已安装 pip\n",[102,119688,119689,119692],{"class":104,"line":24},[102,119690,119691],{"class":1952},"pip3",[102,119693,26284],{"class":161},[102,119695,119696],{"class":104,"line":1168},[102,119697,119698],{"class":171},"# 如果未安装，先安装 pip3（见下方）\n",[102,119700,119701],{"class":104,"line":1183},[102,119702,119703],{"class":171},"# 配置 pip 使用清华源\n",[102,119705,119706,119708,119711,119714,119717],{"class":104,"line":1189},[102,119707,119691],{"class":1952},[102,119709,119710],{"class":217}," config",[102,119712,119713],{"class":217}," set",[102,119715,119716],{"class":217}," global.index-url",[102,119718,119719],{"class":217}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,119721,119722],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,119724,119725],{},[1451,119726],{"alt":23,"src":119727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[93,119729,119731],{"className":117287,"code":119730,"language":117289,"meta":23,"style":23},"#安装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",[99,119732,119733,119738,119746,119757,119761,119766,119785,119789,119794,119806,119810,119815],{"__ignoreMap":23},[102,119734,119735],{"class":104,"line":105},[102,119736,119737],{"class":171},"#安装pip3\n",[102,119739,119740,119742,119744],{"class":104,"line":24},[102,119741,24567],{"class":1952},[102,119743,117308],{"class":217},[102,119745,26233],{"class":217},[102,119747,119748,119750,119752,119754],{"class":104,"line":1168},[102,119749,24567],{"class":1952},[102,119751,26067],{"class":217},[102,119753,23824],{"class":217},[102,119755,119756],{"class":217}," python3-pip\n",[102,119758,119759],{"class":104,"line":1183},[102,119760,2389],{"emptyLinePlaceholder":30},[102,119762,119763],{"class":104,"line":1189},[102,119764,119765],{"class":171},"#更新pip3\n",[102,119767,119768,119770,119772,119774,119776,119778,119781,119783],{"class":104,"line":1203},[102,119769,100870],{"class":1952},[102,119771,100873],{"class":161},[102,119773,100896],{"class":217},[102,119775,23824],{"class":217},[102,119777,26421],{"class":161},[102,119779,119780],{"class":217}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[102,119782,100901],{"class":161},[102,119784,100904],{"class":217},[102,119786,119787],{"class":104,"line":1209},[102,119788,2389],{"emptyLinePlaceholder":30},[102,119790,119791],{"class":104,"line":1300},[102,119792,119793],{"class":171},"#设置pip源为清华源\n",[102,119795,119796,119798,119800,119802,119804],{"class":104,"line":1306},[102,119797,119691],{"class":1952},[102,119799,119710],{"class":217},[102,119801,119713],{"class":217},[102,119803,119716],{"class":217},[102,119805,119719],{"class":217},[102,119807,119808],{"class":104,"line":1318},[102,119809,2389],{"emptyLinePlaceholder":30},[102,119811,119812],{"class":104,"line":1601},[102,119813,119814],{"class":171},"#测试\n",[102,119816,119817,119819,119821,119823,119825,119827],{"class":104,"line":1606},[102,119818,100870],{"class":1952},[102,119820,100873],{"class":161},[102,119822,100896],{"class":217},[102,119824,23824],{"class":217},[102,119826,100901],{"class":161},[102,119828,100904],{"class":217},[19,119830,119831],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,119833,119834],{},[1451,119835],{"alt":23,"src":119836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,119838,119840],{"id":119839},"_35-显卡驱动安装","3.5 显卡驱动安装",[73,119842,119844],{"id":119843},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[93,119846,119848],{"className":118514,"code":119847,"language":118516,"meta":23,"style":23},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[99,119849,119850,119855,119870,119875],{"__ignoreMap":23},[102,119851,119852],{"class":104,"line":105},[102,119853,119854],{"class":171},"# 如果是使用apt安装的驱动\n",[102,119856,119857,119859,119861,119863,119865,119868],{"class":104,"line":24},[102,119858,24567],{"class":1952},[102,119860,26067],{"class":217},[102,119862,26070],{"class":217},[102,119864,119149],{"class":161},[102,119866,119867],{"class":217}," nvidia",[102,119869,119239],{"class":161},[102,119871,119872],{"class":104,"line":1168},[102,119873,119874],{"class":171},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[102,119876,119877,119879],{"class":104,"line":1183},[102,119878,24567],{"class":1952},[102,119880,119881],{"class":217}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[73,119883,119885],{"id":119884},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21988,119887,119889],{"id":119888},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22900,119891,119893],{"id":119892},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[93,119895,119897],{"className":118514,"code":119896,"language":118516,"meta":23,"style":23},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[99,119898,119899,119904,119915,119920,119930,119935],{"__ignoreMap":23},[102,119900,119901],{"class":104,"line":105},[102,119902,119903],{"class":171},"# 安装英伟达驱动\n",[102,119905,119906,119908,119910,119912],{"class":104,"line":24},[102,119907,24567],{"class":1952},[102,119909,117308],{"class":217},[102,119911,23824],{"class":217},[102,119913,119914],{"class":217}," nvidia-driver-版本号\n",[102,119916,119917],{"class":104,"line":1168},[102,119918,119919],{"class":171},"# 重启 \n",[102,119921,119922,119924,119926,119928],{"class":104,"line":1183},[102,119923,24567],{"class":1952},[102,119925,119627],{"class":217},[102,119927,119630],{"class":161},[102,119929,119633],{"class":217},[102,119931,119932],{"class":104,"line":1189},[102,119933,119934],{"class":171},"# 检查驱动是否安装成功\n",[102,119936,119937],{"class":104,"line":1203},[102,119938,119939],{"class":1952},"nvidia-smi\n",[22900,119941,119943],{"id":119942},"_35212-debian","3.5.2.1.2 Debian",[93,119945,119947],{"className":118514,"code":119946,"language":118516,"meta":23,"style":23},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[99,119948,119949,119953,119967,119971,119981,119985],{"__ignoreMap":23},[102,119950,119951],{"class":104,"line":105},[102,119952,119903],{"class":171},[102,119954,119955,119957,119959,119961,119964],{"class":104,"line":24},[102,119956,24567],{"class":1952},[102,119958,117308],{"class":217},[102,119960,23824],{"class":217},[102,119962,119963],{"class":217}," nvidia-driver",[102,119965,119966],{"class":217}," nvidia-settings\n",[102,119968,119969],{"class":104,"line":1168},[102,119970,119919],{"class":171},[102,119972,119973,119975,119977,119979],{"class":104,"line":1183},[102,119974,24567],{"class":1952},[102,119976,119627],{"class":217},[102,119978,119630],{"class":161},[102,119980,119633],{"class":217},[102,119982,119983],{"class":104,"line":1189},[102,119984,119934],{"class":171},[102,119986,119987],{"class":104,"line":1203},[102,119988,119939],{"class":1952},[21988,119990,119992],{"id":119991},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,119994,119995,119996,119999],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[262,119997,119998],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120001,120002,120003],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23543,120004,120005],{},[262,120006,120007],{},"（也可以不禁用桌面环境，直接进行下一步。）",[93,120009,120011],{"className":118514,"code":120010,"language":118516,"meta":23,"style":23},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[99,120012,120013,120018,120028,120033,120046,120051],{"__ignoreMap":23},[102,120014,120015],{"class":104,"line":105},[102,120016,120017],{"class":171},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[102,120019,120020,120022,120025],{"class":104,"line":24},[102,120021,24567],{"class":1952},[102,120023,120024],{"class":217}," telinit",[102,120026,120027],{"class":161}," 3\n",[102,120029,120030],{"class":104,"line":1168},[102,120031,120032],{"class":171},"# ubuntu 使用下方命令\n",[102,120034,120035,120037,120040,120043],{"class":104,"line":1183},[102,120036,24567],{"class":1952},[102,120038,120039],{"class":217}," service",[102,120041,120042],{"class":217}," lightdm",[102,120044,120045],{"class":217}," stop\n",[102,120047,120048],{"class":104,"line":1189},[102,120049,120050],{"class":171},"# Fedora 使用下方命令\n",[102,120052,120053,120055,120057,120060],{"class":104,"line":1203},[102,120054,24567],{"class":1952},[102,120056,26504],{"class":217},[102,120058,120059],{"class":217}," isolate",[102,120061,120062],{"class":217}," multi-user.target\n",[19,120064,120065],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[93,120067,120069],{"className":118514,"code":120068,"language":118516,"meta":23,"style":23},"# 编译环境+准备工作\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",[99,120070,120071,120076,120087,120092,120099,120104,120116,120121,120128,120133],{"__ignoreMap":23},[102,120072,120073],{"class":104,"line":105},[102,120074,120075],{"class":171},"# 编译环境+准备工作\n",[102,120077,120078,120080,120082,120084],{"class":104,"line":24},[102,120079,24567],{"class":1952},[102,120081,117308],{"class":217},[102,120083,23824],{"class":217},[102,120085,120086],{"class":217}," build-essential\n",[102,120088,120089],{"class":104,"line":1168},[102,120090,120091],{"class":171},"# 进入到.run目录中\n",[102,120093,120094,120096],{"class":104,"line":1183},[102,120095,101267],{"class":161},[102,120097,120098],{"class":217}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[102,120100,120101],{"class":104,"line":1189},[102,120102,120103],{"class":171},"# 给驱动文件增加可执行权限：\n",[102,120105,120106,120108,120110,120113],{"class":104,"line":1203},[102,120107,24567],{"class":1952},[102,120109,24570],{"class":217},[102,120111,120112],{"class":217}," a+x",[102,120114,120115],{"class":217}," NVIDIA-Linux-x86_64-550.107.02.run\n",[102,120117,120118],{"class":104,"line":1209},[102,120119,120120],{"class":171},"# 然后执行安装：\n",[102,120122,120123,120125],{"class":104,"line":1300},[102,120124,24567],{"class":1952},[102,120126,120127],{"class":217}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[102,120129,120130],{"class":104,"line":1306},[102,120131,120132],{"class":171},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[102,120134,120135,120137,120140],{"class":104,"line":1318},[102,120136,24567],{"class":1952},[102,120138,120139],{"class":217}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[102,120141,120142],{"class":161},"  --no-opengl-files\n",[19,120144,120145],{},"安装完毕重启即可",[93,120147,120149],{"className":118514,"code":120148,"language":118516,"meta":23,"style":23},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[99,120150,120151,120155,120161,120165],{"__ignoreMap":23},[102,120152,120153],{"class":104,"line":105},[102,120154,119919],{"class":171},[102,120156,120157,120159],{"class":104,"line":24},[102,120158,24567],{"class":1952},[102,120160,26638],{"class":217},[102,120162,120163],{"class":104,"line":1168},[102,120164,119934],{"class":171},[102,120166,120167],{"class":104,"line":1183},[102,120168,119939],{"class":1952},[73,120170,120172],{"id":120171},"_353-安装cuda","3.5.3 安装CUDA",[19,120174,120175],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120177,120178],{},[1451,120179],{"alt":23,"src":120180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[56,120182,120183],{},[59,120184,120185],{},"先查看显卡驱动所支持的最高CUDA版本",[93,120187,120188],{"className":118514,"code":119939,"language":118516,"meta":23,"style":23},[99,120189,120190],{"__ignoreMap":23},[102,120191,120192],{"class":104,"line":105},[102,120193,119939],{"class":1952},[19,120195,120196],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120198,120199],{},[1451,120200],{"alt":23,"src":120201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[56,120203,120204],{"start":24},[59,120205,120206],{},"下载CUDA并安装CUDA",[19,120208,118293,120209],{},[351,120210,118296],{"href":118296,"rel":120211},[23855],[19,120213,120214],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120216,120217],{},[1451,120218],{"alt":23,"src":120219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120221,120222,120223,120228],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[351,120224,120227],{"href":120225,"rel":120226},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23855],"Vinci机器人队单片机教程","）",[19,120230,120231],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120233,120234],{},[1451,120235],{"alt":23,"src":120236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120238,120239],{},"将最下方框框里的命令敲入终端",[93,120241,120243],{"className":118514,"code":120242,"language":118516,"meta":23,"style":23},"# 在当前文件夹下创建一个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",[99,120244,120245,120250,120259,120264,120271,120276,120284,120289,120300,120305],{"__ignoreMap":23},[102,120246,120247],{"class":104,"line":105},[102,120248,120249],{"class":171},"# 在当前文件夹下创建一个ttt的子文件夹\n",[102,120251,120252,120254,120256],{"class":104,"line":24},[102,120253,101257],{"class":1952},[102,120255,29207],{"class":161},[102,120257,120258],{"class":217}," .\u002Fttt\n",[102,120260,120261],{"class":104,"line":1168},[102,120262,120263],{"class":171},"# 进入ttt文件夹\n",[102,120265,120266,120268],{"class":104,"line":1183},[102,120267,101267],{"class":161},[102,120269,120270],{"class":217}," ttt\n",[102,120272,120273],{"class":104,"line":1189},[102,120274,120275],{"class":171},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[102,120277,120278,120281],{"class":104,"line":1203},[102,120279,120280],{"class":1952},"wget",[102,120282,120283],{"class":217}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[102,120285,120286],{"class":104,"line":1209},[102,120287,120288],{"class":171},"# 给予权限\n",[102,120290,120291,120293,120295,120297],{"class":104,"line":1300},[102,120292,24567],{"class":1952},[102,120294,24570],{"class":217},[102,120296,120112],{"class":217},[102,120298,120299],{"class":217}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[102,120301,120302],{"class":104,"line":1306},[102,120303,120304],{"class":171},"# 运行脚本\n",[102,120306,120307,120309],{"class":104,"line":1318},[102,120308,24567],{"class":1952},[102,120310,120299],{"class":217},[19,120312,120313],{},[1451,120314],{"alt":23,"src":120315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120317,120318],{},"正在安装中：",[19,120320,120321],{},[1451,120322],{"alt":23,"src":120323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120325,120326],{},"输入accept接受即可",[19,120328,120329],{},[1451,120330],{"alt":23,"src":120331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120333,120334],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120336,120337],{},[1451,120338],{"alt":23,"src":120339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120341,120342],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120344,120345],{},[1451,120346],{"alt":23,"src":120347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[56,120349,120350],{"start":1168},[59,120351,120352],{},"配置环境",[19,120354,120355],{},"根据上方确认一下路径，比如我上面红色框起来的为",[93,120357,120359],{"className":118514,"code":120358,"language":118516,"meta":23,"style":23},"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",[99,120360,120361,120377,120392],{"__ignoreMap":23},[102,120362,120363,120366,120369,120372,120375],{"class":104,"line":105},[102,120364,120365],{"class":1952},"Please",[102,120367,120368],{"class":217}," make",[102,120370,120371],{"class":217}," sure",[102,120373,120374],{"class":217}," that",[102,120376,2663],{"class":112},[102,120378,120379,120381,120384,120387,120390],{"class":104,"line":24},[102,120380,52262],{"class":1952},[102,120382,120383],{"class":217},"   PATH",[102,120385,120386],{"class":217}," includes",[102,120388,120389],{"class":217}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[102,120391,2663],{"class":112},[102,120393,120394,120396,120399,120401,120404,120407,120409,120412,120415,120418,120421,120423,120426,120428],{"class":104,"line":1168},[102,120395,52262],{"class":1952},[102,120397,120398],{"class":217},"   LD_LIBRARY_PATH",[102,120400,120386],{"class":217},[102,120402,120403],{"class":217}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[102,120405,120406],{"class":217}," or,",[102,120408,5199],{"class":217},[102,120410,120411],{"class":217}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[102,120413,120414],{"class":217}," to",[102,120416,120417],{"class":217}," \u002Fetc\u002Fld.so.conf",[102,120419,120420],{"class":217}," and",[102,120422,27221],{"class":217},[102,120424,120425],{"class":217}," ldconfig",[102,120427,64595],{"class":217},[102,120429,120430],{"class":217}," root\n",[19,120432,120433],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[93,120435,120437],{"className":118514,"code":120436,"language":118516,"meta":23,"style":23},"which nvcc\n",[99,120438,120439],{"__ignoreMap":23},[102,120440,120441,120444],{"class":104,"line":105},[102,120442,120443],{"class":161},"which",[102,120445,120446],{"class":217}," nvcc\n",[19,120448,120449],{},[1451,120450],{"alt":23,"src":120451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120453,120454],{},"所以我进行以下操作：",[93,120456,120458],{"className":118514,"code":120457,"language":118516,"meta":23,"style":23},"sudo vim ~\u002F.bashrc\n",[99,120459,120460],{"__ignoreMap":23},[102,120461,120462,120464,120466],{"class":104,"line":105},[102,120463,24567],{"class":1952},[102,120465,118574],{"class":217},[102,120467,120468],{"class":217}," ~\u002F.bashrc\n",[19,120470,120471],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[93,120473,120475],{"className":118514,"code":120474,"language":118516,"meta":23,"style":23},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[99,120476,120477,120489],{"__ignoreMap":23},[102,120478,120479,120481,120484,120486],{"class":104,"line":105},[102,120480,25033],{"class":108},[102,120482,120483],{"class":112}," PATH",[102,120485,158],{"class":108},[102,120487,120488],{"class":112},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[102,120490,120491,120493,120496,120498],{"class":104,"line":24},[102,120492,25033],{"class":108},[102,120494,120495],{"class":112}," LD_LIBRARY_PATH",[102,120497,158],{"class":108},[102,120499,120500],{"class":112},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120502,120503],{},[1451,120504],{"alt":23,"src":120505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[93,120507,120509],{"className":118514,"code":120508,"language":118516,"meta":23,"style":23},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[99,120510,120511,120516,120522,120527],{"__ignoreMap":23},[102,120512,120513],{"class":104,"line":105},[102,120514,120515],{"class":171},"# 刷新当前终端的环境变量\n",[102,120517,120518,120520],{"class":104,"line":24},[102,120519,100884],{"class":161},[102,120521,120468],{"class":217},[102,120523,120524],{"class":104,"line":1168},[102,120525,120526],{"class":171},"# 验证CUDA是否安装成功\n",[102,120528,120529,120532],{"class":104,"line":1183},[102,120530,120531],{"class":1952},"nvcc",[102,120533,120534],{"class":161}," -V\n",[19,120536,120537],{},"出现下图这种则安装成功。",[19,120539,120540],{},[1451,120541],{"alt":23,"src":120542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[73,120544,120546],{"id":120545},"_354-安装cudnn","3.5.4 安装cuDNN",[56,120548,120549],{},[59,120550,120551],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120553,120554,120555,120560],{},"前往 NVIDIA cuDNN 下载页面：",[351,120556,120559],{"href":120557,"rel":120558},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23855],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120562,120563],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120565,120566],{},[1451,120567],{"alt":23,"src":120568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120570,120571],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120573,120574],{},[1451,120575],{"alt":23,"src":120576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120578,120579],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120581,120582],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120584,120585],{},[262,120586,120587],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120589,120590],{},"下载好的：",[19,120592,120593],{},[1451,120594],{"alt":23,"src":120595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[56,120597,120598],{"start":24},[59,120599,120600],{},"安装cuDNN",[19,120602,120603],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120605,120606],{},[1451,120607],{"alt":23,"src":120608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120610,120611],{},"解压文件，并复制到对应位置完成安装",[93,120613,120615],{"className":118514,"code":120614,"language":118516,"meta":23,"style":23},"# 解压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",[99,120616,120617,120622,120633,120638,120645,120650,120666,120680,120685,120696,120705,120709,120725],{"__ignoreMap":23},[102,120618,120619],{"class":104,"line":105},[102,120620,120621],{"class":171},"# 解压cuDNN文件\n",[102,120623,120624,120627,120630],{"class":104,"line":24},[102,120625,120626],{"class":1952},"tar",[102,120628,120629],{"class":161}," -xvf",[102,120631,120632],{"class":217}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[102,120634,120635],{"class":104,"line":1168},[102,120636,120637],{"class":171},"# cd进文件夹\n",[102,120639,120640,120642],{"class":104,"line":1183},[102,120641,101267],{"class":161},[102,120643,120644],{"class":217}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[102,120646,120647],{"class":104,"line":1189},[102,120648,120649],{"class":171},"# 复制cuDNN文件到CUDA目录\n",[102,120651,120652,120654,120656,120659,120661,120664],{"class":104,"line":1203},[102,120653,24567],{"class":1952},[102,120655,27852],{"class":217},[102,120657,120658],{"class":217}," include\u002Fcudnn",[102,120660,568],{"class":161},[102,120662,120663],{"class":217},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[102,120665,2663],{"class":112},[102,120667,120668,120670,120672,120675,120677],{"class":104,"line":1209},[102,120669,24567],{"class":1952},[102,120671,27852],{"class":217},[102,120673,120674],{"class":217}," lib\u002Flibcudnn",[102,120676,568],{"class":161},[102,120678,120679],{"class":217},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[102,120681,120682],{"class":104,"line":1300},[102,120683,120684],{"class":171},"# 对比一下有没有缺文件\n",[102,120686,120687,120689,120692,120694],{"class":104,"line":1306},[102,120688,26752],{"class":1952},[102,120690,120691],{"class":217}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[102,120693,568],{"class":161},[102,120695,2663],{"class":112},[102,120697,120698,120700,120703],{"class":104,"line":1318},[102,120699,26752],{"class":1952},[102,120701,120702],{"class":217}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[102,120704,119239],{"class":161},[102,120706,120707],{"class":104,"line":1601},[102,120708,120288],{"class":171},[102,120710,120711,120713,120715,120718,120720,120722],{"class":104,"line":1606},[102,120712,24567],{"class":1952},[102,120714,24570],{"class":217},[102,120716,120717],{"class":217}," a+r",[102,120719,120691],{"class":217},[102,120721,568],{"class":161},[102,120723,120724],{"class":112},"   \n",[102,120726,120727,120729,120731,120733,120735],{"class":104,"line":1612},[102,120728,24567],{"class":1952},[102,120730,24570],{"class":217},[102,120732,120717],{"class":217},[102,120734,120702],{"class":217},[102,120736,119239],{"class":161},[56,120738,120739],{"start":1168},[59,120740,120741],{},"检查是否安装成功",[93,120743,120745],{"className":118514,"code":120744,"language":118516,"meta":23,"style":23},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[99,120746,120747,120752],{"__ignoreMap":23},[102,120748,120749],{"class":104,"line":105},[102,120750,120751],{"class":171},"# 检查cuDNN版本命令\n",[102,120753,120754,120757,120760,120762,120764,120767,120770],{"class":104,"line":24},[102,120755,120756],{"class":1952},"cat",[102,120758,120759],{"class":217}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[102,120761,25100],{"class":108},[102,120763,30227],{"class":1952},[102,120765,120766],{"class":217}," CUDNN_MAJOR",[102,120768,120769],{"class":161}," -A",[102,120771,47714],{"class":161},[19,120773,120774],{},"出现下图这样的就是安装成功了",[19,120776,120777],{},[1451,120778],{"alt":23,"src":120779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[56,120781,120782],{"start":1183},[59,120783,120784],{},"软链接(一般不需要)",[93,120786,120788],{"className":118514,"code":120787,"language":118516,"meta":23,"style":23},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[99,120789,120790,120795],{"__ignoreMap":23},[102,120791,120792],{"class":104,"line":105},[102,120793,120794],{"class":171},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[102,120796,120797,120799],{"class":104,"line":24},[102,120798,24567],{"class":1952},[102,120800,120801],{"class":217}," ldconfig\n",[19,120803,120804],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[93,120806,120811],{"className":120807,"code":120808,"language":120809,"meta":120810,"style":23},"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",[99,120812,120813,120818,120823,120828,120833,120838,120843],{"__ignoreMap":23},[102,120814,120815],{"class":104,"line":105},[102,120816,120817],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[102,120819,120820],{"class":104,"line":24},[102,120821,120822],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[102,120824,120825],{"class":104,"line":1168},[102,120826,120827],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[102,120829,120830],{"class":104,"line":1183},[102,120831,120832],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[102,120834,120835],{"class":104,"line":1189},[102,120836,120837],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[102,120839,120840],{"class":104,"line":1203},[102,120841,120842],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[102,120844,120845],{"class":104,"line":1209},[102,120846,120847],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,120849,120850],{},"运行下方的命令",[93,120852,120854],{"className":118514,"code":120853,"language":118516,"meta":23,"style":23},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[99,120855,120856,120861,120868,120873],{"__ignoreMap":23},[102,120857,120858],{"class":104,"line":105},[102,120859,120860],{"class":171},"# cd进入CUDA路径\n",[102,120862,120863,120865],{"class":104,"line":24},[102,120864,101267],{"class":161},[102,120866,120867],{"class":217}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[102,120869,120870],{"class":104,"line":1168},[102,120871,120872],{"class":171}," # 查看本路径下的需要软链接的文件名\n",[102,120874,120875],{"class":104,"line":1183},[102,120876,120877],{"class":1952}," ls\n",[19,120879,120880],{},[1451,120881],{"alt":23,"src":120882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,120884,120885,120886,18400,120889,18400,120892,120895],{},"如上图，我需要将",[99,120887,120888],{},"libcudnn_xxx_xxxxx.so.8.9.7",[99,120890,120891],{},"libcudnn_xxx_xxxxx.so.8",[99,120893,120894],{},"libcudnn_xxx_xxxxx.so","软链接",[93,120897,120899],{"className":118514,"code":120898,"language":118516,"meta":23,"style":23},"# 创建符号链接。对于每个 .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",[99,120900,120901,120906,120922,120936,120950,120964,120978,120992,121006,121011,121017,121022],{"__ignoreMap":23},[102,120902,120903],{"class":104,"line":105},[102,120904,120905],{"class":171},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[102,120907,120908,120910,120913,120916,120919],{"class":104,"line":24},[102,120909,24567],{"class":1952},[102,120911,120912],{"class":217}," ln",[102,120914,120915],{"class":161}," -sf",[102,120917,120918],{"class":217}," libcudnn_cnn_train.so.8.9.7",[102,120920,120921],{"class":217}," libcudnn_cnn_train.so.8\n",[102,120923,120924,120926,120928,120930,120933],{"class":104,"line":1168},[102,120925,24567],{"class":1952},[102,120927,120912],{"class":217},[102,120929,120915],{"class":161},[102,120931,120932],{"class":217}," libcudnn_adv_infer.so.8.9.7",[102,120934,120935],{"class":217}," libcudnn_adv_infer.so.8\n",[102,120937,120938,120940,120942,120944,120947],{"class":104,"line":1183},[102,120939,24567],{"class":1952},[102,120941,120912],{"class":217},[102,120943,120915],{"class":161},[102,120945,120946],{"class":217}," libcudnn_adv_train.so.8.9.7",[102,120948,120949],{"class":217}," libcudnn_adv_train.so.8\n",[102,120951,120952,120954,120956,120958,120961],{"class":104,"line":1189},[102,120953,24567],{"class":1952},[102,120955,120912],{"class":217},[102,120957,120915],{"class":161},[102,120959,120960],{"class":217}," libcudnn_cnn_infer.so.8.9.7",[102,120962,120963],{"class":217}," libcudnn_cnn_infer.so.8\n",[102,120965,120966,120968,120970,120972,120975],{"class":104,"line":1203},[102,120967,24567],{"class":1952},[102,120969,120912],{"class":217},[102,120971,120915],{"class":161},[102,120973,120974],{"class":217}," libcudnn.so.8.9.7",[102,120976,120977],{"class":217}," libcudnn.so.8\n",[102,120979,120980,120982,120984,120986,120989],{"class":104,"line":1209},[102,120981,24567],{"class":1952},[102,120983,120912],{"class":217},[102,120985,120915],{"class":161},[102,120987,120988],{"class":217}," libcudnn_ops_infer.so.8.9.7",[102,120990,120991],{"class":217}," libcudnn_ops_infer.so.8\n",[102,120993,120994,120996,120998,121000,121003],{"class":104,"line":1300},[102,120995,24567],{"class":1952},[102,120997,120912],{"class":217},[102,120999,120915],{"class":161},[102,121001,121002],{"class":217}," libcudnn_ops_train.so.8.9.7",[102,121004,121005],{"class":217}," libcudnn_ops_train.so.8\n",[102,121007,121008],{"class":104,"line":1306},[102,121009,121010],{"class":171},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[102,121012,121013,121015],{"class":104,"line":1318},[102,121014,24567],{"class":1952},[102,121016,120801],{"class":217},[102,121018,121019],{"class":104,"line":1601},[102,121020,121021],{"class":171},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[102,121023,121024,121026,121029,121032,121034,121037],{"class":104,"line":1606},[102,121025,26752],{"class":1952},[102,121027,121028],{"class":161}," -l",[102,121030,121031],{"class":217}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[102,121033,568],{"class":161},[102,121035,121036],{"class":217},".so",[102,121038,119239],{"class":161},[73,121040,121042],{"id":121041},"_355-常见问题","3.5.5 常见问题",[56,121044,121045],{},[59,121046,121047],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[93,121049,121051],{"className":118514,"code":121050,"language":118516,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[99,121052,121053],{"__ignoreMap":23},[102,121054,121055,121057,121059],{"class":104,"line":105},[102,121056,24567],{"class":1952},[102,121058,118574],{"class":217},[102,121060,121061],{"class":217}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121063,121064],{},"blacklist-nouveau.conf文件内容如下：",[93,121066,121068],{"className":118514,"code":121067,"language":118516,"meta":23,"style":23},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[99,121069,121070,121078,121085,121097,121107],{"__ignoreMap":23},[102,121071,121072,121075],{"class":104,"line":105},[102,121073,121074],{"class":1952},"blacklist",[102,121076,121077],{"class":217}," nouveau\n",[102,121079,121080,121082],{"class":104,"line":24},[102,121081,121074],{"class":1952},[102,121083,121084],{"class":217}," lbm-nouveau\n",[102,121086,121087,121089,121092,121095],{"class":104,"line":1168},[102,121088,115921],{"class":1952},[102,121090,121091],{"class":217}," nouveau",[102,121093,121094],{"class":217}," modeset=",[102,121096,3074],{"class":161},[102,121098,121099,121102,121104],{"class":104,"line":1183},[102,121100,121101],{"class":161},"alias",[102,121103,121091],{"class":217},[102,121105,121106],{"class":217}," off\n",[102,121108,121109,121111,121114],{"class":104,"line":1189},[102,121110,121101],{"class":161},[102,121112,121113],{"class":217}," lbm-nouveau",[102,121115,121106],{"class":217},[19,121117,121118],{},"接着运行下方命令",[93,121120,121122],{"className":118514,"code":121121,"language":118516,"meta":23,"style":23},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[99,121123,121124,121134,121139],{"__ignoreMap":23},[102,121125,121126,121128,121131],{"class":104,"line":105},[102,121127,24567],{"class":1952},[102,121129,121130],{"class":217}," update-initramfs",[102,121132,121133],{"class":161}," -u\n",[102,121135,121136],{"class":104,"line":24},[102,121137,121138],{"class":1952},"或者\n",[102,121140,121141,121143,121146],{"class":104,"line":1168},[102,121142,24567],{"class":1952},[102,121144,121145],{"class":217}," dracut",[102,121147,121148],{"class":161}," --force\n",[19,121150,121151],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[93,121153,121155],{"className":118514,"code":121154,"language":118516,"meta":23,"style":23},"lsmod | grep nouveau\n",[99,121156,121157],{"__ignoreMap":23},[102,121158,121159,121162,121164,121166],{"class":104,"line":105},[102,121160,121161],{"class":1952},"lsmod",[102,121163,25100],{"class":108},[102,121165,30227],{"class":1952},[102,121167,121077],{"class":217},[56,121169,121170],{"start":24},[59,121171,121172],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[93,121174,121176],{"className":118514,"code":121175,"language":118516,"meta":23,"style":23},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[99,121177,121178],{"__ignoreMap":23},[102,121179,121180,121182,121184],{"class":104,"line":105},[102,121181,24567],{"class":1952},[102,121183,118574],{"class":217},[102,121185,121186],{"class":217}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121188,121189],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[93,121191,121193],{"className":118514,"code":121192,"language":118516,"meta":23,"style":23},"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",[99,121194,121195,121203,121211,121219,121226,121234,121244,121252],{"__ignoreMap":23},[102,121196,121197,121200],{"class":104,"line":105},[102,121198,121199],{"class":1952},"Section",[102,121201,121202],{"class":217}," \"OutputClass\"\n",[102,121204,121205,121208],{"class":104,"line":24},[102,121206,121207],{"class":1952},"   Identifier",[102,121209,121210],{"class":217}," \"nvidia\"\n",[102,121212,121213,121216],{"class":104,"line":1168},[102,121214,121215],{"class":1952},"   MatchDriver",[102,121217,121218],{"class":217}," \"nvidia-drm\"\n",[102,121220,121221,121224],{"class":104,"line":1183},[102,121222,121223],{"class":1952},"   Driver",[102,121225,121210],{"class":217},[102,121227,121228,121231],{"class":104,"line":1189},[102,121229,121230],{"class":1952},"   Option",[102,121232,121233],{"class":217}," \"AllowEmptyInitialConfiguration\"\n",[102,121235,121236,121238,121241],{"class":104,"line":1203},[102,121237,121230],{"class":1952},[102,121239,121240],{"class":217}," \"PrimaryGPU\"",[102,121242,121243],{"class":217}," \"yes\"\n",[102,121245,121246,121249],{"class":104,"line":1209},[102,121247,121248],{"class":1952},"   ModulePath",[102,121250,121251],{"class":217}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[102,121253,121254],{"class":104,"line":1300},[102,121255,121256],{"class":1952},"EndSection\n",[56,121258,121259],{"start":1168},[59,121260,121261],{},"安装N卡驱动提示错误",[93,121263,121265],{"className":120807,"code":121264,"language":120809,"meta":120810,"style":23},"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",[99,121266,121267],{"__ignoreMap":23},[102,121268,121269],{"class":104,"line":105},[102,121270,121264],{},[56,121272,121273],{},[59,121274,121275],{},"检查当前运行的内核版本：",[19,121277,121278],{},"运行以下命令以查看你当前正在使用的内核版本：",[93,121280,121282],{"className":117287,"code":121281,"language":117289,"meta":23,"style":23},"uname -r\n",[99,121283,121284],{"__ignoreMap":23},[102,121285,121286,121288],{"class":104,"line":105},[102,121287,70195],{"class":1952},[102,121289,121290],{"class":161}," -r\n",[56,121292,121293],{"start":24},[59,121294,121295],{},"安装内核开发文件：",[19,121297,121298,121299,121302],{},"确保你已经安装了与当前内核版本相匹配的 ",[99,121300,121301],{},"kernel-devel"," 包。运行以下命令来安装：",[93,121304,121306],{"className":117287,"code":121305,"language":117289,"meta":23,"style":23},"sudo dnf install kernel-devel-$(uname -r)\n",[99,121307,121308],{"__ignoreMap":23},[102,121309,121310,121312,121314,121316,121319,121321,121323,121325],{"class":104,"line":105},[102,121311,24567],{"class":1952},[102,121313,26306],{"class":217},[102,121315,23824],{"class":217},[102,121317,121318],{"class":217}," kernel-devel-",[102,121320,25090],{"class":112},[102,121322,70195],{"class":1952},[102,121324,119630],{"class":161},[102,121326,119],{"class":112},[19,121328,121329],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[56,121331,121332],{"start":1168},[59,121333,121334],{},"安装内核源代码（如果需要）：",[19,121336,121337],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[93,121339,121341],{"className":117287,"code":121340,"language":117289,"meta":23,"style":23},"sudo dnf install kernel-headers kernel-source\n",[99,121342,121343],{"__ignoreMap":23},[102,121344,121345,121347,121349,121351,121354],{"class":104,"line":105},[102,121346,24567],{"class":1952},[102,121348,26306],{"class":217},[102,121350,23824],{"class":217},[102,121352,121353],{"class":217}," kernel-headers",[102,121355,121356],{"class":217}," kernel-source\n",[56,121358,121359],{"start":1183},[59,121360,121361],{},"检查安装：",[19,121363,121364,121365,121368],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[99,121366,121367],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[93,121370,121372],{"className":117287,"code":121371,"language":117289,"meta":23,"style":23},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[99,121373,121374],{"__ignoreMap":23},[102,121375,121376,121378],{"class":104,"line":105},[102,121377,26752],{"class":1952},[102,121379,121380],{"class":217}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121382,121383,121384,121387],{},"如果仍然遇到问题，可以通过 ",[99,121385,121386],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5116,121389,121390],{},"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":23,"searchDepth":24,"depth":24,"links":121392},[121393,121397,121407,121411,121412],{"id":118490,"depth":24,"text":118491,"children":121394},[121395,121396],{"id":118500,"depth":1168,"text":118501},{"id":118510,"depth":1168,"text":118511},{"id":118710,"depth":24,"text":118711,"children":121398},[121399,121400,121401,121402,121403,121404,121405,121406],{"id":118714,"depth":1168,"text":118715},{"id":118784,"depth":1168,"text":118785},{"id":118873,"depth":1168,"text":118874},{"id":119118,"depth":1168,"text":119119},{"id":119188,"depth":1168,"text":119189},{"id":119255,"depth":1168,"text":119256},{"id":119290,"depth":1168,"text":119291},{"id":119345,"depth":1168,"text":119346},{"id":119396,"depth":24,"text":119397,"children":121408},[121409,121410],{"id":119400,"depth":1168,"text":119401},{"id":119480,"depth":1168,"text":119481},{"id":119666,"depth":24,"text":119667},{"id":119839,"depth":24,"text":119840,"children":121413},[121414,121415,121416,121417,121418],{"id":119843,"depth":1168,"text":119844},{"id":119884,"depth":1168,"text":119885},{"id":120171,"depth":1168,"text":120172},{"id":120545,"depth":1168,"text":120546},{"id":121041,"depth":1168,"text":121042},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118482,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121425,"title":121426,"body":121427,"description":27,"extension":28,"meta":121767,"navigation":30,"path":121768,"seo":121769,"stem":121770,"__hash__":121771},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121428,"toc":121765},[121429,121432,121437,121440,121686,121691,121694,121730,121733,121762],[10,121430,121426],{"id":121431},"_4-命令教程长期积累",[56,121433,121434],{},[59,121435,121436],{},"大多数命令",[19,121438,121439],{},"常用 Linux 命令速查：",[93,121441,121443],{"className":117287,"code":121442,"language":117289,"meta":23,"style":23},"# 文件与目录\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",[99,121444,121445,121450,121457,121464,121472,121479,121486,121494,121502,121509,121516,121524,121528,121533,121540,121548,121555,121559,121564,121571,121579,121587,121595,121603,121607,121612,121620,121627,121634,121642,121650,121654,121659,121668,121677],{"__ignoreMap":23},[102,121446,121447],{"class":104,"line":105},[102,121448,121449],{"class":171},"# 文件与目录\n",[102,121451,121452,121454],{"class":104,"line":24},[102,121453,26752],{"class":1952},[102,121455,121456],{"class":171},"        # 列出目录内容\n",[102,121458,121459,121461],{"class":104,"line":1168},[102,121460,101267],{"class":161},[102,121462,121463],{"class":171},"        # 切换目录\n",[102,121465,121466,121469],{"class":104,"line":1183},[102,121467,121468],{"class":161},"pwd",[102,121470,121471],{"class":171},"       # 显示当前路径\n",[102,121473,121474,121476],{"class":104,"line":1189},[102,121475,101257],{"class":1952},[102,121477,121478],{"class":171},"     # 创建目录\n",[102,121480,121481,121483],{"class":104,"line":1203},[102,121482,25313],{"class":1952},[102,121484,121485],{"class":171},"        # 删除文件或目录\n",[102,121487,121488,121491],{"class":104,"line":1209},[102,121489,121490],{"class":1952},"cp",[102,121492,121493],{"class":171},"        # 复制文件或目录\n",[102,121495,121496,121499],{"class":104,"line":1300},[102,121497,121498],{"class":1952},"mv",[102,121500,121501],{"class":171},"        # 移动\u002F重命名文件或目录\n",[102,121503,121504,121506],{"class":104,"line":1306},[102,121505,101274],{"class":1952},[102,121507,121508],{"class":171},"     # 创建空文件\n",[102,121510,121511,121513],{"class":104,"line":1318},[102,121512,120756],{"class":1952},[102,121514,121515],{"class":171},"       # 查看文件内容\n",[102,121517,121518,121521],{"class":104,"line":1601},[102,121519,121520],{"class":1952},"head\u002Ftail",[102,121522,121523],{"class":171}," # 查看文件头部\u002F尾部\n",[102,121525,121526],{"class":104,"line":1606},[102,121527,2389],{"emptyLinePlaceholder":30},[102,121529,121530],{"class":104,"line":1612},[102,121531,121532],{"class":171},"# 权限管理\n",[102,121534,121535,121537],{"class":104,"line":1617},[102,121536,24602],{"class":1952},[102,121538,121539],{"class":171},"     # 修改文件权限\n",[102,121541,121542,121545],{"class":104,"line":1631},[102,121543,121544],{"class":1952},"chown",[102,121546,121547],{"class":171},"     # 修改文件所有者\n",[102,121549,121550,121552],{"class":104,"line":1636},[102,121551,24567],{"class":1952},[102,121553,121554],{"class":171},"      # 以管理员身份执行\n",[102,121556,121557],{"class":104,"line":1642},[102,121558,2389],{"emptyLinePlaceholder":30},[102,121560,121561],{"class":104,"line":1663},[102,121562,121563],{"class":171},"# 系统信息\n",[102,121565,121566,121568],{"class":104,"line":1668},[102,121567,70195],{"class":1952},[102,121569,121570],{"class":171},"     # 系统信息\n",[102,121572,121573,121576],{"class":104,"line":1682},[102,121574,121575],{"class":1952},"df",[102,121577,121578],{"class":171},"        # 磁盘使用情况\n",[102,121580,121581,121584],{"class":104,"line":1687},[102,121582,121583],{"class":1952},"free",[102,121585,121586],{"class":171},"      # 内存使用情况\n",[102,121588,121589,121592],{"class":104,"line":1716},[102,121590,121591],{"class":1952},"top\u002Fhtop",[102,121593,121594],{"class":171},"  # 进程监控\n",[102,121596,121597,121600],{"class":104,"line":1721},[102,121598,121599],{"class":1952},"ps",[102,121601,121602],{"class":171},"        # 查看进程\n",[102,121604,121605],{"class":104,"line":1738},[102,121606,2389],{"emptyLinePlaceholder":30},[102,121608,121609],{"class":104,"line":1743},[102,121610,121611],{"class":171},"# 网络\n",[102,121613,121614,121617],{"class":104,"line":1748},[102,121615,121616],{"class":1952},"ping",[102,121618,121619],{"class":171},"      # 测试网络连通性\n",[102,121621,121622,121624],{"class":104,"line":1753},[102,121623,26840],{"class":1952},[102,121625,121626],{"class":171},"      # 发送 HTTP 请求\n",[102,121628,121629,121631],{"class":104,"line":1767},[102,121630,120280],{"class":1952},[102,121632,121633],{"class":171},"      # 下载文件\n",[102,121635,121636,121639],{"class":104,"line":1772},[102,121637,121638],{"class":1952},"ssh",[102,121640,121641],{"class":171},"       # 远程登录\n",[102,121643,121644,121647],{"class":104,"line":2566},[102,121645,121646],{"class":1952},"scp",[102,121648,121649],{"class":171},"       # 远程文件传输\n",[102,121651,121652],{"class":104,"line":2580},[102,121653,2389],{"emptyLinePlaceholder":30},[102,121655,121656],{"class":104,"line":2588},[102,121657,121658],{"class":171},"# 包管理（Debian\u002FUbuntu）\n",[102,121660,121661,121663,121665],{"class":104,"line":2593},[102,121662,117359],{"class":1952},[102,121664,117338],{"class":217},[102,121666,121667],{"class":171},"   # 更新软件源\n",[102,121669,121670,121672,121674],{"class":104,"line":2599},[102,121671,117359],{"class":1952},[102,121673,23824],{"class":217},[102,121675,121676],{"class":171},"  # 安装软件包\n",[102,121678,121679,121681,121683],{"class":104,"line":2605},[102,121680,117359],{"class":1952},[102,121682,26070],{"class":217},[102,121684,121685],{"class":171},"   # 卸载软件包\n",[56,121687,121688],{"start":24},[59,121689,121690],{},"KDE Dolphin 以root打开",[19,121692,121693],{},"kde5",[93,121695,121697],{"className":117287,"code":121696,"language":117289,"meta":23,"style":23},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[99,121698,121699],{"__ignoreMap":23},[102,121700,121701,121704,121707,121710,121712,121714,121717,121720,121722,121725,121727],{"class":104,"line":105},[102,121702,121703],{"class":1952},"pkexec",[102,121705,121706],{"class":217}," env",[102,121708,121709],{"class":217}," DISPLAY=",[102,121711,28134],{"class":112},[102,121713,28192],{"class":217},[102,121715,121716],{"class":112},"$XAUTHORITY ",[102,121718,121719],{"class":217},"KDE_SESSION_VERSION=",[102,121721,432],{"class":161},[102,121723,121724],{"class":217}," KDE_FULL_SESSION=",[102,121726,1351],{"class":161},[102,121728,121729],{"class":217}," dolphin\n",[19,121731,121732],{},"kde6",[93,121734,121736],{"className":117287,"code":121735,"language":117289,"meta":23,"style":23},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[99,121737,121738],{"__ignoreMap":23},[102,121739,121740,121742,121744,121746,121748,121750,121752,121754,121756,121758,121760],{"class":104,"line":105},[102,121741,121703],{"class":1952},[102,121743,121706],{"class":217},[102,121745,121709],{"class":217},[102,121747,28134],{"class":112},[102,121749,28192],{"class":217},[102,121751,121716],{"class":112},[102,121753,121719],{"class":217},[102,121755,457],{"class":161},[102,121757,121724],{"class":217},[102,121759,1351],{"class":161},[102,121761,121729],{"class":217},[5116,121763,121764],{},"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":23,"searchDepth":24,"depth":24,"links":121766},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121426,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121773,"title":121774,"body":121775,"description":27,"extension":28,"meta":121789,"navigation":30,"path":121790,"seo":121791,"stem":121792,"__hash__":121793},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121776,"toc":121787},[121777,121780],[10,121778,121774],{"id":121779},"_5-各种环境配置",[19,121781,121782],{},[351,121783,121786],{"href":121784,"rel":121785},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23855],"电控组环境搭建大全",{"title":23,"searchDepth":24,"depth":24,"links":121788},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121774,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121795,"title":121796,"body":121797,"description":27,"extension":28,"meta":122145,"navigation":30,"path":122146,"seo":122147,"stem":122148,"__hash__":122149},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121798,"toc":122137},[121799,121802,121806,121810,121814,121819,121826,121830,122123,122127,122134],[10,121800,121796],{"id":121801},"_6-拓展功能",[14,121803,121805],{"id":121804},"_61-wine","6.1 Wine",[14,121807,121809],{"id":121808},"_62-android","6.2 Android",[73,121811,121813],{"id":121812},"_621-i卡a卡","6.2.1 I卡、A卡",[56,121815,121816],{},[59,121817,121818],{},"Wayland-Waydroid(体验超级好)",[19,121820,121821,121822],{},"Waydroid 官网与安装指南：",[351,121823,121824],{"href":121824,"rel":121825},"https:\u002F\u002Fwaydro.id\u002F",[23855],[73,121827,121829],{"id":121828},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[56,121831,121832],{},[59,121833,121834,121835,121837,121838,121842,121844,121847,121852,122049],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53707,121836],{},"BlissOS 官网下载：",[351,121839,121840],{"href":121840,"rel":121841},"https:\u002F\u002Fblissos.org\u002F",[23855],[53707,121843],{},[1451,121845],{"alt":23,"src":121846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[56,121848,121849],{"start":1168},[59,121850,121851],{},"比较推荐的配置",[93,121853,121855],{"className":117287,"code":121854,"language":117289,"meta":23,"style":23},"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",[99,121856,121857,121864,121874,121884,121894,121906,121916,121923,121933,121942,121951,121961,121971,121980,121990,122000,122012,122022,122031,122041],{"__ignoreMap":23},[102,121858,121859,121862],{"class":104,"line":105},[102,121860,121861],{"class":1952},"qemu-system-x86_64",[102,121863,24669],{"class":161},[102,121865,121866,121869,121872],{"class":104,"line":24},[102,121867,121868],{"class":161},"        -M",[102,121870,121871],{"class":217}," q35,vmport=off",[102,121873,24669],{"class":161},[102,121875,121876,121879,121882],{"class":104,"line":1168},[102,121877,121878],{"class":161},"        -accel",[102,121880,121881],{"class":217}," kvm",[102,121883,24669],{"class":161},[102,121885,121886,121889,121892],{"class":104,"line":1183},[102,121887,121888],{"class":161},"        -cpu",[102,121890,121891],{"class":217}," qemu64,+sse3,+sse4.2",[102,121893,24669],{"class":161},[102,121895,121896,121899,121902,121904],{"class":104,"line":1189},[102,121897,121898],{"class":161},"        -smp",[102,121900,121901],{"class":217}," 8,cores=",[102,121903,406],{"class":161},[102,121905,24669],{"class":161},[102,121907,121908,121911,121914],{"class":104,"line":1203},[102,121909,121910],{"class":161},"        -m",[102,121912,121913],{"class":217}," 6G",[102,121915,24669],{"class":161},[102,121917,121918,121921],{"class":104,"line":1209},[102,121919,121920],{"class":161},"        -usb",[102,121922,24669],{"class":161},[102,121924,121925,121928,121931],{"class":104,"line":1300},[102,121926,121927],{"class":161},"        -device",[102,121929,121930],{"class":217}," virtio-tablet",[102,121932,24669],{"class":161},[102,121934,121935,121937,121940],{"class":104,"line":1306},[102,121936,121927],{"class":161},[102,121938,121939],{"class":217}," virtio-keyboard",[102,121941,24669],{"class":161},[102,121943,121944,121946,121949],{"class":104,"line":1318},[102,121945,121927],{"class":161},[102,121947,121948],{"class":217}," usb-tablet",[102,121950,24669],{"class":161},[102,121952,121953,121956,121959],{"class":104,"line":1601},[102,121954,121955],{"class":161},"        -bios",[102,121957,121958],{"class":217}," OVMF-pure-efi64.fd",[102,121960,24669],{"class":161},[102,121962,121963,121966,121969],{"class":104,"line":1606},[102,121964,121965],{"class":161},"        -net",[102,121967,121968],{"class":217}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[102,121970,24669],{"class":161},[102,121972,121973,121975,121978],{"class":104,"line":1612},[102,121974,121965],{"class":161},[102,121976,121977],{"class":217}," nic,model=virtio",[102,121979,24669],{"class":161},[102,121981,121982,121985,121988],{"class":104,"line":1617},[102,121983,121984],{"class":161},"        -audio",[102,121986,121987],{"class":217}," sdl,model=hda",[102,121989,24669],{"class":161},[102,121991,121992,121995,121998],{"class":104,"line":1631},[102,121993,121994],{"class":161},"        -display",[102,121996,121997],{"class":217}," sdl,gl=on,show-cursor=on",[102,121999,24669],{"class":161},[102,122001,122002,122004,122007,122010],{"class":104,"line":1636},[102,122003,121927],{"class":161},[102,122005,122006],{"class":217}," virtio-vga-gl,xres=1920,yres=",[102,122008,122009],{"class":161},"1080",[102,122011,24669],{"class":161},[102,122013,122014,122017,122020],{"class":104,"line":1642},[102,122015,122016],{"class":161},"        -drive",[102,122018,122019],{"class":217}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[102,122021,24669],{"class":161},[102,122023,122024,122026,122029],{"class":104,"line":1663},[102,122025,122016],{"class":161},[102,122027,122028],{"class":217}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[102,122030,24669],{"class":161},[102,122032,122033,122036,122039],{"class":104,"line":1668},[102,122034,122035],{"class":161},"        -monitor",[102,122037,122038],{"class":217}," stdio",[102,122040,24669],{"class":161},[102,122042,122043,122046],{"class":104,"line":1682},[102,122044,122045],{"class":161},"        -serial",[102,122047,122048],{"class":217}," none\n",[56,122050,122051],{"start":1189},[59,122052,122053,122054],{},"常用操作：",[56,122055,122056,122059,122115],{},[59,122057,122058],{},"全屏：Ctrl+Alt+F",[59,122060,122061,122062,122067],{},"adb调试",[56,122063,122064],{},[59,122065,122066],{},"使Linux与Android用ADB连接。",[93,122068,122070],{"className":117287,"code":122069,"language":117289,"meta":23,"style":23},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[99,122071,122072,122077,122088,122093,122105,122110],{"__ignoreMap":23},[102,122073,122074],{"class":104,"line":105},[102,122075,122076],{"class":171},"# 连接安卓\n",[102,122078,122079,122082,122085],{"class":104,"line":24},[102,122080,122081],{"class":1952},"adb",[102,122083,122084],{"class":217}," connect",[102,122086,122087],{"class":161}," 127.0.0.1\n",[102,122089,122090],{"class":104,"line":1168},[102,122091,122092],{"class":171},"# 打开shell\n",[102,122094,122095,122097,122099,122102],{"class":104,"line":1183},[102,122096,122081],{"class":1952},[102,122098,26874],{"class":161},[102,122100,122101],{"class":217}," 127.0.0.1:5555",[102,122103,122104],{"class":217}," shell\n",[102,122106,122107],{"class":104,"line":1189},[102,122108,122109],{"class":171},"# 使用root权限\n",[102,122111,122112],{"class":104,"line":1203},[102,122113,122114],{"class":1952},"su\n",[59,122116,122117,122118],{},"中文输入法",[56,122119,122120],{},[59,122121,122122],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122124,122126],{"id":122125},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122128,122129,122130],{},"rEFInd 官网与文档：",[351,122131,122132],{"href":122132,"rel":122133},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23855],[5116,122135,122136],{},"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":23,"searchDepth":24,"depth":24,"links":122138},[122139,122140,122144],{"id":121804,"depth":24,"text":121805},{"id":121808,"depth":24,"text":121809,"children":122141},[122142,122143],{"id":121812,"depth":1168,"text":121813},{"id":121828,"depth":1168,"text":121829},{"id":122125,"depth":24,"text":122126},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121796,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122151,"title":122152,"body":122153,"description":27,"extension":28,"meta":125452,"navigation":30,"path":125453,"seo":125454,"stem":125455,"__hash__":125456},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122154,"toc":125426},[122155,122158,122162,122165,122172,122422,122425,122497,122500,122504,122508,122513,122516,122519,122522,122527,122530,122533,122536,122541,122544,122549,122552,122555,122560,122563,122568,122571,122575,122579,122582,122587,122590,122604,122607,122610,122619,122622,122631,122634,122637,122646,122649,122658,122661,122664,122673,122676,122679,122694,122697,122700,122709,122714,122717,122720,122729,122732,122741,122744,122753,122756,122765,122770,122773,122781,122786,122789,122798,122801,122809,122814,122817,122826,122829,122832,122836,122839,122844,122847,122852,122866,122871,122876,122887,122892,122898,122903,122918,122923,122926,122931,122936,122941,122949,122954,122961,122966,122977,122982,122985,122989,122992,122995,123000,123003,123022,123027,123030,123039,123044,123047,123069,123072,123102,123105,123110,123113,123127,123132,123151,123154,123157,123162,123174,123179,123184,123187,123192,123195,123210,123213,123218,123223,123227,123232,123272,123275,123279,123285,123291,123296,123299,123306,123311,123318,123321,123324,123331,123345,123348,123408,123411,123425,123437,123440,123443,123446,123510,123513,123516,123519,123539,123542,123547,123554,123558,123561,123565,123570,123575,123579,123582,123585,123627,123632,123635,123657,123672,123674,123679,123691,123751,123753,123755,123809,123811,123813,123819,123824,123827,123832,123836,123839,123901,123906,123909,123911,123915,123927,124009,124011,124013,124067,124073,124075,124079,124084,124086,124091,124095,124115,124150,124154,124157,124160,124163,124170,124173,124185,124188,124203,124206,124225,124273,124276,124293,124296,124310,124315,124318,124327,124342,124354,124392,124397,124406,124411,124416,124442,124451,124455,124459,124464,124467,124471,124475,124480,124483,124488,124491,124496,124499,124504,124507,124511,124516,124519,124524,124527,124531,124536,124539,124544,124547,124552,124555,124559,124564,124567,124572,124575,124580,124583,124587,124592,124595,124600,124603,124608,124611,124616,124619,124624,124627,124632,124635,124639,124644,124647,124652,124659,124663,124668,124671,124676,124679,124683,124688,124691,124694,124697,124700,124703,124707,124710,124720,124725,124730,124752,124757,124762,124769,124773,124778,124781,124784,124789,124792,124795,124798,124801,124804,124807,124810,124813,124816,124819,124822,124825,124830,124835,124840,124845,124850,124855,124860,124863,124867,124870,124874,124879,124884,124889,124894,124898,124904,124912,124917,124920,124925,124940,124943,124948,124982,124997,125000,125055,125081,125093,125096,125105,125108,125123,125128,125131,125137,125142,125145,125150,125153,125158,125163,125170,125173,125188,125191,125226,125231,125239,125277,125280,125283,125288,125291,125296,125307,125341,125346,125349,125358,125363,125369,125372,125377,125386,125391,125394,125397,125402,125410,125413,125418,125423],[10,122156,122152],{"id":122157},"_7-其他操作",[14,122159,122161],{"id":122160},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122163,122164],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122166,122167,122168,122171],{},"进入工控机的硬盘目录，进入",[99,122169,122170],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[93,122173,122177],{"className":122174,"code":122175,"language":122176,"meta":23,"style":23},"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",[99,122178,122179,122187,122198,122205,122212,122224,122231,122243,122254,122265,122272,122279,122286,122298,122310,122317,122329,122341,122348,122360,122372,122384,122395,122402,122413],{"__ignoreMap":23},[102,122180,122181,122184],{"class":104,"line":105},[102,122182,122183],{"class":51291},"network",[102,122185,122186],{"class":112},": \n",[102,122188,122189,122192,122194,122196],{"class":104,"line":24},[102,122190,122191],{"class":51291},"  version",[102,122193,51428],{"class":112},[102,122195,190],{"class":161},[102,122197,2663],{"class":112},[102,122199,122200,122203],{"class":104,"line":1168},[102,122201,122202],{"class":51291},"  wifis",[102,122204,122186],{"class":112},[102,122206,122207,122210],{"class":104,"line":1183},[102,122208,122209],{"class":51291},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[102,122211,122186],{"class":112},[102,122213,122214,122217,122219,122222],{"class":104,"line":1189},[102,122215,122216],{"class":51291},"      renderer",[102,122218,51428],{"class":112},[102,122220,122221],{"class":217},"NetworkManager",[102,122223,2663],{"class":112},[102,122225,122226,122229],{"class":104,"line":1203},[102,122227,122228],{"class":51291},"      match",[102,122230,122186],{"class":112},[102,122232,122233,122236,122238,122241],{"class":104,"line":1209},[102,122234,122235],{"class":51291},"        name",[102,122237,51428],{"class":112},[102,122239,122240],{"class":217},"\"wlan0\"",[102,122242,2663],{"class":112},[102,122244,122245,122248,122250,122252],{"class":104,"line":1300},[102,122246,122247],{"class":51291},"      dhcp4",[102,122249,51428],{"class":112},[102,122251,1351],{"class":161},[102,122253,2663],{"class":112},[102,122255,122256,122259,122261,122263],{"class":104,"line":1306},[102,122257,122258],{"class":51291},"      dhcp6",[102,122260,51428],{"class":112},[102,122262,1351],{"class":161},[102,122264,2663],{"class":112},[102,122266,122267,122270],{"class":104,"line":1318},[102,122268,122269],{"class":51291},"      access-points",[102,122271,122186],{"class":112},[102,122273,122274,122277],{"class":104,"line":1601},[102,122275,122276],{"class":217},"        \"EMIS_Vinci_Robocon_5G\"",[102,122278,122186],{"class":112},[102,122280,122281,122284],{"class":104,"line":1606},[102,122282,122283],{"class":51291},"          auth",[102,122285,122186],{"class":112},[102,122287,122288,122291,122293,122296],{"class":104,"line":1612},[102,122289,122290],{"class":51291},"            key-management",[102,122292,51428],{"class":112},[102,122294,122295],{"class":217},"\"psk\"",[102,122297,2663],{"class":112},[102,122299,122300,122303,122305,122308],{"class":104,"line":1617},[102,122301,122302],{"class":51291},"            password",[102,122304,51428],{"class":112},[102,122306,122307],{"class":217},"\"vinci666\"",[102,122309,2663],{"class":112},[102,122311,122312,122315],{"class":104,"line":1631},[102,122313,122314],{"class":51291},"          networkmanager",[102,122316,122186],{"class":112},[102,122318,122319,122322,122324,122327],{"class":104,"line":1636},[102,122320,122321],{"class":51291},"            uuid",[102,122323,51428],{"class":112},[102,122325,122326],{"class":217},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[102,122328,2663],{"class":112},[102,122330,122331,122334,122336,122339],{"class":104,"line":1642},[102,122332,122333],{"class":51291},"            name",[102,122335,51428],{"class":112},[102,122337,122338],{"class":217},"\"EMIS_Vinci_Robocon_5G\"",[102,122340,2663],{"class":112},[102,122342,122343,122346],{"class":104,"line":1663},[102,122344,122345],{"class":51291},"            passthrough",[102,122347,122186],{"class":112},[102,122349,122350,122353,122355,122358],{"class":104,"line":1668},[102,122351,122352],{"class":51291},"              wifi-security.auth-alg",[102,122354,51428],{"class":112},[102,122356,122357],{"class":217},"\"open\"",[102,122359,2663],{"class":112},[102,122361,122362,122365,122367,122370],{"class":104,"line":1682},[102,122363,122364],{"class":51291},"              ipv6.addr-gen-mode",[102,122366,51428],{"class":112},[102,122368,122369],{"class":217},"\"default\"",[102,122371,2663],{"class":112},[102,122373,122374,122377,122379,122382],{"class":104,"line":1687},[102,122375,122376],{"class":51291},"              ipv6.ip6-privacy",[102,122378,51428],{"class":112},[102,122380,122381],{"class":217},"\"-1\"",[102,122383,2663],{"class":112},[102,122385,122386,122389,122391,122393],{"class":104,"line":1716},[102,122387,122388],{"class":51291},"              proxy._",[102,122390,51428],{"class":112},[102,122392,7642],{"class":217},[102,122394,2663],{"class":112},[102,122396,122397,122400],{"class":104,"line":1721},[102,122398,122399],{"class":51291},"      networkmanager",[102,122401,122186],{"class":112},[102,122403,122404,122407,122409,122411],{"class":104,"line":1738},[102,122405,122406],{"class":51291},"        uuid",[102,122408,51428],{"class":112},[102,122410,122326],{"class":217},[102,122412,2663],{"class":112},[102,122414,122415,122417,122419],{"class":104,"line":1743},[102,122416,122235],{"class":51291},[102,122418,51428],{"class":112},[102,122420,122421],{"class":217},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122423,122424],{},"将其改为新wifi的名和密码：",[93,122426,122428],{"className":122174,"code":122427,"language":122176,"meta":23,"style":23},"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",[99,122429,122430,122436,122445,122451,122458,122467,122475,122481,122487],{"__ignoreMap":23},[102,122431,122432,122434],{"class":104,"line":105},[102,122433,122183],{"class":51291},[102,122435,3728],{"class":112},[102,122437,122438,122440,122442],{"class":104,"line":24},[102,122439,122191],{"class":51291},[102,122441,51428],{"class":112},[102,122443,122444],{"class":161},"2\n",[102,122446,122447,122449],{"class":104,"line":1168},[102,122448,122202],{"class":51291},[102,122450,3728],{"class":112},[102,122452,122453,122456],{"class":104,"line":1183},[102,122454,122455],{"class":51291},"    wlan0",[102,122457,3728],{"class":112},[102,122459,122460,122462,122464],{"class":104,"line":1189},[102,122461,122247],{"class":51291},[102,122463,51428],{"class":112},[102,122465,122466],{"class":161},"true\n",[102,122468,122469,122471,122473],{"class":104,"line":1203},[102,122470,122258],{"class":51291},[102,122472,51428],{"class":112},[102,122474,122466],{"class":161},[102,122476,122477,122479],{"class":104,"line":1209},[102,122478,122269],{"class":51291},[102,122480,3728],{"class":112},[102,122482,122483,122485],{"class":104,"line":1300},[102,122484,122276],{"class":217},[102,122486,3728],{"class":112},[102,122488,122489,122492,122494],{"class":104,"line":1306},[102,122490,122491],{"class":51291},"          password",[102,122493,51428],{"class":112},[102,122495,122496],{"class":217},"\"vinci666\"\n",[19,122498,122499],{},"工控机开机即可连上网。",[14,122501,122503],{"id":122502},"_72-ssh远程开发","7.2 SSH远程开发",[73,122505,122507],{"id":122506},"_721-环境准备","7.2.1 环境准备",[19,122509,122510],{},[262,122511,122512],{},"1.硬件准备",[19,122514,122515],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122517,122518],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122520,122521],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122523,122524],{},[262,122525,122526],{},"2.设置固定IP",[19,122528,122529],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122531,122532],{},"1.进入设置界面",[19,122534,122535],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122537,122538],{},[1451,122539],{"alt":23,"src":122540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122542,122543],{},"2.配置所连接的网络",[19,122545,122546],{},[1451,122547],{"alt":23,"src":122548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122550,122551],{},"3.设置固定IP",[19,122553,122554],{},"查看当前IP地址。",[19,122556,122557],{},[1451,122558],{"alt":23,"src":122559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122561,122562],{},"设置固定IP。",[19,122564,122565],{},[1451,122566],{"alt":23,"src":122567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122569,122570],{},"至此，IP配置完毕。",[73,122572,122574],{"id":122573},"_722-环境搭建","7.2.2 环境搭建",[19,122576,122577],{},[262,122578,25744],{},[19,122580,122581],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122583,122584],{},[262,122585,122586],{},"实现",[19,122588,122589],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[56,122591,122592,122595,122598,122601],{},[59,122593,122594],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[59,122596,122597],{},"远程主机启动SSH服务；",[59,122599,122600],{},"本地主机登陆远程主机；",[59,122602,122603],{},"实现数据传输。",[19,122605,122606],{},"1.安装SSH客户端与服务端",[19,122608,122609],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[93,122611,122613],{"className":120807,"code":122612,"language":120809,"meta":120810,"style":23}," sudo apt install openssh-server\n",[99,122614,122615],{"__ignoreMap":23},[102,122616,122617],{"class":104,"line":105},[102,122618,122612],{},[19,122620,122621],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[93,122623,122625],{"className":120807,"code":122624,"language":120809,"meta":120810,"style":23},"sudo apt install openssh-client\n",[99,122626,122627],{"__ignoreMap":23},[102,122628,122629],{"class":104,"line":105},[102,122630,122624],{},[19,122632,122633],{},"2.远程主机启动SSH服务",[19,122635,122636],{},"远程主机启动 ssh 服务命令如下：",[93,122638,122640],{"className":120807,"code":122639,"language":120809,"meta":120810,"style":23},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[99,122641,122642],{"__ignoreMap":23},[102,122643,122644],{"class":104,"line":105},[102,122645,122639],{},[19,122647,122648],{},"启动后可使用如下命令查看服务是否正常运行：",[93,122650,122652],{"className":120807,"code":122651,"language":120809,"meta":120810,"style":23},"ps -e | grep ssh\n",[99,122653,122654],{"__ignoreMap":23},[102,122655,122656],{"class":104,"line":105},[102,122657,122651],{},[19,122659,122660],{},"如果启动成功，会包含 sshd 程序。",[19,122662,122663],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[93,122665,122667],{"className":120807,"code":122666,"language":120809,"meta":120810,"style":23},"sudo systemctl enable ssh\n",[99,122668,122669],{"__ignoreMap":23},[102,122670,122671],{"class":104,"line":105},[102,122672,122666],{},[19,122674,122675],{},"3.本地远程登录",[19,122677,122678],{},"登录远程主机可以调用如下命令:",[93,122680,122682],{"className":117287,"code":122681,"language":117289,"meta":23,"style":23},"ssh -X 用户名@ip地址\n",[99,122683,122684],{"__ignoreMap":23},[102,122685,122686,122688,122691],{"class":104,"line":105},[102,122687,121638],{"class":1952},[102,122689,122690],{"class":161}," -X",[102,122692,122693],{"class":217}," 用户名@ip地址\n",[19,122695,122696],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122698,122699],{},"如果退出，可以调用exit命令：",[93,122701,122703],{"className":120807,"code":122702,"language":120809,"meta":120810,"style":23},"exit\n",[99,122704,122705],{"__ignoreMap":23},[102,122706,122707],{"class":104,"line":105},[102,122708,122702],{},[19,122710,122711],{},[262,122712,122713],{},"4.实现数据传输",[19,122715,122716],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122718,122719],{},"上传文件指令格式如下：",[93,122721,122723],{"className":120807,"code":122722,"language":120809,"meta":120810,"style":23},"scp 本地文件路径 账号@ip:路径\n",[99,122724,122725],{"__ignoreMap":23},[102,122726,122727],{"class":104,"line":105},[102,122728,122722],{},[19,122730,122731],{},"上传文件夹指令格式如下：",[93,122733,122735],{"className":120807,"code":122734,"language":120809,"meta":120810,"style":23},"scp -r 本地文件夹路径 账号@ip:路径\n",[99,122736,122737],{"__ignoreMap":23},[102,122738,122739],{"class":104,"line":105},[102,122740,122734],{},[19,122742,122743],{},"下载文件指令格式如下：",[93,122745,122747],{"className":120807,"code":122746,"language":120809,"meta":120810,"style":23},"scp 账号@ip:路径 本地文件夹路径\n",[99,122748,122749],{"__ignoreMap":23},[102,122750,122751],{"class":104,"line":105},[102,122752,122746],{},[19,122754,122755],{},"下载文件夹指令格式如下：",[93,122757,122759],{"className":120807,"code":122758,"language":120809,"meta":120810,"style":23},"scp -r 账号@ip:路径 本地文件夹路径\n",[99,122760,122761],{"__ignoreMap":23},[102,122762,122763],{"class":104,"line":105},[102,122764,122758],{},[19,122766,122767],{},[262,122768,122769],{},"优化",[19,122771,122772],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[56,122774,122775,122778],{},[59,122776,122777],{},"本地生成密钥对；",[59,122779,122780],{},"将公钥上传至远程主机。",[19,122782,122783],{},[262,122784,122785],{},"1.生成密钥对",[19,122787,122788],{},"本地客户端生成公私钥：（一路回车默认即可）",[93,122790,122792],{"className":120807,"code":122791,"language":120809,"meta":120810,"style":23},"ssh-keygen\n",[99,122793,122794],{"__ignoreMap":23},[102,122795,122796],{"class":104,"line":105},[102,122797,122791],{},[19,122799,122800],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[56,122802,122803,122806],{},[59,122804,122805],{},"id_rsa （私钥）；",[59,122807,122808],{},"id_rsa.pub (公钥)。",[19,122810,122811],{},[262,122812,122813],{},"2.公钥上传",[19,122815,122816],{},"上传指令如下：",[93,122818,122820],{"className":120807,"code":122819,"language":120809,"meta":120810,"style":23},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[99,122821,122822],{"__ignoreMap":23},[102,122823,122824],{"class":104,"line":105},[102,122825,122819],{},[19,122827,122828],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,122830,122831],{},"以后再远程登录就无需录入密码了。",[73,122833,122835],{"id":122834},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,122837,122838],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,122840,122841],{},[262,122842,122843],{},"1.准备工作",[19,122845,122846],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,122848,122849],{},[262,122850,122851],{},"2.为VScode安装远程开发插件",[19,122853,122854,122855,122858,122859,122862,122863,28376],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[99,122856,122857],{},"扩展：商店","的搜索栏输入",[99,122860,122861],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[99,122864,122865],{},"安装",[19,122867,122868],{},[1451,122869],{"alt":23,"src":122870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,122872,122873],{},[262,122874,122875],{},"3.配置远程连接",[19,122877,122878,122879,122882,122883,122886],{},"步骤1：使用快捷键",[99,122880,122881],{},"ctrl + shift + p","打开命令输入窗口，并输入",[99,122884,122885],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,122888,122889],{},[1451,122890],{"alt":23,"src":122891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,122893,122894,122895,28376],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[99,122896,122897],{},"Add New SSH Host",[19,122899,122900],{},[1451,122901],{"alt":23,"src":122902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,122904,122905,122906,122909,122910,122913,122914,122917],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[99,122907,122908],{},"ssh +X ubuntu@192.168.43.164","，其中，",[99,122911,122912],{},"ubuntu","需要替换为你的登录用户名，",[99,122915,122916],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,122919,122920],{},[1451,122921],{"alt":23,"src":122922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,122924,122925],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,122927,122928],{},[1451,122929],{"alt":23,"src":122930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,122932,122933],{},[1451,122934],{"alt":23,"src":122935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,122937,122938],{},[262,122939,122940],{},"4.使用",[19,122942,122943,122944,122882,122946,122948],{},"步骤1：继续使用快捷键",[99,122945,122881],{},[99,122947,122885],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,122950,122951],{},[1451,122952],{"alt":23,"src":122953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,122955,122956,122957,122960],{},"或者，也可以点击侧边栏的",[99,122958,122959],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,122962,122963],{},[1451,122964],{"alt":23,"src":122965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,122967,122968,122969,122972,122973,122976],{},"步骤2：选择菜单栏的",[99,122970,122971],{},"文件","下的",[99,122974,122975],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,122978,122979],{},[1451,122980],{"alt":23,"src":122981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,122983,122984],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,122986,122988],{"id":122987},"_73-远程桌面","7.3 远程桌面",[19,122990,122991],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,122993,122994],{},"我们选择使用VNC来看。",[56,122996,122997],{},[59,122998,122999],{},"安装VNC服务器：",[19,123001,123002],{},"这里以TigerVNC为例进行安装：",[93,123004,123006],{"className":117287,"code":123005,"language":117289,"meta":23,"style":23},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[99,123007,123008],{"__ignoreMap":23},[102,123009,123010,123012,123014,123016,123019],{"class":104,"line":105},[102,123011,24567],{"class":1952},[102,123013,117308],{"class":217},[102,123015,23824],{"class":217},[102,123017,123018],{"class":217}," tigervnc-standalone-server",[102,123020,123021],{"class":217}," tigervnc-common\n",[56,123023,123024],{"start":24},[59,123025,123026],{},"设置VNC密码：",[19,123028,123029],{},"为VNC用户设置密码，运行以下命令：",[93,123031,123033],{"className":117287,"code":123032,"language":117289,"meta":23,"style":23},"vncpasswd\n",[99,123034,123035],{"__ignoreMap":23},[102,123036,123037],{"class":104,"line":105},[102,123038,123032],{"class":1952},[56,123040,123041],{"start":1168},[59,123042,123043],{},"配置VNC启动脚本:",[19,123045,123046],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[93,123048,123050],{"className":117287,"code":123049,"language":117289,"meta":23,"style":23},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[99,123051,123052,123061],{"__ignoreMap":23},[102,123053,123054,123056,123058],{"class":104,"line":105},[102,123055,101257],{"class":1952},[102,123057,29207],{"class":161},[102,123059,123060],{"class":217}," ~\u002F.vnc\n",[102,123062,123063,123066],{"class":104,"line":24},[102,123064,123065],{"class":1952},"nano",[102,123067,123068],{"class":217}," ~\u002F.vnc\u002Fxstartup\n",[19,123070,123071],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[93,123073,123075],{"className":117287,"code":123074,"language":117289,"meta":23,"style":23},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[99,123076,123077,123082,123090,123097],{"__ignoreMap":23},[102,123078,123079],{"class":104,"line":105},[102,123080,123081],{"class":171},"#!\u002Fbin\u002Fsh\n",[102,123083,123084,123087],{"class":104,"line":24},[102,123085,123086],{"class":161},"unset",[102,123088,123089],{"class":217}," SESSION_MANAGER\n",[102,123091,123092,123094],{"class":104,"line":1168},[102,123093,123086],{"class":161},[102,123095,123096],{"class":217}," DBUS_SESSION_BUS_ADDRESS\n",[102,123098,123099],{"class":104,"line":1183},[102,123100,123101],{"class":1952},"gnome-session\n",[19,123103,123104],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[56,123106,123107],{"start":1183},[59,123108,123109],{},"给予执行权限：",[19,123111,123112],{},"为xstartup文件设置执行权限：",[93,123114,123116],{"className":117287,"code":123115,"language":117289,"meta":23,"style":23},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[99,123117,123118],{"__ignoreMap":23},[102,123119,123120,123122,123125],{"class":104,"line":105},[102,123121,24602],{"class":1952},[102,123123,123124],{"class":217}," +x",[102,123126,123068],{"class":217},[56,123128,123129],{"start":1189},[59,123130,123131],{},"启动VNC服务器：",[93,123133,123135],{"className":117287,"code":123134,"language":117289,"meta":23,"style":23},"vncserver -geometry 1920x1080 -localhost=0\n",[99,123136,123137],{"__ignoreMap":23},[102,123138,123139,123142,123145,123148],{"class":104,"line":105},[102,123140,123141],{"class":1952},"vncserver",[102,123143,123144],{"class":161}," -geometry",[102,123146,123147],{"class":217}," 1920x1080",[102,123149,123150],{"class":161}," -localhost=0\n",[19,123152,123153],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123155,123156],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[56,123158,123159],{"start":1203},[59,123160,123161],{},"查看已开启的VNC服务器：",[93,123163,123165],{"className":117287,"code":123164,"language":117289,"meta":23,"style":23},"vncserver -list\n",[99,123166,123167],{"__ignoreMap":23},[102,123168,123169,123171],{"class":104,"line":105},[102,123170,123141],{"class":1952},[102,123172,123173],{"class":161}," -list\n",[19,123175,123176],{},[1451,123177],{"alt":23,"src":123178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[56,123180,123181],{"start":1209},[59,123182,123183],{},"连接到VNC服务器：",[19,123185,123186],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[56,123188,123189],{"start":1300},[59,123190,123191],{},"停止VNC服务器：",[19,123193,123194],{},"如果需要停止VNC服务器，可以使用以下命令：",[93,123196,123198],{"className":117287,"code":123197,"language":117289,"meta":23,"style":23},"vncserver -kill :1\n",[99,123199,123200],{"__ignoreMap":23},[102,123201,123202,123204,123207],{"class":104,"line":105},[102,123203,123141],{"class":1952},[102,123205,123206],{"class":161}," -kill",[102,123208,123209],{"class":217}," :1\n",[19,123211,123212],{},"将:1替换为你实际使用的显示编号。",[19,123214,123215],{},[1451,123216],{"alt":23,"src":123217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123219,123220],{},[1451,123221],{"alt":23,"src":123222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123224,123226],{"id":123225},"_74-usb端口设置","7.4 USB端口设置",[19,123228,123229],{},[262,123230,123231],{},"首先先配置好权限",[93,123233,123235],{"className":117287,"code":123234,"language":117289,"meta":23,"style":23},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[99,123236,123237,123242,123255,123262,123267],{"__ignoreMap":23},[102,123238,123239],{"class":104,"line":105},[102,123240,123241],{"class":171},"# 将用户权限提高\n",[102,123243,123244,123246,123248,123250,123253],{"class":104,"line":24},[102,123245,24567],{"class":1952},[102,123247,26565],{"class":217},[102,123249,26568],{"class":161},[102,123251,123252],{"class":217}," dialout",[102,123254,26573],{"class":112},[102,123256,123257,123259],{"class":104,"line":1168},[102,123258,26592],{"class":1952},[102,123260,123261],{"class":217}," dialout\n",[102,123263,123264],{"class":104,"line":1183},[102,123265,123266],{"class":171},"# 查看下面命令是否输出dialout（若输出才正常）\n",[102,123268,123269],{"class":104,"line":1189},[102,123270,123271],{"class":1952},"groups\n",[19,123273,123274],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[73,123276,123278],{"id":123277},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123280,123281,123284],{},[262,123282,123283],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123286,123287,123290],{},[262,123288,123289],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123292,123293],{},[262,123294,123295],{},"流程如下：",[19,123297,123298],{},"（1）.查找设备idVendor和idProduct",[19,123300,123301,123302,123305],{},"接入两个USB设备，在终端调用指令",[99,123303,123304],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123307,123308],{},[1451,123309],{"alt":23,"src":123310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123312,123313,123314,123317],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[99,123315,123316],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123319,123320],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123322,123323],{},"（2）.编写映射规则",[19,123325,123326,123327,123330],{},"在",[99,123328,123329],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[93,123332,123334],{"className":117287,"code":123333,"language":117289,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[99,123335,123336],{"__ignoreMap":23},[102,123337,123338,123340,123342],{"class":104,"line":105},[102,123339,24567],{"class":1952},[102,123341,118574],{"class":217},[102,123343,123344],{"class":217}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123346,123347],{},"输入如下内容：",[93,123349,123351],{"className":117287,"code":123350,"language":117289,"meta":23,"style":23},"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",[99,123352,123353,123383],{"__ignoreMap":23},[102,123354,123355,123358,123360,123363,123366,123369,123372,123374,123377,123380],{"class":104,"line":105},[102,123356,123357],{"class":112},"KERNEL",[102,123359,158],{"class":108},[102,123361,123362],{"class":217},"=\"ttyUSB*\",",[102,123364,123365],{"class":1952}," ATTRS",[102,123367,123368],{"class":217},"{idVendor}==",[102,123370,123371],{"class":1952},"\"10c4\"",[102,123373,491],{"class":1952},[102,123375,123376],{"class":217}," ATTRS{idProduct}==\"ea60\",",[102,123378,123379],{"class":217}," MODE:=\"0777\",",[102,123381,123382],{"class":217}," SYMLINK+=\"mylidar\"\n",[102,123384,123385,123387,123389,123391,123393,123395,123398,123400,123403,123405],{"class":104,"line":24},[102,123386,123357],{"class":112},[102,123388,158],{"class":108},[102,123390,123362],{"class":217},[102,123392,123365],{"class":1952},[102,123394,123368],{"class":217},[102,123396,123397],{"class":1952},"\"1a86\"",[102,123399,491],{"class":1952},[102,123401,123402],{"class":217}," ATTRS{idProduct}==\"7523\",",[102,123404,123379],{"class":217},[102,123406,123407],{"class":217}," SYMLINK+=\"mycar\"\n",[19,123409,123410],{},"代码解释：",[1120,123412,123413,123416,123419,123422],{},[59,123414,123415],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[59,123417,123418],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[59,123420,123421],{},"SYMLINK是符号连接，即绑定的别名；",[59,123423,123424],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123426,123427,123428,123431,123434],{},"***小提示：***",[23543,123429,123430],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[99,123432,123433],{},"\u002Fetc\u002Fudev\u002Frule.d",[23543,123435,123436],{},"目录即可。",[19,123438,123439],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123441,123442],{},"（3）.使规则生效",[19,123444,123445],{},"在终端下输入如下指令：",[93,123447,123449],{"className":117287,"code":123448,"language":117289,"meta":23,"style":23},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[99,123450,123451,123456,123468,123479,123483,123488,123501],{"__ignoreMap":23},[102,123452,123453],{"class":104,"line":105},[102,123454,123455],{"class":171},"# Ubuntu用下方命令\n",[102,123457,123458,123460,123462,123465],{"class":104,"line":24},[102,123459,24567],{"class":1952},[102,123461,120039],{"class":217},[102,123463,123464],{"class":217}," udev",[102,123466,123467],{"class":217}," reload\n",[102,123469,123470,123472,123474,123476],{"class":104,"line":1168},[102,123471,24567],{"class":1952},[102,123473,120039],{"class":217},[102,123475,123464],{"class":217},[102,123477,123478],{"class":217}," restart\n",[102,123480,123481],{"class":104,"line":1183},[102,123482,2389],{"emptyLinePlaceholder":30},[102,123484,123485],{"class":104,"line":1189},[102,123486,123487],{"class":171},"#Fedora用下方命令\n",[102,123489,123490,123492,123495,123498],{"class":104,"line":1203},[102,123491,24567],{"class":1952},[102,123493,123494],{"class":217}," udevadm",[102,123496,123497],{"class":217}," control",[102,123499,123500],{"class":161}," --reload\n",[102,123502,123503,123505,123507],{"class":104,"line":1209},[102,123504,24567],{"class":1952},[102,123506,123494],{"class":217},[102,123508,123509],{"class":217}," trigger\n",[19,123511,123512],{},"再重新插拔设备即可。",[19,123514,123515],{},"（4）.测试",[19,123517,123518],{},"终端下输入如下指令",[93,123520,123522],{"className":117287,"code":123521,"language":117289,"meta":23,"style":23},"ll \u002Fdev | grep ttyUSB\n",[99,123523,123524],{"__ignoreMap":23},[102,123525,123526,123529,123532,123534,123536],{"class":104,"line":105},[102,123527,123528],{"class":1952},"ll",[102,123530,123531],{"class":217}," \u002Fdev",[102,123533,25100],{"class":108},[102,123535,30227],{"class":1952},[102,123537,123538],{"class":217}," ttyUSB\n",[19,123540,123541],{},"运行结果如下：",[19,123543,123544],{},[1451,123545],{"alt":23,"src":123546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123548,123549,123550,123553],{},"也可以多次插拔USB设备，会发现设备端口",[99,123551,123552],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123555,123556],{},[262,123557,117955],{},[19,123559,123560],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[73,123562,123564],{"id":123563},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123566,123567,123569],{},[262,123568,123283],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123571,123572,123574],{},[262,123573,123289],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123576,123577],{},[262,123578,123295],{},[19,123580,123581],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123583,123584],{},"调用如下指令查看第一台雷达的USB信息：",[93,123586,123588],{"className":117287,"code":123587,"language":117289,"meta":23,"style":23},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[99,123589,123590,123610],{"__ignoreMap":23},[102,123591,123592,123595,123597,123600,123603,123605,123607],{"class":104,"line":105},[102,123593,123594],{"class":1952},"udevadm",[102,123596,69812],{"class":217},[102,123598,123599],{"class":161}," --attribute-walk",[102,123601,123602],{"class":161}," --name=\u002Fdev\u002FttyUSB0",[102,123604,25100],{"class":108},[102,123606,30227],{"class":1952},[102,123608,123609],{"class":217}," KERNELS\n",[102,123611,123612,123614,123616,123618,123621,123623,123625],{"class":104,"line":24},[102,123613,123594],{"class":1952},[102,123615,69812],{"class":217},[102,123617,123599],{"class":161},[102,123619,123620],{"class":161}," --name=\u002Fdev\u002FttyACM0",[102,123622,25100],{"class":108},[102,123624,30227],{"class":1952},[102,123626,123609],{"class":217},[19,123628,123629],{},[1451,123630],{"alt":23,"src":123631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123633,123634],{},"调用如下指令查看第二台雷达的USB信息：",[93,123636,123638],{"className":117287,"code":123637,"language":117289,"meta":23,"style":23},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[99,123639,123640],{"__ignoreMap":23},[102,123641,123642,123644,123646,123648,123651,123653,123655],{"class":104,"line":105},[102,123643,123594],{"class":1952},[102,123645,69812],{"class":217},[102,123647,123599],{"class":161},[102,123649,123650],{"class":161}," --name=\u002Fdev\u002FttyUSB1",[102,123652,25100],{"class":108},[102,123654,30227],{"class":1952},[102,123656,123609],{"class":217},[19,123658,123659,123660,123663,123664,123667,123668,123671],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[99,123661,123662],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[99,123665,123666],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[262,123669,123670],{},"唯一性标识","”。",[19,123673,123323],{},[19,123675,123326,123676,123678],{},[99,123677,123329],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[93,123680,123681],{"className":117287,"code":123333,"language":117289,"meta":23,"style":23},[99,123682,123683],{"__ignoreMap":23},[102,123684,123685,123687,123689],{"class":104,"line":105},[102,123686,24567],{"class":1952},[102,123688,118574],{"class":217},[102,123690,123344],{"class":217},[93,123692,123694],{"className":117287,"code":123693,"language":117289,"meta":23,"style":23},"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",[99,123695,123696,123725],{"__ignoreMap":23},[102,123697,123698,123700,123702,123704,123707,123709,123712,123715,123717,123720,123722],{"class":104,"line":105},[102,123699,123357],{"class":112},[102,123701,158],{"class":108},[102,123703,123362],{"class":217},[102,123705,123706],{"class":112}," KERNELS",[102,123708,158],{"class":108},[102,123710,123711],{"class":217},"=\"1-1.3:1.0\",",[102,123713,123714],{"class":1952}," MODE:",[102,123716,158],{"class":217},[102,123718,123719],{"class":1952},"\"0777\"",[102,123721,491],{"class":1952},[102,123723,123724],{"class":217}," SYMLINK+=\"rplidar_front\"\n",[102,123726,123727,123729,123731,123733,123735,123737,123740,123742,123744,123746,123748],{"class":104,"line":24},[102,123728,123357],{"class":112},[102,123730,158],{"class":108},[102,123732,123362],{"class":217},[102,123734,123706],{"class":112},[102,123736,158],{"class":108},[102,123738,123739],{"class":217},"=\"1-1.4:1.0\",",[102,123741,123714],{"class":1952},[102,123743,158],{"class":217},[102,123745,123719],{"class":1952},[102,123747,491],{"class":1952},[102,123749,123750],{"class":217}," SYMLINK+=\"rplidar_back\"\n",[19,123752,123442],{},[19,123754,123445],{},[93,123756,123757],{"className":117287,"code":123448,"language":117289,"meta":23,"style":23},[99,123758,123759,123763,123773,123783,123787,123791,123801],{"__ignoreMap":23},[102,123760,123761],{"class":104,"line":105},[102,123762,123455],{"class":171},[102,123764,123765,123767,123769,123771],{"class":104,"line":24},[102,123766,24567],{"class":1952},[102,123768,120039],{"class":217},[102,123770,123464],{"class":217},[102,123772,123467],{"class":217},[102,123774,123775,123777,123779,123781],{"class":104,"line":1168},[102,123776,24567],{"class":1952},[102,123778,120039],{"class":217},[102,123780,123464],{"class":217},[102,123782,123478],{"class":217},[102,123784,123785],{"class":104,"line":1183},[102,123786,2389],{"emptyLinePlaceholder":30},[102,123788,123789],{"class":104,"line":1189},[102,123790,123487],{"class":171},[102,123792,123793,123795,123797,123799],{"class":104,"line":1203},[102,123794,24567],{"class":1952},[102,123796,123494],{"class":217},[102,123798,123497],{"class":217},[102,123800,123500],{"class":161},[102,123802,123803,123805,123807],{"class":104,"line":1209},[102,123804,24567],{"class":1952},[102,123806,123494],{"class":217},[102,123808,123509],{"class":217},[19,123810,123512],{},[19,123812,123515],{},[19,123814,123518,123815,123818],{},[99,123816,123817],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,123820,123821],{},[1451,123822],{"alt":23,"src":123823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,123825,123826],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,123828,123829,123831],{},[262,123830,117955],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[73,123833,123835],{"id":123834},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,123837,123838],{},"（1）.查看所连接的主机USB接口的信息",[93,123840,123842],{"className":117287,"code":123841,"language":117289,"meta":23,"style":23},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[99,123843,123844,123874],{"__ignoreMap":23},[102,123845,123846,123848,123850,123853,123855,123857,123859,123861,123864,123867,123869,123872],{"class":104,"line":105},[102,123847,123594],{"class":1952},[102,123849,69812],{"class":217},[102,123851,123852],{"class":161}," -a",[102,123854,29207],{"class":161},[102,123856,28413],{"class":112},[102,123858,123594],{"class":1952},[102,123860,69812],{"class":217},[102,123862,123863],{"class":161}," -q",[102,123865,123866],{"class":217}," path",[102,123868,25106],{"class":161},[102,123870,123871],{"class":217}," \u002Fdev\u002FttyACM0",[102,123873,119],{"class":112},[102,123875,123876,123878,123880,123882,123884,123886,123888,123890,123892,123894,123896,123899],{"class":104,"line":24},[102,123877,123594],{"class":1952},[102,123879,69812],{"class":217},[102,123881,123852],{"class":161},[102,123883,29207],{"class":161},[102,123885,28413],{"class":112},[102,123887,123594],{"class":1952},[102,123889,69812],{"class":217},[102,123891,123863],{"class":161},[102,123893,123866],{"class":217},[102,123895,25106],{"class":161},[102,123897,123898],{"class":217}," \u002Fdev\u002FttyUSB0",[102,123900,119],{"class":112},[19,123902,123903],{},[1451,123904],{"alt":23,"src":123905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,123907,123908],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,123910,123323],{},[19,123912,123326,123913,123678],{},[99,123914,123329],{},[93,123916,123917],{"className":117287,"code":123333,"language":117289,"meta":23,"style":23},[99,123918,123919],{"__ignoreMap":23},[102,123920,123921,123923,123925],{"class":104,"line":105},[102,123922,24567],{"class":1952},[102,123924,118574],{"class":217},[102,123926,123344],{"class":217},[93,123928,123930],{"className":117287,"code":123929,"language":117289,"meta":23,"style":23},"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",[99,123931,123932,123960,123986],{"__ignoreMap":23},[102,123933,123934,123936,123938,123941,123943,123945,123947,123949,123952,123955,123957],{"class":104,"line":105},[102,123935,123357],{"class":112},[102,123937,158],{"class":108},[102,123939,123940],{"class":217},"=\"ttyACM*\",",[102,123942,123365],{"class":1952},[102,123944,123368],{"class":217},[102,123946,123397],{"class":1952},[102,123948,491],{"class":1952},[102,123950,123951],{"class":217}," ATTRS{idProduct}==\"55d4\",",[102,123953,123954],{"class":217}," ATTRS{serial}==\"0001\",",[102,123956,123379],{"class":217},[102,123958,123959],{"class":217}," SYMLINK+=\"ttyACM_MCU\"\n",[102,123961,123962,123964,123966,123968,123970,123972,123974,123976,123978,123981,123983],{"class":104,"line":24},[102,123963,123357],{"class":112},[102,123965,158],{"class":108},[102,123967,123940],{"class":217},[102,123969,123365],{"class":1952},[102,123971,123368],{"class":217},[102,123973,123397],{"class":1952},[102,123975,491],{"class":1952},[102,123977,123951],{"class":217},[102,123979,123980],{"class":217}," ATTRS{serial}==\"0002\",",[102,123982,123379],{"class":217},[102,123984,123985],{"class":217}," SYMLINK+=\"ttyACM_Lidar\"\n",[102,123987,123988,123990,123992,123994,123996,123998,124000,124002,124004,124006],{"class":104,"line":1168},[102,123989,123357],{"class":112},[102,123991,158],{"class":108},[102,123993,123362],{"class":217},[102,123995,123365],{"class":1952},[102,123997,123368],{"class":217},[102,123999,123397],{"class":1952},[102,124001,491],{"class":1952},[102,124003,123402],{"class":217},[102,124005,123379],{"class":217},[102,124007,124008],{"class":217}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124010,123442],{},[19,124012,123445],{},[93,124014,124015],{"className":117287,"code":123448,"language":117289,"meta":23,"style":23},[99,124016,124017,124021,124031,124041,124045,124049,124059],{"__ignoreMap":23},[102,124018,124019],{"class":104,"line":105},[102,124020,123455],{"class":171},[102,124022,124023,124025,124027,124029],{"class":104,"line":24},[102,124024,24567],{"class":1952},[102,124026,120039],{"class":217},[102,124028,123464],{"class":217},[102,124030,123467],{"class":217},[102,124032,124033,124035,124037,124039],{"class":104,"line":1168},[102,124034,24567],{"class":1952},[102,124036,120039],{"class":217},[102,124038,123464],{"class":217},[102,124040,123478],{"class":217},[102,124042,124043],{"class":104,"line":1183},[102,124044,2389],{"emptyLinePlaceholder":30},[102,124046,124047],{"class":104,"line":1189},[102,124048,123487],{"class":171},[102,124050,124051,124053,124055,124057],{"class":104,"line":1203},[102,124052,24567],{"class":1952},[102,124054,123494],{"class":217},[102,124056,123497],{"class":217},[102,124058,123500],{"class":161},[102,124060,124061,124063,124065],{"class":104,"line":1209},[102,124062,24567],{"class":1952},[102,124064,123494],{"class":217},[102,124066,123509],{"class":217},[19,124068,124069,124070],{},"再重新插拔设备即可，或者 ",[262,124071,124072],{},"直接重启系统。",[19,124074,123515],{},[19,124076,123518,124077,123818],{},[99,124078,123817],{},[19,124080,124081],{},[1451,124082],{"alt":23,"src":124083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124085,123826],{},[19,124087,124088,124090],{},[262,124089,117955],{}," 一些设备可能没有串口号等。",[73,124092,124094],{"id":124093},"_744-其他注意事项","7.4.4 其他注意事项",[19,124096,124097,124098,124100,124101,124104,124105,18400,124108,124111,124112,124114],{},"并非所有的USB设备端口号都是",[99,124099,123552],{},"的格式，比如Arduino的端口号可能是",[99,124102,124103],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[99,124106,124107],{},"videon",[99,124109,124110],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[99,124113,124107],{},"端口，绑定时需要关联的也是该接口。",[19,124116,124117,124118,124121,124122,124125,124126,124128,124129,124132,124133,124136,124137,124140,124141,124140,124144,124140,124147,28376],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[99,124119,124120],{},"KERNEL==\"ttyUSB*\"","修改为",[99,124123,124124],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[99,124127,124120],{},"修改为类似于",[99,124130,124131],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[99,124134,124135],{},"video[0,2,4,6]","表示可以绑定的端口为",[99,124138,124139],{},"video0","或",[99,124142,124143],{},"video2",[99,124145,124146],{},"video4",[99,124148,124149],{},"video6",[14,124151,124153],{"id":124152},"_75-挂载内网网页","7.5 挂载内网网页",[19,124155,124156],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124158,124159],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124161,124162],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124164,124165,124166],{},"Termux 下载地址（F-Droid）：",[351,124167,124168],{"href":124168,"rel":124169},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23855],[19,124171,124172],{},"首先打开app后，先更新软件缓存：",[93,124174,124176],{"className":117287,"code":124175,"language":117289,"meta":23,"style":23},"pkg update\n",[99,124177,124178],{"__ignoreMap":23},[102,124179,124180,124183],{"class":104,"line":105},[102,124181,124182],{"class":1952},"pkg",[102,124184,26233],{"class":217},[19,124186,124187],{},"然后换源",[93,124189,124191],{"className":117287,"code":124190,"language":117289,"meta":23,"style":23},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[99,124192,124193],{"__ignoreMap":23},[102,124194,124195,124197,124200],{"class":104,"line":105},[102,124196,123065],{"class":1952},[102,124198,124199],{"class":112}," $PREFIX",[102,124201,124202],{"class":217},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124204,124205],{},"将该文件内容替换为下面：",[93,124207,124209],{"className":117287,"code":124208,"language":117289,"meta":23,"style":23},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[99,124210,124211],{"__ignoreMap":23},[102,124212,124213,124216,124219,124222],{"class":104,"line":105},[102,124214,124215],{"class":1952},"deb",[102,124217,124218],{"class":217}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[102,124220,124221],{"class":217}," stable",[102,124223,124224],{"class":217}," main\n",[1120,124226,124227,124254],{},[59,124228,124229,124230,124232,124233],{},"如果你使用的是",[99,124231,123065],{},"编辑器：",[1120,124234,124235,124242,124248],{},[59,124236,124237,124238,124241],{},"按 ",[99,124239,124240],{},"Ctrl+O"," 保存文件。",[59,124243,124237,124244,124247],{},[99,124245,124246],{},"Enter"," 确认文件名。",[59,124249,124237,124250,124253],{},[99,124251,124252],{},"Ctrl+X"," 退出编辑器。",[59,124255,124229,124256,124232,124259],{},[99,124257,124258],{},"vim",[1120,124260,124261,124267],{},[59,124262,124237,124263,124266],{},[99,124264,124265],{},"Esc"," 退出编辑模式。",[59,124268,124269,124270,124272],{},"输入 ",[99,124271,119212],{}," 保存并退出。",[19,124274,124275],{},"接下来重新更新软件源：",[93,124277,124279],{"className":117287,"code":124278,"language":117289,"meta":23,"style":23},"pkg update && pkg upgrade\n",[99,124280,124281],{"__ignoreMap":23},[102,124282,124283,124285,124287,124289,124291],{"class":104,"line":105},[102,124284,124182],{"class":1952},[102,124286,117338],{"class":217},[102,124288,26181],{"class":112},[102,124290,124182],{"class":1952},[102,124292,117324],{"class":217},[19,124294,124295],{},"安装python：",[93,124297,124299],{"className":117287,"code":124298,"language":117289,"meta":23,"style":23},"pkg install python\n",[99,124300,124301],{"__ignoreMap":23},[102,124302,124303,124305,124307],{"class":104,"line":105},[102,124304,124182],{"class":1952},[102,124306,23824],{"class":217},[102,124308,124309],{"class":217}," python\n",[19,124311,124312,26464],{},[262,124313,124314],{},"通过Termux访问设备存储",[19,124316,124317],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[93,124319,124321],{"className":117287,"code":124320,"language":117289,"meta":23,"style":23},"termux-setup-storage\n",[99,124322,124323],{"__ignoreMap":23},[102,124324,124325],{"class":104,"line":105},[102,124326,124320],{"class":1952},[56,124328,124329],{},[59,124330,124331,26464,124334],{},[262,124332,124333],{},"进入HTML文件所在的目录",[56,124335,124336],{},[59,124337,124338,124339,124341],{},"使用",[99,124340,101267],{},"命令进入HTML文件所在的目录：",[93,124343,124345],{"className":117287,"code":124344,"language":117289,"meta":23,"style":23},"cd ~\u002Fyour_html_folder\n",[99,124346,124347],{"__ignoreMap":23},[102,124348,124349,124351],{"class":104,"line":105},[102,124350,101267],{"class":161},[102,124352,124353],{"class":217}," ~\u002Fyour_html_folder\n",[56,124355,124356],{"start":24},[59,124357,124358,26464,124361,124366,124383],{},[262,124359,124360],{},"启动Python HTTP服务器",[56,124362,124363],{},[59,124364,124365],{},"运行以下命令启动一个简单的HTTP服务器：",[93,124367,124369],{"className":117287,"code":124368,"language":117289,"meta":23,"style":23},"python -m http.server 8000\n",[99,124370,124371],{"__ignoreMap":23},[102,124372,124373,124375,124377,124380],{"class":104,"line":105},[102,124374,30371],{"class":1952},[102,124376,100873],{"class":161},[102,124378,124379],{"class":217}," http.server",[102,124381,124382],{"class":161}," 8000\n",[56,124384,124385],{"start":1168},[59,124386,124387,124388,124391],{},"这会在端口",[99,124389,124390],{},"8000","上启动一个Web服务器。",[1120,124393,124394],{},[59,124395,124396],{},"启动服务器后，Termux会显示日志信息，例如：",[93,124398,124400],{"className":120807,"code":124399,"language":120809,"meta":120810,"style":23},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[99,124401,124402],{"__ignoreMap":23},[102,124403,124404],{"class":104,"line":105},[102,124405,124399],{},[1120,124407,124408],{},[59,124409,124410],{},"这表示服务器已成功启动。",[19,124412,124413],{},[262,124414,124415],{},"在浏览器中访问HTML文件",[56,124417,124418],{},[59,124419,124420,26464,124423,124428],{},[262,124421,124422],{},"在同一设备上访问",[56,124424,124425],{},[59,124426,124427],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[93,124429,124432],{"className":124430,"code":124431,"language":71655,"meta":23,"style":23},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[99,124433,124434],{"__ignoreMap":23},[102,124435,124436,124439],{"class":104,"line":105},[102,124437,124438],{"class":112},"http:",[102,124440,124441],{"class":171},"\u002F\u002Flocalhost:8000\n",[1120,124443,124444],{},[59,124445,124446,124447,124450],{},"如果HTML文件中有",[99,124448,124449],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124452,124454],{"id":124453},"_76-linux重点知识","7.6 Linux重点知识",[73,124456,124458],{"id":124457},"_761-关于点的说明","7.6.1 关于点的说明",[19,124460,124461],{},[1451,124462],{"alt":23,"src":124463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124465,124466],{},"一点本目录，两点上目录",[73,124468,124470],{"id":124469},"_762-目录","7.6.2 目录",[21988,124472,124474],{"id":124473},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124476,124477],{},[262,124478,124479],{},"\u002Fboot:",[19,124481,124482],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124484,124485],{},[262,124486,124487],{},"\u002Fetc:",[19,124489,124490],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124492,124493],{},[262,124494,124495],{},"\u002Flib：",[19,124497,124498],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124500,124501],{},[262,124502,124503],{},"\u002Fsys:",[19,124505,124506],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21988,124508,124510],{"id":124509},"_7622-指令集合","7.6.2.2 指令集合",[19,124512,124513],{},[262,124514,124515],{},"\u002Fbin:",[19,124517,124518],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124520,124521],{},[262,124522,124523],{},"\u002Fsbin:",[19,124525,124526],{},"只有系统管理员才能使用的程序和指令",[21988,124528,124530],{"id":124529},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124532,124533],{},[262,124534,124535],{},"\u002Fdev:",[19,124537,124538],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124540,124541],{},[262,124542,124543],{},"\u002Fmedia:",[19,124545,124546],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124548,124549],{},[262,124550,124551],{},"\u002Fmnt:",[19,124553,124554],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21988,124556,124558],{"id":124557},"_7624-临时文件","7.6.2.4 临时文件",[19,124560,124561],{},[262,124562,124563],{},"\u002Frun:",[19,124565,124566],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124568,124569],{},[262,124570,124571],{},"\u002Flost+found:",[19,124573,124574],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124576,124577],{},[262,124578,124579],{},"\u002Ftmp:",[19,124581,124582],{},"这个目录是用来存放一些临时文件的",[21988,124584,124586],{"id":124585},"_7625-账户","7.6.2.5 账户",[19,124588,124589],{},[262,124590,124591],{},"\u002Froot：",[19,124593,124594],{},"系统管理员的用户主目录",[19,124596,124597,26464],{},[262,124598,124599],{},"\u002Fhome",[19,124601,124602],{},"用户的主目录，以用户的账号命名的",[19,124604,124605,26464],{},[262,124606,124607],{},"\u002Fusr",[19,124609,124610],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124612,124613],{},[262,124614,124615],{},"\u002Fusr\u002Fbin：",[19,124617,124618],{},"系统用户使用的应用程序与指令",[19,124620,124621],{},[262,124622,124623],{},"\u002Fusr\u002Fsbin：",[19,124625,124626],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124628,124629],{},[262,124630,124631],{},"\u002Fusr\u002Fsrc：",[19,124633,124634],{},"内核源代码默认的放置目录",[21988,124636,124638],{"id":124637},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124640,124641],{},[262,124642,124643],{},"\u002Fvar：",[19,124645,124646],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124648,124649],{},[262,124650,124651],{},"\u002Fproc:",[19,124653,124654,124655,124658],{},"管理 ",[262,124656,124657],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21988,124660,124662],{"id":124661},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124664,124665],{},[262,124666,124667],{},"\u002Fopt:",[19,124669,124670],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124672,124673],{},[262,124674,124675],{},"\u002Fsrv:",[19,124677,124678],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[73,124680,124682],{"id":124681},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124684,124685],{},[1451,124686],{"alt":23,"src":124687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124689,124690],{},"windows-->linux:",[19,124692,124693],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124695,124696],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124698,124699],{},"linux传输文件到windows",[19,124701,124702],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[73,124704,124706],{"id":124705},"_764-易忘知识","7.6.4 易忘知识",[19,124708,124709],{},"操作系统内核查看",[93,124711,124712],{"className":117287,"code":121281,"language":117289,"meta":23,"style":23},[99,124713,124714],{"__ignoreMap":23},[102,124715,124716,124718],{"class":104,"line":105},[102,124717,70195],{"class":1952},[102,124719,121290],{"class":161},[19,124721,124722],{},[1451,124723],{"alt":23,"src":124724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,124726,124727],{},[1451,124728],{"alt":23,"src":124729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[93,124731,124733],{"className":117287,"code":124732,"language":117289,"meta":23,"style":23},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[99,124734,124735,124747],{"__ignoreMap":23},[102,124736,124737,124739,124742,124745],{"class":104,"line":105},[102,124738,121498],{"class":1952},[102,124740,124741],{"class":217}," mvtest",[102,124743,124744],{"class":217}," mvtest2",[102,124746,2663],{"class":112},[102,124748,124749],{"class":104,"line":24},[102,124750,124751],{"class":1952},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,124753,124754],{},[1451,124755],{"alt":23,"src":124756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,124758,124759],{},[1451,124760],{"alt":23,"src":124761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,124763,124764,124765,124768],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[99,124766,124767],{},"du -a"," 可以快速查看磁盘使用细节。",[73,124770,124772],{"id":124771},"_765-vim","7.6.5 Vim",[19,124774,124775],{},[1451,124776],{"alt":23,"src":124777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,124779,124780],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,124782,124783],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,124785,124786],{},[262,124787,124788],{},"1.命令模式：",[19,124790,124791],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,124793,124794],{},"x 删除当前光标所在处的字符",[19,124796,124797],{},"：切换到底线命令模式，以在最底一行输入命令",[19,124799,124800],{},"a 进行插入模式，在光标下一个位置输入文本",[19,124802,124803],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,124805,124806],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,124808,124809],{},"dd 剪切当前行",[19,124811,124812],{},"yy 复制当前行",[19,124814,124815],{},"p 粘贴剪贴板内容到光标下方",[19,124817,124818],{},"P 粘贴剪贴板内容到光标上方",[19,124820,124821],{},"u 撤销上一次操作",[19,124823,124824],{},"ctrl+r 重做上一次操作",[19,124826,124827,124829],{},[908,124828],{}," 保存文件",[19,124831,124832,124834],{},[758,124833],{}," 退出Vim编辑器",[19,124836,124837,124839],{},[758,124838],{},"! 强制退出Vim编辑器，不保存修改",[19,124841,124842],{},[262,124843,124844],{},"2.输入模式：",[19,124846,124847],{},[1451,124848],{"alt":23,"src":124849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,124851,124852],{},[262,124853,124854],{},"3.底线命令模式：",[19,124856,124857],{},[1451,124858],{"alt":23,"src":124859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,124861,124862],{},"按下esc可以退出底线命令模式",[73,124864,124866],{"id":124865},"_766-apt","7.6.6 apt",[19,124868,124869],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[73,124871,124873],{"id":124872},"_767-home与root的区别","7.6.7 home与root的区别",[19,124875,124876],{},[1451,124877],{"alt":23,"src":124878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,124880,124881],{},[1451,124882],{"alt":23,"src":124883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,124885,124886],{},[1451,124887],{"alt":23,"src":124888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,124890,124891],{},[1451,124892],{"alt":23,"src":124893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[73,124895,124897],{"id":124896},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,124899,124900],{},[351,124901,124902],{"href":124902,"rel":124903},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23855],[56,124905,124906,124909],{},[59,124907,124908],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[59,124910,124911],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,124913,124914],{},[1451,124915],{"alt":23,"src":124916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,124918,124919],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,124921,124922],{},[1451,124923],{"alt":23,"src":124924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[93,124926,124928],{"className":120807,"code":124927,"language":120809,"meta":120810,"style":23},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[99,124929,124930,124935],{"__ignoreMap":23},[102,124931,124932],{"class":104,"line":105},[102,124933,124934],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[102,124936,124937],{"class":104,"line":24},[102,124938,124939],{},".\u002Fpycharm.sh\n",[19,124941,124942],{},"3️⃣创建.desktop文件",[19,124944,124945],{},[262,124946,124947],{},"原理：",[1120,124949,124950,124960],{},[59,124951,124952,124953,124959],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[262,124954,124955,124958],{},[99,124956,124957],{},".desktop"," 文件"," 来识别应用。",[59,124961,124962,124964,124965],{},[99,124963,124957],{}," 文件相当于一个“应用注册表”，告诉系统：",[1120,124966,124967,124970,124973,124976,124979],{},[59,124968,124969],{},"应用名字（Name）",[59,124971,124972],{},"图标（Icon）",[59,124974,124975],{},"执行命令（Exec）",[59,124977,124978],{},"分类（Categories）",[59,124980,124981],{},"是否需要终端（Terminal）",[93,124983,124985],{"className":120807,"code":124984,"language":120809,"meta":120810,"style":23},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[99,124986,124987,124992],{"__ignoreMap":23},[102,124988,124989],{"class":104,"line":105},[102,124990,124991],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[102,124993,124994],{"class":104,"line":24},[102,124995,124996],{},"nano pycharm.desktop\n",[19,124998,124999],{},"nano是一个命令行下的编辑器，也可以使用vim",[93,125001,125003],{"className":120807,"code":125002,"language":120809,"meta":120810,"style":23},"[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",[99,125004,125005,125010,125015,125020,125025,125030,125035,125040,125045,125050],{"__ignoreMap":23},[102,125006,125007],{"class":104,"line":105},[102,125008,125009],{},"[Desktop Entry]\n",[102,125011,125012],{"class":104,"line":24},[102,125013,125014],{},"Version=1.0\n",[102,125016,125017],{"class":104,"line":1168},[102,125018,125019],{},"Type=Application\n",[102,125021,125022],{"class":104,"line":1183},[102,125023,125024],{},"Name=PyCharm\n",[102,125026,125027],{"class":104,"line":1189},[102,125028,125029],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[102,125031,125032],{"class":104,"line":1203},[102,125033,125034],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[102,125036,125037],{"class":104,"line":1209},[102,125038,125039],{},"Comment=JetBrains PyCharm IDE\n",[102,125041,125042],{"class":104,"line":1300},[102,125043,125044],{},"Categories=Development;IDE;\n",[102,125046,125047],{"class":104,"line":1306},[102,125048,125049],{},"Terminal=false\n",[102,125051,125052],{"class":104,"line":1318},[102,125053,125054],{},"StartupWMClass=jetbrains-pycharm\n",[1120,125056,125057,125063,125069,125075],{},[59,125058,125059,125062],{},[99,125060,125061],{},"Exec"," → 点击图标时执行的命令",[59,125064,125065,125068],{},[99,125066,125067],{},"Icon"," → 显示在菜单和桌面上的图标",[59,125070,125071,125074],{},[99,125072,125073],{},"Terminal=false"," → 不打开终端",[59,125076,125077,125080],{},[99,125078,125079],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125082,125083,125084],"blockquote",{},[19,125085,125086,125087,125089,125090],{},"可以理解成 ",[99,125088,124957],{}," 文件是 Linux 的 ",[262,125091,125092],{},"快捷方式配置文件",[19,125094,125095],{},"4️⃣设置可执行权限",[93,125097,125099],{"className":120807,"code":125098,"language":120809,"meta":120810,"style":23},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[99,125100,125101],{"__ignoreMap":23},[102,125102,125103],{"class":104,"line":105},[102,125104,125098],{},[19,125106,125107],{},"5️⃣桌面图标启动的话如下：",[93,125109,125111],{"className":120807,"code":125110,"language":120809,"meta":120810,"style":23},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[99,125112,125113,125118],{"__ignoreMap":23},[102,125114,125115],{"class":104,"line":105},[102,125116,125117],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[102,125119,125120],{"class":104,"line":24},[102,125121,125122],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[56,125124,125125],{"start":1168},[59,125126,125127],{},"下载Appimage文件实现软件的安装",[19,125129,125130],{},"1️⃣先下载appimage",[19,125132,125133],{},[351,125134,125135],{"href":125135,"rel":125136},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23855],[19,125138,125139],{},[1451,125140],{"alt":23,"src":125141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125143,125144],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125146,125147],{},[1451,125148],{"alt":23,"src":125149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125151,125152],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125154,125155],{},[1451,125156],{"alt":23,"src":125157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125159,125160],{},[1451,125161],{"alt":23,"src":125162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125164,125165,125166,125169],{},"3️⃣给他们放在",[99,125167,125168],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125171,125172],{},"4️⃣给软件执行权限",[93,125174,125176],{"className":120807,"code":125175,"language":120809,"meta":120810,"style":23},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[99,125177,125178,125183],{"__ignoreMap":23},[102,125179,125180],{"class":104,"line":105},[102,125181,125182],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[102,125184,125185],{"class":104,"line":24},[102,125186,125187],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125189,125190],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[93,125192,125194],{"className":117287,"code":125193,"language":117289,"meta":23,"style":23},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[99,125195,125196,125203,125210,125216],{"__ignoreMap":23},[102,125197,125198,125200],{"class":104,"line":105},[102,125199,101267],{"class":161},[102,125201,125202],{"class":217}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[102,125204,125205,125207],{"class":104,"line":24},[102,125206,101274],{"class":1952},[102,125208,125209],{"class":217}," .\u002Fqqmusic.desktop\n",[102,125211,125212,125214],{"class":104,"line":1168},[102,125213,124258],{"class":1952},[102,125215,125209],{"class":217},[102,125217,125218,125220,125222,125224],{"class":104,"line":1183},[102,125219,24567],{"class":1952},[102,125221,24570],{"class":217},[102,125223,123124],{"class":217},[102,125225,125209],{"class":217},[19,125227,125228,125230],{},[99,125229,101274],{},"：一个 Linux 命令，主要功能是：",[1120,125232,125233,125236],{},[59,125234,125235],{},"如果文件不存在，就创建一个新的空文件",[59,125237,125238],{},"如果文件已存在，就更新该文件的最后修改时间",[93,125240,125242],{"className":120807,"code":125241,"language":120809,"meta":120810,"style":23},"[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",[99,125243,125244,125248,125253,125258,125263,125267,125272],{"__ignoreMap":23},[102,125245,125246],{"class":104,"line":105},[102,125247,125009],{},[102,125249,125250],{"class":104,"line":24},[102,125251,125252],{},"Name=QQ音乐\n",[102,125254,125255],{"class":104,"line":1168},[102,125256,125257],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[102,125259,125260],{"class":104,"line":1183},[102,125261,125262],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[102,125264,125265],{"class":104,"line":1189},[102,125266,125019],{},[102,125268,125269],{"class":104,"line":1203},[102,125270,125271],{},"Categories=Audio;Music;Player;\n",[102,125273,125274],{"class":104,"line":1209},[102,125275,125276],{},"Comment=QQ Music Client for Linux\n",[19,125278,125279],{},"将文件复制进去",[19,125281,125282],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125284,125285],{},[1451,125286],{"alt":23,"src":125287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125289,125290],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125292,125293],{},[1451,125294],{"alt":23,"src":125295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125297,125298,125299,125302,125303,125306],{},"如果你用的不是KDE，那么也可以直接修改",[99,125300,125301],{},"qqmuic.desktop","：在exec的末尾加上",[99,125304,125305],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[93,125308,125310],{"className":120807,"code":125309,"language":120809,"meta":120810,"style":23},"[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",[99,125311,125312,125316,125320,125325,125329,125333,125337],{"__ignoreMap":23},[102,125313,125314],{"class":104,"line":105},[102,125315,125009],{},[102,125317,125318],{"class":104,"line":24},[102,125319,125252],{},[102,125321,125322],{"class":104,"line":1168},[102,125323,125324],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[102,125326,125327],{"class":104,"line":1183},[102,125328,125262],{},[102,125330,125331],{"class":104,"line":1189},[102,125332,125019],{},[102,125334,125335],{"class":104,"line":1203},[102,125336,125271],{},[102,125338,125339],{"class":104,"line":1209},[102,125340,125276],{},[19,125342,125343],{},[1451,125344],{"alt":23,"src":125345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125347,125348],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[93,125350,125352],{"className":120807,"code":125351,"language":120809,"meta":120810,"style":23},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[99,125353,125354],{"__ignoreMap":23},[102,125355,125356],{"class":104,"line":105},[102,125357,125351],{},[56,125359,125360],{"start":1183},[59,125361,125362],{},"去Flathub上安装软件",[19,125364,125365],{},[351,125366,125367],{"href":125367,"rel":125368},"https:\u002F\u002Fflathub.org\u002F",[23855],[19,125370,125371],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125373,125374],{},[1451,125375],{"alt":23,"src":125376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[93,125378,125380],{"className":120807,"code":125379,"language":120809,"meta":120810,"style":23},"flatpak install flathub com.obsproject.Studio\n",[99,125381,125382],{"__ignoreMap":23},[102,125383,125384],{"class":104,"line":105},[102,125385,125379],{},[19,125387,125388],{},[1451,125389],{"alt":23,"src":125390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125392,125393],{},"2️⃣运行软件",[19,125395,125396],{},"a.官方方式：",[19,125398,125399],{},[1451,125400],{"alt":23,"src":125401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[93,125403,125404],{"className":120807,"code":125379,"language":120809,"meta":120810,"style":23},[99,125405,125406],{"__ignoreMap":23},[102,125407,125408],{"class":104,"line":105},[102,125409,125379],{},[19,125411,125412],{},"b.当普通软件运行：",[19,125414,125415],{},[1451,125416],{"alt":23,"src":125417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125419,125420],{},[1451,125421],{"alt":23,"src":125422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5116,125424,125425],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":23,"searchDepth":24,"depth":24,"links":125427},[125428,125429,125434,125435,125441,125442],{"id":122160,"depth":24,"text":122161},{"id":122502,"depth":24,"text":122503,"children":125430},[125431,125432,125433],{"id":122506,"depth":1168,"text":122507},{"id":122573,"depth":1168,"text":122574},{"id":122834,"depth":1168,"text":122835},{"id":122987,"depth":24,"text":122988},{"id":123225,"depth":24,"text":123226,"children":125436},[125437,125438,125439,125440],{"id":123277,"depth":1168,"text":123278},{"id":123563,"depth":1168,"text":123564},{"id":123834,"depth":1168,"text":123835},{"id":124093,"depth":1168,"text":124094},{"id":124152,"depth":24,"text":124153},{"id":124453,"depth":24,"text":124454,"children":125443},[125444,125445,125446,125447,125448,125449,125450,125451],{"id":124457,"depth":1168,"text":124458},{"id":124469,"depth":1168,"text":124470},{"id":124681,"depth":1168,"text":124682},{"id":124705,"depth":1168,"text":124706},{"id":124771,"depth":1168,"text":124772},{"id":124865,"depth":1168,"text":124866},{"id":124872,"depth":1168,"text":124873},{"id":124896,"depth":1168,"text":124897},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122152,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125458,"title":125459,"body":125460,"description":27,"extension":28,"meta":125464,"navigation":30,"path":125465,"seo":125466,"stem":125467,"__hash__":125468},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125461,"toc":125462},[],{"title":23,"searchDepth":24,"depth":24,"links":125463},[],{"category":30254},"\u002Fwiki\u002F2025-01-27-linux",{"title":125459,"description":27},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125470,"title":125471,"body":125472,"description":125476,"extension":28,"meta":125867,"navigation":30,"path":125868,"seo":125869,"stem":125870,"__hash__":125871},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125473,"toc":125865},[125474,125477,125481,125498,125501,125554,125558,125560,125600,125609,125613,125616,125857,125862],[19,125475,125476],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125478,125480],{"id":125479},"_1ubuntu环境配置","1.Ubuntu环境配置",[56,125482,125483,125486,125489,125492,125495],{},[59,125484,125485],{},"ubuntu环境换源",[59,125487,125488],{},"安装cuda",[59,125490,125491],{},"安装miniconda",[59,125493,125494],{},"安装pytorch",[59,125496,125497],{},"安装genesis",[19,125499,125500],{},"参考链接：",[93,125502,125504],{"className":23812,"code":125503,"language":23814,"meta":23,"style":23},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[99,125505,125506],{"__ignoreMap":23},[102,125507,125508,125511,125514,125517,125519,125522,125525,125527,125530,125533,125535,125538,125541,125543,125546,125549,125551],{"class":104,"line":105},[102,125509,125510],{"class":1952},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[102,125512,125513],{"class":217},"=blogdetail",[102,125515,125516],{"class":112},"&sharetype",[102,125518,158],{"class":108},[102,125520,125521],{"class":217},"blogdetail",[102,125523,125524],{"class":112},"&sharerId",[102,125526,158],{"class":108},[102,125528,125529],{"class":217},"144728092",[102,125531,125532],{"class":112},"&sharerefer",[102,125534,158],{"class":108},[102,125536,125537],{"class":217},"PC",[102,125539,125540],{"class":112},"&sharesource",[102,125542,158],{"class":108},[102,125544,125545],{"class":217},"qq_69379513",[102,125547,125548],{"class":112},"&sharefrom",[102,125550,158],{"class":108},[102,125552,125553],{"class":217},"from_link\n",[10,125555,125557],{"id":125556},"_2genesis-报错issue","2.Genesis 报错issue",[19,125559,125500],{},[93,125561,125562],{"className":23812,"code":125503,"language":23814,"meta":23,"style":23},[99,125563,125564],{"__ignoreMap":23},[102,125565,125566,125568,125570,125572,125574,125576,125578,125580,125582,125584,125586,125588,125590,125592,125594,125596,125598],{"class":104,"line":105},[102,125567,125510],{"class":1952},[102,125569,125513],{"class":217},[102,125571,125516],{"class":112},[102,125573,158],{"class":108},[102,125575,125521],{"class":217},[102,125577,125524],{"class":112},[102,125579,158],{"class":108},[102,125581,125529],{"class":217},[102,125583,125532],{"class":112},[102,125585,158],{"class":108},[102,125587,125537],{"class":217},[102,125589,125540],{"class":112},[102,125591,158],{"class":108},[102,125593,125545],{"class":217},[102,125595,125548],{"class":112},[102,125597,158],{"class":108},[102,125599,125553],{"class":217},[93,125601,125603],{"className":23812,"code":125602,"language":23814,"meta":23,"style":23},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[99,125604,125605],{"__ignoreMap":23},[102,125606,125607],{"class":104,"line":105},[102,125608,125602],{"class":1952},[10,125610,125612],{"id":125611},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125614,125615],{},"hello_robot.py",[93,125617,125619],{"className":30369,"code":125618,"language":30371,"meta":23,"style":23},"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",[99,125620,125621,125627,125642,125646,125658,125670,125674,125687,125691,125710,125720,125730,125744,125748,125752,125757,125761,125771,125778,125792,125799,125809,125814,125818,125836,125841,125845,125852],{"__ignoreMap":23},[102,125622,125623,125625],{"class":104,"line":105},[102,125624,30383],{"class":108},[102,125626,45296],{"class":112},[102,125628,125629,125632,125635,125637,125639],{"class":104,"line":24},[102,125630,125631],{"class":112},"os.environ[",[102,125633,125634],{"class":217},"'PYOPENGL_PLATFORM'",[102,125636,4432],{"class":112},[102,125638,158],{"class":108},[102,125640,125641],{"class":217}," 'glx'\n",[102,125643,125644],{"class":104,"line":1168},[102,125645,2389],{"emptyLinePlaceholder":30},[102,125647,125648,125650,125653,125655],{"class":104,"line":1183},[102,125649,30383],{"class":108},[102,125651,125652],{"class":112}," genesis ",[102,125654,31374],{"class":108},[102,125656,125657],{"class":112}," gs\n",[102,125659,125660,125662,125665,125667],{"class":104,"line":1189},[102,125661,30728],{"class":108},[102,125663,125664],{"class":112}," pynput ",[102,125666,30383],{"class":108},[102,125668,125669],{"class":112}," keyboard\n",[102,125671,125672],{"class":104,"line":1203},[102,125673,2389],{"emptyLinePlaceholder":30},[102,125675,125676,125679,125682,125684],{"class":104,"line":1209},[102,125677,125678],{"class":112},"gs.init(",[102,125680,125681],{"class":5206},"backend",[102,125683,158],{"class":108},[102,125685,125686],{"class":112},"gs.gpu)\n",[102,125688,125689],{"class":104,"line":1300},[102,125690,2389],{"emptyLinePlaceholder":30},[102,125692,125693,125696,125698,125701,125704,125706,125708],{"class":104,"line":1306},[102,125694,125695],{"class":112},"scene ",[102,125697,158],{"class":108},[102,125699,125700],{"class":112}," gs.Scene(",[102,125702,125703],{"class":5206},"show_viewer",[102,125705,158],{"class":108},[102,125707,31467],{"class":161},[102,125709,119],{"class":112},[102,125711,125712,125715,125717],{"class":104,"line":1318},[102,125713,125714],{"class":112},"plane ",[102,125716,158],{"class":108},[102,125718,125719],{"class":112}," scene.add_entity(gs.morphs.Plane())\n",[102,125721,125722,125725,125727],{"class":104,"line":1601},[102,125723,125724],{"class":112},"franka ",[102,125726,158],{"class":108},[102,125728,125729],{"class":112}," scene.add_entity(\n",[102,125731,125732,125735,125737,125739,125742],{"class":104,"line":1606},[102,125733,125734],{"class":112},"    gs.morphs.MJCF(",[102,125736,45345],{"class":5206},[102,125738,158],{"class":108},[102,125740,125741],{"class":217},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[102,125743,38038],{"class":112},[102,125745,125746],{"class":104,"line":1612},[102,125747,119],{"class":112},[102,125749,125750],{"class":104,"line":1617},[102,125751,2389],{"emptyLinePlaceholder":30},[102,125753,125754],{"class":104,"line":1631},[102,125755,125756],{"class":112},"scene.build()\n",[102,125758,125759],{"class":104,"line":1636},[102,125760,2389],{"emptyLinePlaceholder":30},[102,125762,125763,125765,125768],{"class":104,"line":1642},[102,125764,31938],{"class":108},[102,125766,125767],{"class":1952}," on_press",[102,125769,125770],{"class":112},"(key):\n",[102,125772,125773,125776],{"class":104,"line":1663},[102,125774,125775],{"class":108},"    try",[102,125777,3728],{"class":112},[102,125779,125780,125782,125785,125787,125790],{"class":104,"line":1668},[102,125781,2486],{"class":108},[102,125783,125784],{"class":112}," key.char ",[102,125786,2938],{"class":108},[102,125788,125789],{"class":217}," 'q'",[102,125791,3728],{"class":112},[102,125793,125794,125796],{"class":104,"line":1682},[102,125795,15722],{"class":108},[102,125797,125798],{"class":161}," False\n",[102,125800,125801,125804,125807],{"class":104,"line":1687},[102,125802,125803],{"class":108},"    except",[102,125805,125806],{"class":161}," AttributeError",[102,125808,3728],{"class":112},[102,125810,125811],{"class":104,"line":1716},[102,125812,125813],{"class":108},"        pass\n",[102,125815,125816],{"class":104,"line":1721},[102,125817,2389],{"emptyLinePlaceholder":30},[102,125819,125820,125823,125825,125828,125831,125833],{"class":104,"line":1738},[102,125821,125822],{"class":112},"listener ",[102,125824,158],{"class":108},[102,125826,125827],{"class":112}," keyboard.Listener(",[102,125829,125830],{"class":5206},"on_press",[102,125832,158],{"class":108},[102,125834,125835],{"class":112},"on_press)\n",[102,125837,125838],{"class":104,"line":1743},[102,125839,125840],{"class":112},"listener.start()\n",[102,125842,125843],{"class":104,"line":1748},[102,125844,2389],{"emptyLinePlaceholder":30},[102,125846,125847,125849],{"class":104,"line":1753},[102,125848,108654],{"class":108},[102,125850,125851],{"class":112}," listener.running:\n",[102,125853,125854],{"class":104,"line":1767},[102,125855,125856],{"class":112},"    scene.step()\n",[19,125858,125859],{},[1451,125860],{"alt":23,"src":125861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5116,125863,125864],{},"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":23,"searchDepth":24,"depth":24,"links":125866},[],{"category":23368},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125471,"description":125476},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":4,"title":5,"body":125873,"description":27,"extension":28,"meta":125884,"navigation":30,"path":31,"seo":125885,"stem":33,"__hash__":34},{"type":7,"value":125874,"toc":125881},[125875,125877,125879],[10,125876,5],{"id":12},[14,125878,17],{"id":16},[19,125880,21],{},{"title":23,"searchDepth":24,"depth":24,"links":125882},[125883],{"id":16,"depth":24,"text":17},{},{"title":5,"description":27},{"id":125887,"title":125888,"body":125889,"description":27,"extension":28,"meta":126028,"navigation":30,"path":126029,"seo":126030,"stem":126031,"__hash__":126032},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125890,"toc":126016},[125891,125894,125898,125901,125905,125915,125919,125922,125925,125928,125932,125939,125945,125949,125955,125966,125970,125973,125977,125980,125984,125987,125991,125994,125998,126001,126004,126007,126010,126013],[10,125892,125888],{"id":125893},"_2-vscode必备内容",[14,125895,125897],{"id":125896},"_21-标签分类","2.1 标签分类",[19,125899,125900],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,125902,125904],{"id":125903},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,125906,125907,125908,125910,125911,125914],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[99,125909,339],{}," 然后按 ",[99,125912,125913],{},"Tab","，快速自动生成基本结构。",[14,125916,125918],{"id":125917},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,125920,125921],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,125923,125924],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,125926,125927],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,125929,125931],{"id":125930},"_24-视图缩放","2.4 视图缩放",[19,125933,125934,125935,125938],{},"缩放视图 ",[99,125936,125937],{},"ctrl+"," 可实现代码增大。",[19,125940,125941,125944],{},[99,125942,125943],{},"ctrl-"," 可实现代码减小。",[14,125946,125948],{"id":125947},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,125950,125951,125952,28376],{},"VSCode 新建文件快捷键为 ",[99,125953,125954],{},"ctrl+N",[19,125956,125957,125958,125961,125962,125965],{},"保存快捷键为 ",[99,125959,125960],{},"ctrl+S","，将文本保存为 ",[99,125963,125964],{},".html"," 文件。",[14,125967,125969],{"id":125968},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,125971,125972],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,125974,125976],{"id":125975},"_27-vscode-icons","2.7 vscode-icons",[19,125978,125979],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,125981,125983],{"id":125982},"_28-easy-less","2.8 Easy LESS",[19,125985,125986],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,125988,125990],{"id":125989},"_29-会了吧插件","2.9 会了吧插件",[19,125992,125993],{},"会了吧插件可以展示代码中英语单词的意思。",[14,125995,125997],{"id":125996},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,125999,126000],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126002,126003],{},"②选定多个相同的单词:ctrl+D",[19,126005,126006],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126008,126009],{},"④全局替换某些单词:ctrl+h",[19,126011,126012],{},"⑤快速定位到某一行:ctrl+g",[19,126014,126015],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":23,"searchDepth":24,"depth":24,"links":126017},[126018,126019,126020,126021,126022,126023,126024,126025,126026,126027],{"id":125896,"depth":24,"text":125897},{"id":125903,"depth":24,"text":125904},{"id":125917,"depth":24,"text":125918},{"id":125930,"depth":24,"text":125931},{"id":125947,"depth":24,"text":125948},{"id":125968,"depth":24,"text":125969},{"id":125975,"depth":24,"text":125976},{"id":125982,"depth":24,"text":125983},{"id":125989,"depth":24,"text":125990},{"id":125996,"depth":24,"text":125997},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125888,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126034,"title":126035,"body":126036,"description":27,"extension":28,"meta":126195,"navigation":30,"path":126196,"seo":126197,"stem":126198,"__hash__":126199},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126037,"toc":126187},[126038,126041,126045,126055,126061,126067,126071,126080,126084,126089,126092,126095,126099,126102,126112,126121,126130,126139,126149,126156,126161,126166,126179],[10,126039,126035],{"id":126040},"_3-html文本与容器标签",[14,126042,126044],{"id":126043},"_31-标题标签","3.1 标题标签",[19,126046,126047,126050,126051,126054],{},[99,126048,126049],{},"\u003Ch1>","我是一级标签",[99,126052,126053],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126056,126057,126050,126059],{},[99,126058,126049],{},[99,126060,126053],{},[19,126062,123326,126063,126066],{},[99,126064,126065],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126068,126070],{"id":126069},"_32-段落标签","3.2 段落标签",[19,126072,126073,126076,126077],{},[99,126074,126075],{},"\u003Cp>","....",[99,126078,126079],{},"\u003C\u002Fp>",[14,126081,126083],{"id":126082},"_33-换行标签","3.3 换行标签",[19,126085,126086],{},[99,126087,126088],{},"\u003Cbr \u002F>",[19,126090,126091],{},"具有强制换行的作用",[19,126093,126094],{},"单标签",[14,126096,126098],{"id":126097},"_34-文本格式化标签","3.4 文本格式化标签",[19,126100,126101],{},"提供粗体、斜体和下划线等效果",[19,126103,126104,126105,82530,126108,126111],{},"加粗：",[99,126106,126107],{},"\u003Cstrong>...\u003C\u002Fstrong>",[99,126109,126110],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126113,126114,126115,82530,126118,126111],{},"斜体：",[99,126116,126117],{},"\u003Cem>...\u003C\u002Fem>",[99,126119,126120],{},"\u003Ci>...\u003C\u002Fi>",[19,126122,126123,126124,82530,126127,126111],{},"删除线：",[99,126125,126126],{},"\u003Cdel>...\u003C\u002Fdel>",[99,126128,126129],{},"\u003Cs>...\u003C\u002Fs>",[19,126131,126132,126133,82530,126136,126111],{},"下划线：",[99,126134,126135],{},"\u003Cins>...\u003C\u002Fins>",[99,126137,126138],{},"\u003Cu>...\u003C\u002Fu>",[14,126140,126142,126143,18400,126146,102684],{"id":126141},"_35-div和span标签","3.5 ",[99,126144,126145],{},"\u003Cdiv>",[99,126147,126148],{},"\u003Cspan>",[19,126150,126151,101009,126153,126155],{},[99,126152,126145],{},[99,126154,126148],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126157,126158],{},[99,126159,126160],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126162,126163],{},[99,126164,126165],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126167,126168,126169,126171,126172,126174,126175,126178],{},"两者特点：①",[99,126170,126145],{}," 标签用来布局，但一行通常只放一个 ",[99,126173,126145],{},"。可以理解为一个大盒子，独占一行，在 ",[99,126176,126177],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126180,77240,126181,126183,126184,126186],{},[99,126182,126148],{}," 标签也可用于布局，一行可以放多个 ",[99,126185,126148],{},"，可理解为小盒子。",{"title":23,"searchDepth":24,"depth":24,"links":126188},[126189,126190,126191,126192,126193],{"id":126043,"depth":24,"text":126044},{"id":126069,"depth":24,"text":126070},{"id":126082,"depth":24,"text":126083},{"id":126097,"depth":24,"text":126098},{"id":126141,"depth":24,"text":126194},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126035,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126201,"title":126202,"body":126203,"description":27,"extension":28,"meta":126400,"navigation":30,"path":126401,"seo":126402,"stem":126403,"__hash__":126404},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126204,"toc":126392},[126205,126208,126212,126215,126221,126228,126234,126240,126243,126246,126249,126252,126255,126258,126261,126265,126268,126271,126274,126280,126286,126292,126299,126303,126309,126315,126318,126321,126327,126333,126339,126342,126345,126349,126352,126362,126368,126372,126381,126385,126388],[10,126206,126202],{"id":126207},"_4-html图像与链接",[14,126209,126211],{"id":126210},"_41-图像标签","4.1 图像标签",[19,126213,126214],{},"（1）标签",[19,126216,126217,126220],{},[99,126218,126219],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126222,126223,126224,126227],{},"src是",[99,126225,126226],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126229,126230,126231],{},"alt:文本，替换文本。图像不能显示的文字 ",[99,126232,126233],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126235,126236,126237],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[99,126238,126239],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126241,126242],{},"width:像素，设置图像的宽度",[19,126244,126245],{},"height:像素，设置图像的高度",[19,126247,126248],{},"border：像素，设置图像的边框粗细",[19,126250,126251],{},"（2）图像标签属性的注意点：",[19,126253,126254],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126256,126257],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126259,126260],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126262,126264],{"id":126263},"_42-路径注意要点","4.2 路径注意要点：",[19,126266,126267],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126269,126270],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126272,126273],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126275,126276,126277],{},"①同一级路径：图像文件位于HTML文件同一级，如",[99,126278,126279],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126281,126282,126283],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[99,126284,126285],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126287,126288,126289],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[99,126290,126291],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126293,126294,126295,364],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[351,126296,126297],{"href":126297,"rel":126298},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23855],[14,126300,126302],{"id":126301},"_43-超链接标签","4.3 超链接标签",[19,126304,126305,126308],{},[99,126306,126307],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126310,126311,126312],{},"①语法格式：",[99,126313,126314],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126316,126317],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126319,126320],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126322,126323,126324],{},"③链接分类：外部链接：",[99,126325,126326],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126328,126329,126330],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[99,126331,126332],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126334,126335,126336],{},"空链接：如果当时没有确定链接目标时，",[99,126337,126338],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126340,126341],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126343,126344],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126346,126348],{"id":126347},"_44-锚点链接","4.4 锚点链接",[19,126350,126351],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126353,126354,126355,126358,126359],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[99,126356,126357],{},"\u003Ca href=\"#two\">","第二级",[99,126360,126361],{},"\u003C\u002Fa>",[19,126363,126364,126365],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[99,126366,126367],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126369,126371],{"id":126370},"_45-注释标签","4.5 注释标签",[19,126373,126374,126377,126378],{},[99,126375,126376],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[99,126379,126380],{},"ctrl+\u002F",[14,126382,126384],{"id":126383},"_46-特殊字符","4.6 特殊字符",[19,126386,126387],{},"可以实现添加多个空格",[1451,126389],{"style":126390,"src":126391},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":23,"searchDepth":24,"depth":24,"links":126393},[126394,126395,126396,126397,126398,126399],{"id":126210,"depth":24,"text":126211},{"id":126263,"depth":24,"text":126264},{"id":126301,"depth":24,"text":126302},{"id":126347,"depth":24,"text":126348},{"id":126370,"depth":24,"text":126371},{"id":126383,"depth":24,"text":126384},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126202,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126406,"title":126407,"body":126408,"description":27,"extension":28,"meta":126701,"navigation":30,"path":126702,"seo":126703,"stem":126704,"__hash__":126705},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126409,"toc":126692},[126410,126413,126417,126420,126423,126426,126429,126432,126435,126438,126441,126444,126464,126470,126474,126477,126480,126483,126486,126489,126492,126496,126499,126502,126505,126508,126521,126526,126529,126532,126547,126550,126553,126556,126559,126562,126566,126569,126576,126579,126582,126585,126588,126591,126597,126600,126603,126609,126612,126615,126618,126624,126627,126630,126644,126651,126654,126657,126664,126673,126676,126679,126682,126686,126689],[10,126411,126407],{"id":126412},"_5-html表格列表与表单",[14,126414,126416],{"id":126415},"_51-表格标签","5.1 表格标签",[19,126418,126419],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126421,126422],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126424,126425],{},"②表格基本语法：",[1451,126427],{"style":126390,"src":126428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126430,126431],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1451,126433],{"style":126390,"src":126434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126436,126437],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1451,126439],{"style":126390,"src":126440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126442,126443],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126445,126446,126449,126450,126452,126453,126456,126457,126459,126460,126463],{},[99,126447,126448],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[99,126451,126448],{},"内部必须拥有",[99,126454,126455],{},"\u003Ctr>","标签，一般位于第一行，",[99,126458,126448],{},"比",[99,126461,126462],{},"\u003Cth>","范围广",[19,126465,126466,126469],{},[99,126467,126468],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126471,126473],{"id":126472},"_52-合并单元格","5.2 合并单元格",[19,126475,126476],{},"（1）合并单元格方式：",[19,126478,126479],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126481,126482],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126484,126485],{},"（2）目标单元格：",[19,126487,126488],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126490,126491],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126493,126495],{"id":126494},"_53-列表标签","5.3 列表标签",[19,126497,126498],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126500,126501],{},"①无序列表：",[1451,126503],{"style":126390,"src":126504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126506,126507],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126509,126510,126513,126514,126517,126518,126520],{},[99,126511,126512],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[99,126515,126516],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[99,126519,126512],{},"中输入其他标签或文字是不对的",[19,126522,126523,126525],{},[99,126524,126516],{},"之间相当于一个容器，可以容纳所有元素",[19,126527,126528],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126530,126531],{},"在css中去除前边的小圆点采用如下代码:",[93,126533,126537],{"className":126534,"code":126535,"language":126536,"meta":23,"style":23},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[99,126538,126539],{"__ignoreMap":23},[102,126540,126541,126544],{"class":104,"line":105},[102,126542,126543],{"class":51291},"list-style",[102,126545,126546],{"class":112},": none;\n",[19,126548,126549],{},"②有序列表：",[1451,126551],{"style":126390,"src":126552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126554,126555],{},"③自定义列表：",[1451,126557],{"style":126390,"src":126558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1451,126560],{"style":126390,"src":126561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126563,126565],{"id":126564},"_54-表单标签","5.4 表单标签",[19,126567,126568],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126570,126571,126572,126575],{},"（1）表单域：包含单元素的区域，",[99,126573,126574],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1451,126577],{"style":126390,"src":126578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126580,126581],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126583,126584],{},"表单元素提交必须有name属性",[19,126586,126587],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126589,126590],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126592,77217,126593,126596],{},[99,126594,126595],{},"\u003Cinput>","输入表单元素",[1451,126598],{"style":126390,"src":126599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1451,126601],{"style":126390,"src":126602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,126604,126605,126606],{},"单选按钮：",[99,126607,126608],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1451,126610],{"style":126390,"src":126611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,126613,126614],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1451,126616],{"style":126390,"src":126617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,126619,126620,126623],{},[262,126621,126622],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,126625,126626],{},"②select下拉表单元素：可以节约页面控件",[1451,126628],{"style":126390,"src":126629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,126631,126632,13785,126634,126637,126638,126640,126641,126643],{},[262,126633,142],{},[99,126635,126636],{},"\u003Cselect>","中至少包含一对",[99,126639,102705],{},"；在",[99,126642,102705],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,126645,126646,126647,126650],{},"③",[99,126648,126649],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1451,126652],{"style":126390,"src":126653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,126655,126656],{},"3行20列",[14,126658,126660,126661,102684],{"id":126659},"_55-lable标签","5.5 ",[99,126662,126663],{},"\u003Clable>",[19,126665,126666,126667,126669,126670,126672],{},"它不是表单标签，但常常与表单标签搭配使用，",[99,126668,126663],{},"标签用于绑定一个表单标签，当点击",[99,126671,126663],{},"标签内的文本",[19,126674,126675],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1451,126677],{"style":126390,"src":126678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1451,126680],{"style":126390,"src":126681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126683,126685],{"id":126684},"_56-实例","5.6 实例",[1451,126687],{"style":126390,"src":126688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5116,126690,126691],{},"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":23,"searchDepth":24,"depth":24,"links":126693},[126694,126695,126696,126697,126698,126700],{"id":126415,"depth":24,"text":126416},{"id":126472,"depth":24,"text":126473},{"id":126494,"depth":24,"text":126495},{"id":126564,"depth":24,"text":126565},{"id":126659,"depth":24,"text":126699},"5.5 \u003Clable>标签",{"id":126684,"depth":24,"text":126685},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126407,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126707,"title":126708,"body":126709,"description":27,"extension":28,"meta":127258,"navigation":30,"path":127259,"seo":127260,"stem":127261,"__hash__":127262},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126710,"toc":127233},[126711,126714,126718,126721,126724,126728,126731,126734,126737,126740,126743,126746,126749,126753,126756,126760,126763,126766,126769,126773,126776,126779,126782,126788,126791,126794,126797,126800,126803,126806,126809,126842,126846,126849,126852,126855,126859,126862,126865,126868,126871,126874,126878,126881,126884,126887,126891,126894,126898,126901,126905,126908,126913,126917,126920,126924,126927,126930,126933,126936,126963,126966,126970,126973,126976,126981,126984,126987,126991,126994,126999,127002,127005,127008,127012,127015,127018,127021,127025,127028,127031,127034,127038,127042,127045,127085,127088,127092,127099,127102,127106,127109,127155,127159,127162,127165,127168,127196,127200,127203,127230],[10,126712,126708],{"id":126713},"_6-css语法与文本样式",[14,126715,126717],{"id":126716},"_61-css语法规范","6.1 css语法规范",[19,126719,126720],{},"由两部分组成，选择器及一条或多条声明",[1451,126722],{"style":126390,"src":126723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126725,126726],{},[262,126727,142],{},[19,126729,126730],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126732,126733],{},"②属性与属性值以“键值对”的形式出现",[19,126735,126736],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126738,126739],{},"④属性和属性值之间用英文“;”分开",[1451,126741],{"style":126390,"src":126742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1451,126744],{"style":126390,"src":126745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1451,126747],{"style":126390,"src":126748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126750,126752],{"id":126751},"_62-css选择器","6.2 css选择器",[19,126754,126755],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[73,126757,126759],{"id":126758},"_621-标签选择器","6.2.1 标签选择器",[19,126761,126762],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126764,126765],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1451,126767],{"style":126390,"src":126768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[73,126770,126772],{"id":126771},"_622-类选择器","6.2.2 类选择器",[19,126774,126775],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126777,126778],{},"②样例",[1451,126780],{"style":126390,"src":126781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126783,126784,126785,126787],{},"③ ",[262,126786,126622],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,126789,126790],{},"可以理解为给这个标签起了个名字，来表示；",[19,126792,126793],{},"长名称或词组可以使用横线来为选择器命名；",[19,126795,126796],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,126798,126799],{},"命名要有意义；",[1451,126801],{"style":126390,"src":126802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,126804,126805],{},"类选择器也可以指定特殊的元素p.center{}",[19,126807,126808],{},"p.center和.center都对",[93,126810,126812],{"className":126534,"code":126811,"language":126536,"meta":23,"style":23},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[99,126813,126814,126819,126828,126838],{"__ignoreMap":23},[102,126815,126816],{"class":104,"line":105},[102,126817,126818],{"class":171},"\u002F* 类选择器指定特殊元素 *\u002F\n",[102,126820,126821,126823,126826],{"class":104,"line":24},[102,126822,19],{"class":51291},[102,126824,126825],{"class":1952},".center",[102,126827,15562],{"class":112},[102,126829,126830,126832,126834,126836],{"class":104,"line":1168},[102,126831,70517],{"class":161},[102,126833,51428],{"class":112},[102,126835,51583],{"class":161},[102,126837,1279],{"class":112},[102,126839,126840],{"class":104,"line":1183},[102,126841,1554],{"class":112},[73,126843,126845],{"id":126844},"_623-多类名使用","6.2.3 多类名使用",[19,126847,126848],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1451,126850],{"style":126390,"src":126851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,126853,126854],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[73,126856,126858],{"id":126857},"_624-id选择器","6.2.4 id选择器",[19,126860,126861],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,126863,126864],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1451,126866],{"style":126390,"src":126867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,126869,126870],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,126872,126873],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[73,126875,126877],{"id":126876},"_625-通配符选择器","6.2.5 通配符选择器",[19,126879,126880],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,126882,126883],{},"* {",[19,126885,126886],{},"color=\"red\"}",[73,126888,126890],{"id":126889},"_626-总结","6.2.6 总结",[1451,126892],{"style":126390,"src":126893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,126895,126897],{"id":126896},"_63-css字体属性","6.3 css字体属性",[19,126899,126900],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[73,126902,126904],{"id":126903},"_631-字体系列","6.3.1 字体系列",[19,126906,126907],{},"font-family: '宋体';",[19,126909,126910,126912],{},[262,126911,142],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[73,126914,126916],{"id":126915},"_632-字体大小","6.3.2 字体大小",[19,126918,126919],{},"font-size: 20px",[19,126921,126922,26464],{},[262,126923,126622],{},[19,126925,126926],{},"①px（像素）大小是网页的最常用单位",[19,126928,126929],{},"②谷歌浏览器默认为16px",[19,126931,126932],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,126934,126935],{},"④可以给body指定整个页面的大小：会自动引用",[93,126937,126939],{"className":126534,"code":126938,"language":126536,"meta":23,"style":23},"body {\n  font-size: 16px;\n}\n",[99,126940,126941,126947,126959],{"__ignoreMap":23},[102,126942,126943,126945],{"class":104,"line":105},[102,126944,51791],{"class":51291},[102,126946,15562],{"class":112},[102,126948,126949,126951,126953,126955,126957],{"class":104,"line":24},[102,126950,70617],{"class":161},[102,126952,51428],{"class":112},[102,126954,714],{"class":161},[102,126956,51483],{"class":108},[102,126958,1279],{"class":112},[102,126960,126961],{"class":104,"line":1168},[102,126962,1554],{"class":112},[19,126964,126965],{},"⑤标题标签比较特殊，需要单独指定大小",[73,126967,126969],{"id":126968},"_633-字体粗细","6.3.3 字体粗细",[19,126971,126972],{},"font-weight: bold;",[19,126974,126975],{},"font-weight: 100；",[19,126977,126978,126980],{},[262,126979,142],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,126982,126983],{},"font-weight= 400;",[19,126985,126986],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[73,126988,126990],{"id":126989},"_634-文字样式","6.3.4 文字样式",[19,126992,126993],{},"font-style: normal；",[19,126995,126996,26464],{},[262,126997,126998],{},"属性值",[19,127000,127001],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127003,127004],{},"②italic：浏览器会显示斜体的字体样式",[1451,127006],{"style":126390,"src":127007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[73,127009,127011],{"id":127010},"_635-字体符合属性","6.3.5 字体符合属性",[1451,127013],{"style":126390,"src":127014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1451,127016],{"style":126390,"src":127017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127019,127020],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127022,127023,26464],{},[262,127024,126622],{},[19,127026,127027],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127029,127030],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127032,127033],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127035,127037],{"id":127036},"_64-css-test文本属性","6.4 css test文本属性",[73,127039,127041],{"id":127040},"_641-文本颜色","6.4.1 文本颜色",[19,127043,127044],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[93,127046,127048],{"className":126534,"code":127047,"language":126536,"meta":23,"style":23},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[99,127049,127050,127055,127061,127071,127076,127081],{"__ignoreMap":23},[102,127051,127052],{"class":104,"line":105},[102,127053,127054],{"class":171},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[102,127056,127057,127059],{"class":104,"line":24},[102,127058,19],{"class":51291},[102,127060,15562],{"class":112},[102,127062,127063,127065,127067,127069],{"class":104,"line":1168},[102,127064,70896],{"class":161},[102,127066,51428],{"class":112},[102,127068,57412],{"class":161},[102,127070,1279],{"class":112},[102,127072,127073],{"class":104,"line":1183},[102,127074,127075],{"class":171},"  \u002F* color: #ff0000; *\u002F\n",[102,127077,127078],{"class":104,"line":1189},[102,127079,127080],{"class":171},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[102,127082,127083],{"class":104,"line":1203},[102,127084,1554],{"class":112},[1451,127086],{"style":126390,"src":127087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[73,127089,127091],{"id":127090},"_642-对齐文本","6.4.2 对齐文本",[19,127093,127094,127095,127098],{},"text-align属于用于设置元素内文本内容的 ",[262,127096,127097],{},"水平对齐"," 方式",[19,127100,127101],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[73,127103,127105],{"id":127104},"_643-装饰文本","6.4.3 装饰文本",[19,127107,127108],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[93,127110,127112],{"className":126534,"code":127111,"language":126536,"meta":23,"style":23},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[99,127113,127114,127120,127130,127134,127140,127151],{"__ignoreMap":23},[102,127115,127116,127118],{"class":104,"line":105},[102,127117,351],{"class":51291},[102,127119,15562],{"class":112},[102,127121,127122,127124,127126,127128],{"class":104,"line":24},[102,127123,70493],{"class":161},[102,127125,51428],{"class":112},[102,127127,54728],{"class":161},[102,127129,1279],{"class":112},[102,127131,127132],{"class":104,"line":1168},[102,127133,1554],{"class":112},[102,127135,127136,127138],{"class":104,"line":1183},[102,127137,19],{"class":51291},[102,127139,15562],{"class":112},[102,127141,127142,127144,127146,127149],{"class":104,"line":1189},[102,127143,70493],{"class":161},[102,127145,51428],{"class":112},[102,127147,127148],{"class":161},"underline",[102,127150,1279],{"class":112},[102,127152,127153],{"class":104,"line":1203},[102,127154,1554],{"class":112},[73,127156,127158],{"id":127157},"_644-文本缩进","6.4.4 文本缩进",[19,127160,127161],{},"实现文本的第一行首行缩进自己指定的距离",[19,127163,127164],{},"20px往右边走；-20px往左边走",[19,127166,127167],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[93,127169,127171],{"className":126534,"code":127170,"language":126536,"meta":23,"style":23},"p {\n  text-indent: 2em;\n}\n",[99,127172,127173,127179,127192],{"__ignoreMap":23},[102,127174,127175,127177],{"class":104,"line":105},[102,127176,19],{"class":51291},[102,127178,15562],{"class":112},[102,127180,127181,127184,127186,127188,127190],{"class":104,"line":24},[102,127182,127183],{"class":161},"  text-indent",[102,127185,51428],{"class":112},[102,127187,190],{"class":161},[102,127189,23543],{"class":108},[102,127191,1279],{"class":112},[102,127193,127194],{"class":104,"line":1168},[102,127195,1554],{"class":112},[73,127197,127199],{"id":127198},"_645-行间距","6.4.5 行间距",[19,127201,127202],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[93,127204,127206],{"className":126534,"code":127205,"language":126536,"meta":23,"style":23},"p {\n  line-height: 1.6;\n}\n",[99,127207,127208,127214,127226],{"__ignoreMap":23},[102,127209,127210,127212],{"class":104,"line":105},[102,127211,19],{"class":51291},[102,127213,15562],{"class":112},[102,127215,127216,127219,127221,127224],{"class":104,"line":24},[102,127217,127218],{"class":161},"  line-height",[102,127220,51428],{"class":112},[102,127222,127223],{"class":161},"1.6",[102,127225,1279],{"class":112},[102,127227,127228],{"class":104,"line":1168},[102,127229,1554],{"class":112},[5116,127231,127232],{},"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":23,"searchDepth":24,"depth":24,"links":127234},[127235,127236,127244,127251],{"id":126716,"depth":24,"text":126717},{"id":126751,"depth":24,"text":126752,"children":127237},[127238,127239,127240,127241,127242,127243],{"id":126758,"depth":1168,"text":126759},{"id":126771,"depth":1168,"text":126772},{"id":126844,"depth":1168,"text":126845},{"id":126857,"depth":1168,"text":126858},{"id":126876,"depth":1168,"text":126877},{"id":126889,"depth":1168,"text":126890},{"id":126896,"depth":24,"text":126897,"children":127245},[127246,127247,127248,127249,127250],{"id":126903,"depth":1168,"text":126904},{"id":126915,"depth":1168,"text":126916},{"id":126968,"depth":1168,"text":126969},{"id":126989,"depth":1168,"text":126990},{"id":127010,"depth":1168,"text":127011},{"id":127036,"depth":24,"text":127037,"children":127252},[127253,127254,127255,127256,127257],{"id":127040,"depth":1168,"text":127041},{"id":127090,"depth":1168,"text":127091},{"id":127104,"depth":1168,"text":127105},{"id":127157,"depth":1168,"text":127158},{"id":127198,"depth":1168,"text":127199},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126708,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127264,"title":127265,"body":127266,"description":27,"extension":28,"meta":127915,"navigation":30,"path":127916,"seo":127917,"stem":127918,"__hash__":127919},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127267,"toc":127896},[127268,127271,127275,127279,127339,127343,127353,127356,127359,127363,127388,127392,127395,127398,127401,127404,127407,127411,127414,127417,127459,127462,127488,127494,127497,127501,127505,127511,127514,127517,127520,127523,127526,127529,127574,127578,127581,127584,127588,127592,127621,127624,127629,127632,127635,127638,127641,127645,127649,127652,127654,127657,127661,127664,127668,127671,127674,127677,127681,127685,127691,127701,127704,127707,127710,127713,127716,127839,127847,127855,127893],[10,127269,127265],{"id":127270},"_7-css引入方式与选择器进阶",[14,127272,127274],{"id":127273},"_71-css引入方式","7.1 css引入方式",[73,127276,127278],{"id":127277},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[93,127280,127284],{"className":127281,"code":127282,"language":127283,"meta":23,"style":23},"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",[99,127285,127286,127294,127301,127313,127326,127331],{"__ignoreMap":23},[102,127287,127288,127290,127292],{"class":104,"line":105},[102,127289,1023],{"class":112},[102,127291,5116],{"class":51291},[102,127293,51298],{"class":112},[102,127295,127296,127299],{"class":104,"line":24},[102,127297,127298],{"class":51291},"  h1",[102,127300,15562],{"class":112},[102,127302,127303,127306,127308,127311],{"class":104,"line":1168},[102,127304,127305],{"class":161},"    color",[102,127307,51428],{"class":112},[102,127309,127310],{"class":161},"blue",[102,127312,1279],{"class":112},[102,127314,127315,127318,127320,127322,127324],{"class":104,"line":1183},[102,127316,127317],{"class":161},"    font-size",[102,127319,51428],{"class":112},[102,127321,913],{"class":161},[102,127323,51483],{"class":108},[102,127325,1279],{"class":112},[102,127327,127328],{"class":104,"line":1189},[102,127329,127330],{"class":112},"  }\n",[102,127332,127333,127335,127337],{"class":104,"line":1203},[102,127334,51776],{"class":112},[102,127336,5116],{"class":51291},[102,127338,51298],{"class":112},[19,127340,127341,26464],{},[262,127342,126622],{},[19,127344,77217,127345,127348,127349,127352],{},[99,127346,127347],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[99,127350,127351],{},"\u003Chead>","标签中",[19,127354,127355],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127357,127358],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[73,127360,127362],{"id":127361},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[93,127364,127366],{"className":127281,"code":127365,"language":127283,"meta":23,"style":23},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[99,127367,127368],{"__ignoreMap":23},[102,127369,127370,127372,127374,127376,127378,127381,127384,127386],{"class":104,"line":105},[102,127371,1023],{"class":112},[102,127373,19],{"class":51291},[102,127375,62617],{"class":1952},[102,127377,158],{"class":112},[102,127379,127380],{"class":217},"\"color: red; font-size: 16px;\"",[102,127382,127383],{"class":112},">这是一个段落\u003C\u002F",[102,127385,19],{"class":51291},[102,127387,51298],{"class":112},[19,127389,127390,26464],{},[262,127391,126622],{},[19,127393,127394],{},"①style其实就是标签的属性",[19,127396,127397],{},"②在双引号中间，写法要符合css规范",[19,127399,127400],{},"③可以控制当前的标签设置样式",[19,127402,127403],{},"④书写繁琐，简单时才用",[19,127405,127406],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[73,127408,127410],{"id":127409},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127412,127413],{},"使用最多，单独建一个css文件，然后html引用",[19,127415,127416],{},"①css文件部分： style.css",[93,127418,127420],{"className":126534,"code":127419,"language":126536,"meta":23,"style":23},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[99,127421,127422,127427,127433,127443,127455],{"__ignoreMap":23},[102,127423,127424],{"class":104,"line":105},[102,127425,127426],{"class":171},"\u002F* style.css *\u002F\n",[102,127428,127429,127431],{"class":104,"line":24},[102,127430,10],{"class":51291},[102,127432,15562],{"class":112},[102,127434,127435,127437,127439,127441],{"class":104,"line":1168},[102,127436,70896],{"class":161},[102,127438,51428],{"class":112},[102,127440,127310],{"class":161},[102,127442,1279],{"class":112},[102,127444,127445,127447,127449,127451,127453],{"class":104,"line":1183},[102,127446,70617],{"class":161},[102,127448,51428],{"class":112},[102,127450,913],{"class":161},[102,127452,51483],{"class":108},[102,127454,1279],{"class":112},[102,127456,127457],{"class":104,"line":1189},[102,127458,1554],{"class":112},[19,127460,127461],{},"②html部分",[93,127463,127465],{"className":127281,"code":127464,"language":127283,"meta":23,"style":23},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[99,127466,127467],{"__ignoreMap":23},[102,127468,127469,127471,127473,127475,127477,127479,127481,127483,127486],{"class":104,"line":105},[102,127470,1023],{"class":112},[102,127472,68996],{"class":51291},[102,127474,68999],{"class":1952},[102,127476,158],{"class":112},[102,127478,69004],{"class":217},[102,127480,61048],{"class":1952},[102,127482,158],{"class":112},[102,127484,127485],{"class":217},"\"style.css\"",[102,127487,51298],{"class":112},[19,127489,127490,127493],{},[99,127491,127492],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127495,127496],{},"ctrl+0回到页面原来大小",[14,127498,127500],{"id":127499},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[73,127502,127504],{"id":127503},"_721-快速生成html","7.2.1 快速生成html",[19,127506,127507,127508],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[99,127509,127510],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127512,127513],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127515,127516],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127518,127519],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127521,127522],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127524,127525],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127527,127528],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[93,127530,127532],{"className":127281,"code":127531,"language":127283,"meta":23,"style":23},"\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",[99,127533,127534,127539,127544,127549,127554,127559,127564,127569],{"__ignoreMap":23},[102,127535,127536],{"class":104,"line":105},[102,127537,127538],{"class":171},"\u003C!-- Emmet 语法示例 -->\n",[102,127540,127541],{"class":104,"line":24},[102,127542,127543],{"class":171},"\u003C!-- div*3        → 生成3个div -->\n",[102,127545,127546],{"class":104,"line":1168},[102,127547,127548],{"class":171},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[102,127550,127551],{"class":104,"line":1183},[102,127552,127553],{"class":171},"\u003C!-- div+p        → 兄弟div和p -->\n",[102,127555,127556],{"class":104,"line":1189},[102,127557,127558],{"class":171},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[102,127560,127561],{"class":104,"line":1203},[102,127562,127563],{"class":171},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[102,127565,127566],{"class":104,"line":1209},[102,127567,127568],{"class":171},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[102,127570,127571],{"class":104,"line":1300},[102,127572,127573],{"class":171},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[73,127575,127577],{"id":127576},"_722-快速生成css","7.2.2 快速生成css",[19,127579,127580],{},"简写开头",[19,127582,127583],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127585,127587],{"id":127586},"_73-css复合选择器","7.3 css复合选择器",[73,127589,127591],{"id":127590},"_731-后代选择器","7.3.1 后代选择器",[93,127593,127595],{"className":126534,"code":127594,"language":126536,"meta":23,"style":23},".parent .child {\n  color: blue;\n}\n",[99,127596,127597,127607,127617],{"__ignoreMap":23},[102,127598,127599,127602,127605],{"class":104,"line":105},[102,127600,127601],{"class":1952},".parent",[102,127603,127604],{"class":1952}," .child",[102,127606,15562],{"class":112},[102,127608,127609,127611,127613,127615],{"class":104,"line":24},[102,127610,70896],{"class":161},[102,127612,51428],{"class":112},[102,127614,127310],{"class":161},[102,127616,1279],{"class":112},[102,127618,127619],{"class":104,"line":1168},[102,127620,1554],{"class":112},[19,127622,127623],{},"元素1 元素2 {样式声明}",[19,127625,127626],{},[262,127627,127628],{},"注意点:",[19,127630,127631],{},"①元素1和元素2中间用空格隔开",[19,127633,127634],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127636,127637],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127639,127640],{},"④元素1和元素2可以是任意基础选择器",[73,127642,127644],{"id":127643},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127646,127647],{},[262,127648,127628],{},[19,127650,127651],{},"①元素1和元素2中间用大于号隔开",[19,127653,127634],{},[19,127655,127656],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[73,127658,127660],{"id":127659},"_733-并集选择器","7.3.3 并集选择器",[19,127662,127663],{},"元素1，元素2 {样式声明}",[19,127665,127666],{},[262,127667,127628],{},[19,127669,127670],{},"①元素1和元素2中间用逗号隔开",[19,127672,127673],{},"②逗号可以理解为和的意思",[19,127675,127676],{},"③并集选择器通常用于集体声明",[73,127678,127680],{"id":127679},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127682,127683],{},[262,127684,127628],{},[19,127686,127687,127688,127690],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68996,127689],{},"－:visited－:hover－:active。",[19,127692,127693,127694,127697,127698,25731],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127695,127696],"hover",{}," 、 ",[127699,127700],"first-child",{},[19,127702,127703],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127705,127706],{},"link对没访问的进行设置",[19,127708,127709],{},"vistied对已访问的进行改变",[19,127711,127712],{},"hover鼠标经过就会变",[19,127714,127715],{},"active常按(点)就会变",[93,127717,127719],{"className":126534,"code":127718,"language":126536,"meta":23,"style":23},"\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",[99,127720,127721,127726,127735,127745,127755,127759,127768,127779,127783,127791,127801,127811,127815,127824,127835],{"__ignoreMap":23},[102,127722,127723],{"class":104,"line":105},[102,127724,127725],{"class":171},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[102,127727,127728,127730,127733],{"class":104,"line":24},[102,127729,351],{"class":51291},[102,127731,127732],{"class":1952},":link",[102,127734,15562],{"class":112},[102,127736,127737,127739,127741,127743],{"class":104,"line":1168},[102,127738,70896],{"class":161},[102,127740,51428],{"class":112},[102,127742,62360],{"class":161},[102,127744,1279],{"class":112},[102,127746,127747,127749,127751,127753],{"class":104,"line":1183},[102,127748,70493],{"class":161},[102,127750,51428],{"class":112},[102,127752,54728],{"class":161},[102,127754,1279],{"class":112},[102,127756,127757],{"class":104,"line":1189},[102,127758,1554],{"class":112},[102,127760,127761,127763,127766],{"class":104,"line":1203},[102,127762,351],{"class":51291},[102,127764,127765],{"class":1952},":visited",[102,127767,15562],{"class":112},[102,127769,127770,127772,127774,127777],{"class":104,"line":1209},[102,127771,70896],{"class":161},[102,127773,51428],{"class":112},[102,127775,127776],{"class":161},"purple",[102,127778,1279],{"class":112},[102,127780,127781],{"class":104,"line":1300},[102,127782,1554],{"class":112},[102,127784,127785,127787,127789],{"class":104,"line":1306},[102,127786,351],{"class":51291},[102,127788,60931],{"class":1952},[102,127790,15562],{"class":112},[102,127792,127793,127795,127797,127799],{"class":104,"line":1318},[102,127794,70896],{"class":161},[102,127796,51428],{"class":112},[102,127798,54880],{"class":161},[102,127800,1279],{"class":112},[102,127802,127803,127805,127807,127809],{"class":104,"line":1601},[102,127804,70493],{"class":161},[102,127806,51428],{"class":112},[102,127808,127148],{"class":161},[102,127810,1279],{"class":112},[102,127812,127813],{"class":104,"line":1606},[102,127814,1554],{"class":112},[102,127816,127817,127819,127822],{"class":104,"line":1612},[102,127818,351],{"class":51291},[102,127820,127821],{"class":1952},":active",[102,127823,15562],{"class":112},[102,127825,127826,127828,127830,127833],{"class":104,"line":1617},[102,127827,70896],{"class":161},[102,127829,51428],{"class":112},[102,127831,127832],{"class":161},"green",[102,127834,1279],{"class":112},[102,127836,127837],{"class":104,"line":1631},[102,127838,1554],{"class":112},[73,127840,127842,127843,127846],{"id":127841},"_735-伪类选择器","7.3.5 ",[127844,127845],"focus",{},"伪类选择器",[19,127848,127849,127851,127852,127854],{},[127844,127850],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[99,127853,126595],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[93,127856,127858],{"className":126534,"code":127857,"language":126536,"meta":23,"style":23},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[99,127859,127860,127868,127879,127889],{"__ignoreMap":23},[102,127861,127862,127864,127866],{"class":104,"line":105},[102,127863,53812],{"class":51291},[102,127865,61891],{"class":1952},[102,127867,15562],{"class":112},[102,127869,127870,127873,127875,127877],{"class":104,"line":24},[102,127871,127872],{"class":161},"  border-color",[102,127874,51428],{"class":112},[102,127876,54880],{"class":161},[102,127878,1279],{"class":112},[102,127880,127881,127883,127885,127887],{"class":104,"line":1168},[102,127882,70789],{"class":161},[102,127884,51428],{"class":112},[102,127886,54728],{"class":161},[102,127888,1279],{"class":112},[102,127890,127891],{"class":104,"line":1183},[102,127892,1554],{"class":112},[5116,127894,127895],{},"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":23,"searchDepth":24,"depth":24,"links":127897},[127898,127903,127907],{"id":127273,"depth":24,"text":127274,"children":127899},[127900,127901,127902],{"id":127277,"depth":1168,"text":127278},{"id":127361,"depth":1168,"text":127362},{"id":127409,"depth":1168,"text":127410},{"id":127499,"depth":24,"text":127500,"children":127904},[127905,127906],{"id":127503,"depth":1168,"text":127504},{"id":127576,"depth":1168,"text":127577},{"id":127586,"depth":24,"text":127587,"children":127908},[127909,127910,127911,127912,127913],{"id":127590,"depth":1168,"text":127591},{"id":127643,"depth":1168,"text":127644},{"id":127659,"depth":1168,"text":127660},{"id":127679,"depth":1168,"text":127680},{"id":127841,"depth":1168,"text":127914},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127265,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127921,"title":127922,"body":127923,"description":27,"extension":28,"meta":129846,"navigation":30,"path":129847,"seo":129848,"stem":129849,"__hash__":129850},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127924,"toc":129820},[127925,127928,127932,127941,127945,127971,127976,127979,127982,127985,127988,127992,127995,128005,128013,128017,128052,128057,128060,128063,128066,128069,128073,128076,128085,128089,128102,128107,128110,128113,128116,128120,128123,128127,128130,128185,128188,128219,128222,128276,128280,128283,128449,128572,128575,128578,128581,128584,128588,128591,128595,128598,128601,128605,128608,128639,128666,128694,128697,128701,128727,128770,128774,128868,128871,128898,128901,128904,128907,128910,128913,128916,128919,128922,128925,128929,128986,129013,129017,129065,129069,129110,129112,129115,129118,129121,129124,129128,129220,129223,129226,129229,129233,129356,129557,129561,129565,129568,129571,129574,129578,129581,129584,129609,129612,129615,129618,129621,129624,129628,129636,129698,129701,129759,129762,129765,129768,129771,129774,129777,129780,129817],[10,127926,127922],{"id":127927},"_8-css显示模式与背景特性",[14,127929,127931],{"id":127930},"_81-css元素显示模式","8.1 css元素显示模式",[19,127933,127934,127935,127937,127938,127940],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[99,127936,126145],{},"自己占一行，比如一行可以放多个",[99,127939,126148],{},"，HTML 元素一般分为块元素和行内元素两种类型",[73,127942,127944],{"id":127943},"_811-块元素","8.1.1 块元素",[19,127946,127947,127948,127950,127951,325,127954,325,127956,325,127958,325,127961,325,127964,127967,127968,127970],{},"常见的块元素有",[99,127949,126049],{},"~",[99,127952,127953],{},"\u003Ch6>",[99,127955,126075],{},[99,127957,126145],{},[99,127959,127960],{},"\u003Cul>",[99,127962,127963],{},"\u003Col>",[99,127965,127966],{},"\u003Cli>","等，其中 ",[99,127969,126145],{}," 标签是最典型的块元素",[19,127972,127973],{},[262,127974,127975],{},"块级元素的特点：",[19,127977,127978],{},"① 比较霸道，自己独占一行。",[19,127980,127981],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,127983,127984],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,127986,127987],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,127989,127990],{},[262,127991,142],{},[19,127993,127994],{},"①文字类的元素内不能使用块级元素",[19,127996,77240,127997,127999,128000,128002,128003],{},[99,127998,126075],{}," 标签主要用于存放文字，因此 ",[99,128001,126075],{}," 里面不能放块级元素，特别是不能放",[99,128004,126145],{},[19,128006,128007,128008,127950,128010,128012],{},"⑥同理， ",[99,128009,126049],{},[99,128011,127953],{},"等都是文字类块级标签，里面也不能放其他块级元素",[73,128014,128016],{"id":128015},"_812-行内元素","8.1.2 行内元素",[19,128018,128019,128020,325,128022,325,128025,325,128028,325,128031,325,128034,325,128037,325,128040,325,128043,325,128046,128048,128049,128051],{},"常见的行内元素有 ",[99,128021,126307],{},[99,128023,128024],{},"\u003Cstrong>",[99,128026,128027],{},"\u003Cb>",[99,128029,128030],{},"\u003Cem>",[99,128032,128033],{},"\u003Ci>",[99,128035,128036],{},"\u003Cdel>",[99,128038,128039],{},"\u003Cs>",[99,128041,128042],{},"\u003Cins>",[99,128044,128045],{},"\u003Cu>",[99,128047,126148],{}," 等，其中 ",[99,128050,126148],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128053,128054],{},[262,128055,128056],{},"特点：",[19,128058,128059],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128061,128062],{},"② 高、宽直接设置是无效的。",[19,128064,128065],{},"③ 默认宽度就是它本身内容的宽度。",[19,128067,128068],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128070,128071],{},[262,128072,142],{},[19,128074,128075],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128077,128078,128079,128081,128082,128084],{},"②特殊情况链接 ",[99,128080,126307],{}," 里面可以放块级元素，但是给 ",[99,128083,126307],{}," 转换一下块级模式最安全",[73,128086,128088],{"id":128087},"_813-行内块元素","8.1.3 行内块元素",[19,128090,128091,128092,325,128095,325,128098,128101],{},"在行内元素中有几个特殊的标签 —— ",[99,128093,128094],{},"\u003Cimg \u002F>",[99,128096,128097],{},"\u003Cinput \u002F>",[99,128099,128100],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128103,128104],{},[262,128105,128106],{},"行内块元素的特点：",[19,128108,128109],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128111,128112],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128114,128115],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[73,128117,128119],{"id":128118},"_814-总结","8.1.4 总结",[1451,128121],{"style":126390,"src":128122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[73,128124,128126],{"id":128125},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128128,128129],{},"①转换为块元素：display:block;",[93,128131,128133],{"className":126534,"code":128132,"language":126536,"meta":23,"style":23},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[99,128134,128135,128140,128146,128157,128169,128181],{"__ignoreMap":23},[102,128136,128137],{"class":104,"line":105},[102,128138,128139],{"class":171},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[102,128141,128142,128144],{"class":104,"line":24},[102,128143,351],{"class":51291},[102,128145,15562],{"class":112},[102,128147,128148,128151,128153,128155],{"class":104,"line":1168},[102,128149,128150],{"class":161},"  display",[102,128152,51428],{"class":112},[102,128154,60860],{"class":161},[102,128156,1279],{"class":112},[102,128158,128159,128161,128163,128165,128167],{"class":104,"line":1183},[102,128160,70559],{"class":161},[102,128162,51428],{"class":112},[102,128164,424],{"class":161},[102,128166,51483],{"class":108},[102,128168,1279],{"class":112},[102,128170,128171,128173,128175,128177,128179],{"class":104,"line":1189},[102,128172,70779],{"class":161},[102,128174,51428],{"class":112},[102,128176,514],{"class":161},[102,128178,51483],{"class":108},[102,128180,1279],{"class":112},[102,128182,128183],{"class":104,"line":1203},[102,128184,1554],{"class":112},[19,128186,128187],{},"②转换为行内元素：display:inline;",[93,128189,128191],{"className":126534,"code":128190,"language":126536,"meta":23,"style":23},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[99,128192,128193,128198,128204,128215],{"__ignoreMap":23},[102,128194,128195],{"class":104,"line":105},[102,128196,128197],{"class":171},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[102,128199,128200,128202],{"class":104,"line":24},[102,128201,51602],{"class":51291},[102,128203,15562],{"class":112},[102,128205,128206,128208,128210,128213],{"class":104,"line":1168},[102,128207,128150],{"class":161},[102,128209,51428],{"class":112},[102,128211,128212],{"class":161},"inline",[102,128214,1279],{"class":112},[102,128216,128217],{"class":104,"line":1183},[102,128218,1554],{"class":112},[19,128220,128221],{},"③转换为行内块：display:inline-block;",[93,128223,128225],{"className":126534,"code":128224,"language":126536,"meta":23,"style":23},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[99,128226,128227,128232,128238,128248,128260,128272],{"__ignoreMap":23},[102,128228,128229],{"class":104,"line":105},[102,128230,128231],{"class":171},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[102,128233,128234,128236],{"class":104,"line":24},[102,128235,102],{"class":51291},[102,128237,15562],{"class":112},[102,128239,128240,128242,128244,128246],{"class":104,"line":1168},[102,128241,128150],{"class":161},[102,128243,51428],{"class":112},[102,128245,72374],{"class":161},[102,128247,1279],{"class":112},[102,128249,128250,128252,128254,128256,128258],{"class":104,"line":1183},[102,128251,70559],{"class":161},[102,128253,51428],{"class":112},[102,128255,725],{"class":161},[102,128257,51483],{"class":108},[102,128259,1279],{"class":112},[102,128261,128262,128264,128266,128268,128270],{"class":104,"line":1189},[102,128263,70779],{"class":161},[102,128265,51428],{"class":112},[102,128267,1064],{"class":161},[102,128269,51483],{"class":108},[102,128271,1279],{"class":112},[102,128273,128274],{"class":104,"line":1203},[102,128275,1554],{"class":112},[73,128277,128279],{"id":128278},"_816-小米侧边栏","8.1.6 小米侧边栏",[1451,128281],{"style":126390,"src":128282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[93,128284,128286],{"className":127281,"code":128285,"language":127283,"meta":23,"style":23},"\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",[99,128287,128288,128293,128308,128327,128346,128365,128384,128403,128422,128441],{"__ignoreMap":23},[102,128289,128290],{"class":104,"line":105},[102,128291,128292],{"class":171},"\u003C!-- 小米侧边栏案例 -->\n",[102,128294,128295,128297,128299,128301,128303,128306],{"class":104,"line":24},[102,128296,1023],{"class":112},[102,128298,51602],{"class":51291},[102,128300,53477],{"class":1952},[102,128302,158],{"class":112},[102,128304,128305],{"class":217},"\"sidebar\"",[102,128307,51298],{"class":112},[102,128309,128310,128312,128314,128316,128318,128320,128323,128325],{"class":104,"line":1168},[102,128311,52135],{"class":112},[102,128313,351],{"class":51291},[102,128315,61048],{"class":1952},[102,128317,158],{"class":112},[102,128319,61053],{"class":217},[102,128321,128322],{"class":112},">手机 电话卡\u003C\u002F",[102,128324,351],{"class":51291},[102,128326,51298],{"class":112},[102,128328,128329,128331,128333,128335,128337,128339,128342,128344],{"class":104,"line":1183},[102,128330,52135],{"class":112},[102,128332,351],{"class":51291},[102,128334,61048],{"class":1952},[102,128336,158],{"class":112},[102,128338,61053],{"class":217},[102,128340,128341],{"class":112},">电视 盒子\u003C\u002F",[102,128343,351],{"class":51291},[102,128345,51298],{"class":112},[102,128347,128348,128350,128352,128354,128356,128358,128361,128363],{"class":104,"line":1189},[102,128349,52135],{"class":112},[102,128351,351],{"class":51291},[102,128353,61048],{"class":1952},[102,128355,158],{"class":112},[102,128357,61053],{"class":217},[102,128359,128360],{"class":112},">笔记本 平板\u003C\u002F",[102,128362,351],{"class":51291},[102,128364,51298],{"class":112},[102,128366,128367,128369,128371,128373,128375,128377,128380,128382],{"class":104,"line":1203},[102,128368,52135],{"class":112},[102,128370,351],{"class":51291},[102,128372,61048],{"class":1952},[102,128374,158],{"class":112},[102,128376,61053],{"class":217},[102,128378,128379],{"class":112},">出行 穿戴\u003C\u002F",[102,128381,351],{"class":51291},[102,128383,51298],{"class":112},[102,128385,128386,128388,128390,128392,128394,128396,128399,128401],{"class":104,"line":1209},[102,128387,52135],{"class":112},[102,128389,351],{"class":51291},[102,128391,61048],{"class":1952},[102,128393,158],{"class":112},[102,128395,61053],{"class":217},[102,128397,128398],{"class":112},">智能 路由器\u003C\u002F",[102,128400,351],{"class":51291},[102,128402,51298],{"class":112},[102,128404,128405,128407,128409,128411,128413,128415,128418,128420],{"class":104,"line":1300},[102,128406,52135],{"class":112},[102,128408,351],{"class":51291},[102,128410,61048],{"class":1952},[102,128412,158],{"class":112},[102,128414,61053],{"class":217},[102,128416,128417],{"class":112},">健康 儿童\u003C\u002F",[102,128419,351],{"class":51291},[102,128421,51298],{"class":112},[102,128423,128424,128426,128428,128430,128432,128434,128437,128439],{"class":104,"line":1306},[102,128425,52135],{"class":112},[102,128427,351],{"class":51291},[102,128429,61048],{"class":1952},[102,128431,158],{"class":112},[102,128433,61053],{"class":217},[102,128435,128436],{"class":112},">耳机 音响\u003C\u002F",[102,128438,351],{"class":51291},[102,128440,51298],{"class":112},[102,128442,128443,128445,128447],{"class":104,"line":1318},[102,128444,51776],{"class":112},[102,128446,51602],{"class":51291},[102,128448,51298],{"class":112},[93,128450,128452],{"className":126534,"code":128451,"language":126536,"meta":23,"style":23},".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",[99,128453,128454,128463,128473,128486,128498,128510,128522,128532,128543,128547,128557,128568],{"__ignoreMap":23},[102,128455,128456,128459,128461],{"class":104,"line":105},[102,128457,128458],{"class":1952},".sidebar",[102,128460,1387],{"class":51291},[102,128462,15562],{"class":112},[102,128464,128465,128467,128469,128471],{"class":104,"line":24},[102,128466,128150],{"class":161},[102,128468,51428],{"class":112},[102,128470,60860],{"class":161},[102,128472,1279],{"class":112},[102,128474,128475,128477,128479,128482,128484],{"class":104,"line":1168},[102,128476,70559],{"class":161},[102,128478,51428],{"class":112},[102,128480,128481],{"class":161},"234",[102,128483,51483],{"class":108},[102,128485,1279],{"class":112},[102,128487,128488,128490,128492,128494,128496],{"class":104,"line":1183},[102,128489,70779],{"class":161},[102,128491,51428],{"class":112},[102,128493,565],{"class":161},[102,128495,51483],{"class":108},[102,128497,1279],{"class":112},[102,128499,128500,128502,128504,128506,128508],{"class":104,"line":1189},[102,128501,127218],{"class":161},[102,128503,51428],{"class":112},[102,128505,565],{"class":161},[102,128507,51483],{"class":108},[102,128509,1279],{"class":112},[102,128511,128512,128514,128516,128518,128520],{"class":104,"line":1203},[102,128513,70814],{"class":161},[102,128515,51428],{"class":112},[102,128517,1064],{"class":161},[102,128519,51483],{"class":108},[102,128521,1279],{"class":112},[102,128523,128524,128526,128528,128530],{"class":104,"line":1209},[102,128525,70896],{"class":161},[102,128527,51428],{"class":112},[102,128529,60833],{"class":161},[102,128531,1279],{"class":112},[102,128533,128534,128536,128538,128541],{"class":104,"line":1300},[102,128535,70869],{"class":161},[102,128537,51428],{"class":112},[102,128539,128540],{"class":161},"#55585a",[102,128542,1279],{"class":112},[102,128544,128545],{"class":104,"line":1306},[102,128546,1554],{"class":112},[102,128548,128549,128551,128553,128555],{"class":104,"line":1318},[102,128550,128458],{"class":1952},[102,128552,1387],{"class":51291},[102,128554,60931],{"class":1952},[102,128556,15562],{"class":112},[102,128558,128559,128561,128563,128566],{"class":104,"line":1601},[102,128560,70869],{"class":161},[102,128562,51428],{"class":112},[102,128564,128565],{"class":161},"#ff6700",[102,128567,1279],{"class":112},[102,128569,128570],{"class":104,"line":1606},[102,128571,1554],{"class":112},[1451,128573],{"style":126390,"src":128574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128576,128577],{},"行高=盒子高度：实现文字的垂直居中",[19,128579,128580],{},"原理讲解：",[1451,128582],{"style":126390,"src":128583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128585,128587],{"id":128586},"_82-css背景","8.2 css背景",[19,128589,128590],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[73,128592,128594],{"id":128593},"_821-背景颜色","8.2.1 背景颜色",[19,128596,128597],{},"background-color:颜色值;",[19,128599,128600],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[73,128602,128604],{"id":128603},"_822-背景图片","8.2.2 背景图片",[19,128606,128607],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[93,128609,128611],{"className":126534,"code":128610,"language":126536,"meta":23,"style":23},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[99,128612,128613,128619,128635],{"__ignoreMap":23},[102,128614,128615,128617],{"class":104,"line":105},[102,128616,51602],{"class":51291},[102,128618,15562],{"class":112},[102,128620,128621,128624,128626,128628,128630,128633],{"class":104,"line":24},[102,128622,128623],{"class":161},"  background-image",[102,128625,51428],{"class":112},[102,128627,61717],{"class":161},[102,128629,113],{"class":112},[102,128631,128632],{"class":5206},"images\u002Fbg.png",[102,128634,2708],{"class":112},[102,128636,128637],{"class":104,"line":1168},[102,128638,1554],{"class":112},[250,128640,128641,128650],{},[253,128642,128643],{},[256,128644,128645,128648],{},[259,128646,128647],{"align":23726},"参数值",[259,128649,102687],{"align":23726},[297,128651,128652,128659],{},[256,128653,128654,128656],{},[302,128655,54728],{"align":23726},[302,128657,128658],{"align":23726},"无背景图（默认的）",[256,128660,128661,128663],{},[302,128662,61717],{"align":23726},[302,128664,128665],{"align":23726},"使用绝对或相对地址指定背景图像",[93,128667,128668],{"className":126534,"code":128610,"language":126536,"meta":23,"style":23},[99,128669,128670,128676,128690],{"__ignoreMap":23},[102,128671,128672,128674],{"class":104,"line":105},[102,128673,51602],{"class":51291},[102,128675,15562],{"class":112},[102,128677,128678,128680,128682,128684,128686,128688],{"class":104,"line":24},[102,128679,128623],{"class":161},[102,128681,51428],{"class":112},[102,128683,61717],{"class":161},[102,128685,113],{"class":112},[102,128687,128632],{"class":5206},[102,128689,2708],{"class":112},[102,128691,128692],{"class":104,"line":1168},[102,128693,1554],{"class":112},[19,128695,128696],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[73,128698,128700],{"id":128699},"_823-背景平铺","8.2.3 背景平铺",[93,128702,128704],{"className":126534,"code":128703,"language":126536,"meta":23,"style":23},"div {\n  background-repeat: no-repeat;\n}\n",[99,128705,128706,128712,128723],{"__ignoreMap":23},[102,128707,128708,128710],{"class":104,"line":105},[102,128709,51602],{"class":51291},[102,128711,15562],{"class":112},[102,128713,128714,128717,128719,128721],{"class":104,"line":24},[102,128715,128716],{"class":161},"  background-repeat",[102,128718,51428],{"class":112},[102,128720,61727],{"class":161},[102,128722,1279],{"class":112},[102,128724,128725],{"class":104,"line":1168},[102,128726,1554],{"class":112},[250,128728,128729,128737],{},[253,128730,128731],{},[256,128732,128733,128735],{},[259,128734,128647],{"align":23726},[259,128736,102687],{"align":23726},[297,128738,128739,128747,128754,128762],{},[256,128740,128741,128744],{},[302,128742,128743],{"align":23726},"repeat",[302,128745,128746],{"align":23726},"背景图像在纵向和横向上平铺（默认的）",[256,128748,128749,128751],{},[302,128750,61727],{"align":23726},[302,128752,128753],{"align":23726},"背景图像不平铺",[256,128755,128756,128759],{},[302,128757,128758],{"align":23726},"repeat-x",[302,128760,128761],{"align":23726},"背景图像在横向上平铺",[256,128763,128764,128767],{},[302,128765,128766],{"align":23726},"repeat-y",[302,128768,128769],{"align":23726},"背景图像在纵向平铺",[73,128771,128773],{"id":128772},"_824-背景图片位置","8.2.4 背景图片位置",[93,128775,128777],{"className":126534,"code":128776,"language":126536,"meta":23,"style":23},"\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",[99,128778,128779,128784,128790,128804,128808,128813,128819,128835,128839,128844,128850,128864],{"__ignoreMap":23},[102,128780,128781],{"class":104,"line":105},[102,128782,128783],{"class":171},"\u002F* 方位名词 *\u002F\n",[102,128785,128786,128788],{"class":104,"line":24},[102,128787,51602],{"class":51291},[102,128789,15562],{"class":112},[102,128791,128792,128795,128797,128799,128802],{"class":104,"line":1168},[102,128793,128794],{"class":161},"  background-position",[102,128796,51428],{"class":112},[102,128798,51583],{"class":161},[102,128800,128801],{"class":161}," top",[102,128803,1279],{"class":112},[102,128805,128806],{"class":104,"line":1183},[102,128807,1554],{"class":112},[102,128809,128810],{"class":104,"line":1189},[102,128811,128812],{"class":171},"\u002F* 精确单位 *\u002F\n",[102,128814,128815,128817],{"class":104,"line":1203},[102,128816,51602],{"class":51291},[102,128818,15562],{"class":112},[102,128820,128821,128823,128825,128827,128829,128831,128833],{"class":104,"line":1209},[102,128822,128794],{"class":161},[102,128824,51428],{"class":112},[102,128826,813],{"class":161},[102,128828,51483],{"class":108},[102,128830,57495],{"class":161},[102,128832,51483],{"class":108},[102,128834,1279],{"class":112},[102,128836,128837],{"class":104,"line":1300},[102,128838,1554],{"class":112},[102,128840,128841],{"class":104,"line":1306},[102,128842,128843],{"class":171},"\u002F* 混合单位 *\u002F\n",[102,128845,128846,128848],{"class":104,"line":1318},[102,128847,51602],{"class":51291},[102,128849,15562],{"class":112},[102,128851,128852,128854,128856,128858,128860,128862],{"class":104,"line":1601},[102,128853,128794],{"class":161},[102,128855,51428],{"class":112},[102,128857,813],{"class":161},[102,128859,51483],{"class":108},[102,128861,17134],{"class":161},[102,128863,1279],{"class":112},[102,128865,128866],{"class":104,"line":1606},[102,128867,1554],{"class":112},[19,128869,128870],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[250,128872,128873,128881],{},[253,128874,128875],{},[256,128876,128877,128879],{},[259,128878,128647],{"align":23726},[259,128880,25860],{"align":23726},[297,128882,128883,128890],{},[256,128884,128885,128887],{},[302,128886,51959],{"align":23726},[302,128888,128889],{"align":23726},"百分数|由浮点数和单位标识符组成的长度值",[256,128891,128892,128895],{},[302,128893,128894],{"align":23726},"position",[302,128896,128897],{"align":23726},"top|center|bottom|left|center|right 方位名词",[19,128899,128900],{},"其他说明：",[19,128902,128903],{},"①参数是方位名词",[19,128905,128906],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,128908,128909],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,128911,128912],{},"②参数是精确单位",[19,128914,128915],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,128917,128918],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,128920,128921],{},"③参数是混合单位",[19,128923,128924],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[73,128926,128928],{"id":128927},"_825-背景图片固定","8.2.5 背景图片固定",[93,128930,128932],{"className":126534,"code":128931,"language":126536,"meta":23,"style":23},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[99,128933,128934,128939,128945,128957,128961,128966,128972,128982],{"__ignoreMap":23},[102,128935,128936],{"class":104,"line":105},[102,128937,128938],{"class":171},"\u002F* 背景滚动（默认） *\u002F\n",[102,128940,128941,128943],{"class":104,"line":24},[102,128942,51602],{"class":51291},[102,128944,15562],{"class":112},[102,128946,128947,128950,128952,128955],{"class":104,"line":1168},[102,128948,128949],{"class":161},"  background-attachment",[102,128951,51428],{"class":112},[102,128953,128954],{"class":161},"scroll",[102,128956,1279],{"class":112},[102,128958,128959],{"class":104,"line":1183},[102,128960,1554],{"class":112},[102,128962,128963],{"class":104,"line":1189},[102,128964,128965],{"class":171},"\u002F* 背景固定 *\u002F\n",[102,128967,128968,128970],{"class":104,"line":1203},[102,128969,51602],{"class":51291},[102,128971,15562],{"class":112},[102,128973,128974,128976,128978,128980],{"class":104,"line":1209},[102,128975,128949],{"class":161},[102,128977,51428],{"class":112},[102,128979,86224],{"class":161},[102,128981,1279],{"class":112},[102,128983,128984],{"class":104,"line":1300},[102,128985,1554],{"class":112},[250,128987,128988,128997],{},[253,128989,128990],{},[256,128991,128992,128995],{},[259,128993,128994],{"align":23726},"参数",[259,128996,102687],{"align":23726},[297,128998,128999,129006],{},[256,129000,129001,129003],{},[302,129002,128954],{"align":23726},[302,129004,129005],{"align":23726},"背景图像是随对象内容滚动",[256,129007,129008,129010],{},[302,129009,86224],{"align":23726},[302,129011,129012],{"align":23726},"背景图像固定",[73,129014,129016],{"id":129015},"_826-背景样式合写","8.2.6 背景样式合写",[93,129018,129020],{"className":126534,"code":129019,"language":126536,"meta":23,"style":23},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[99,129021,129022,129027,129033,129061],{"__ignoreMap":23},[102,129023,129024],{"class":104,"line":105},[102,129025,129026],{"class":171},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[102,129028,129029,129031],{"class":104,"line":24},[102,129030,51602],{"class":51291},[102,129032,15562],{"class":112},[102,129034,129035,129037,129039,129041,129044,129046,129048,129050,129052,129055,129057,129059],{"class":104,"line":1168},[102,129036,70602],{"class":161},[102,129038,51428],{"class":112},[102,129040,60833],{"class":161},[102,129042,129043],{"class":161}," url",[102,129045,113],{"class":112},[102,129047,128632],{"class":5206},[102,129049,13704],{"class":112},[102,129051,61727],{"class":161},[102,129053,129054],{"class":161}," fixed",[102,129056,17134],{"class":161},[102,129058,128801],{"class":161},[102,129060,1279],{"class":112},[102,129062,129063],{"class":104,"line":1183},[102,129064,1554],{"class":112},[73,129066,129068],{"id":129067},"_827-背景色半透明","8.2.7 背景色半透明",[93,129070,129072],{"className":126534,"code":129071,"language":126536,"meta":23,"style":23},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[99,129073,129074,129080,129106],{"__ignoreMap":23},[102,129075,129076,129078],{"class":104,"line":105},[102,129077,51602],{"class":51291},[102,129079,15562],{"class":112},[102,129081,129082,129084,129086,129088,129090,129092,129094,129096,129098,129100,129102,129104],{"class":104,"line":24},[102,129083,70602],{"class":161},[102,129085,51428],{"class":112},[102,129087,55101],{"class":161},[102,129089,113],{"class":112},[102,129091,304],{"class":161},[102,129093,12425],{"class":112},[102,129095,304],{"class":161},[102,129097,12425],{"class":112},[102,129099,304],{"class":161},[102,129101,12425],{"class":112},[102,129103,100512],{"class":161},[102,129105,2708],{"class":112},[102,129107,129108],{"class":104,"line":1168},[102,129109,1554],{"class":112},[19,129111,99387],{},[19,129113,129114],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129116,129117],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129119,129120],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129122,129123],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[73,129125,129127],{"id":129126},"_828-总结","8.2.8 总结",[250,129129,129130,129141],{},[253,129131,129132],{},[256,129133,129134,129137,129139],{},[259,129135,129136],{"align":23726},"属性",[259,129138,102687],{"align":23726},[259,129140,265],{"align":23726},[297,129142,129143,129154,129165,129176,129187,129198,129209],{},[256,129144,129145,129148,129151],{},[302,129146,129147],{"align":23726},"background-color",[302,129149,129150],{"align":23726},"背景颜色",[302,129152,129153],{"align":23726},"预定义的颜色值\u002F十六进制\u002FRGB代码",[256,129155,129156,129159,129162],{},[302,129157,129158],{"align":23726},"background-image",[302,129160,129161],{"align":23726},"背景图片",[302,129163,129164],{"align":23726},"url(图片路径)",[256,129166,129167,129170,129173],{},[302,129168,129169],{"align":23726},"background-repeat",[302,129171,129172],{"align":23726},"是否平铺",[302,129174,129175],{"align":23726},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[256,129177,129178,129181,129184],{},[302,129179,129180],{"align":23726},"background-position",[302,129182,129183],{"align":23726},"背景位置",[302,129185,129186],{"align":23726},"length\u002Fposition 分别是x和y坐标",[256,129188,129189,129192,129195],{},[302,129190,129191],{"align":23726},"background-attachment",[302,129193,129194],{"align":23726},"背景附着",[302,129196,129197],{"align":23726},"scroll(背景滚动) \u002Ffixed (背景固定)",[256,129199,129200,129203,129206],{},[302,129201,129202],{"align":23726},"背景简写",[302,129204,129205],{"align":23726},"书写更简单",[302,129207,129208],{"align":23726},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[256,129210,129211,129214,129217],{},[302,129212,129213],{"align":23726},"背景半透明",[302,129215,129216],{"align":23726},"背景颜色半透明",[302,129218,129219],{"align":23726},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129221,129222],{},"颜色渐变：",[1451,129224],{"style":126390,"src":129225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1451,129227],{"style":126390,"src":129228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[73,129230,129232],{"id":129231},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[93,129234,129236],{"className":127281,"code":129235,"language":127283,"meta":23,"style":23},"\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",[99,129237,129238,129253,129272,129291,129310,129329,129348],{"__ignoreMap":23},[102,129239,129240,129242,129244,129246,129248,129251],{"class":104,"line":105},[102,129241,1023],{"class":112},[102,129243,51602],{"class":51291},[102,129245,53477],{"class":1952},[102,129247,158],{"class":112},[102,129249,129250],{"class":217},"\"nav\"",[102,129252,51298],{"class":112},[102,129254,129255,129257,129259,129261,129263,129265,129268,129270],{"class":104,"line":24},[102,129256,52135],{"class":112},[102,129258,351],{"class":51291},[102,129260,61048],{"class":1952},[102,129262,158],{"class":112},[102,129264,61053],{"class":217},[102,129266,129267],{"class":112},">五彩导航1\u003C\u002F",[102,129269,351],{"class":51291},[102,129271,51298],{"class":112},[102,129273,129274,129276,129278,129280,129282,129284,129287,129289],{"class":104,"line":1168},[102,129275,52135],{"class":112},[102,129277,351],{"class":51291},[102,129279,61048],{"class":1952},[102,129281,158],{"class":112},[102,129283,61053],{"class":217},[102,129285,129286],{"class":112},">五彩导航2\u003C\u002F",[102,129288,351],{"class":51291},[102,129290,51298],{"class":112},[102,129292,129293,129295,129297,129299,129301,129303,129306,129308],{"class":104,"line":1183},[102,129294,52135],{"class":112},[102,129296,351],{"class":51291},[102,129298,61048],{"class":1952},[102,129300,158],{"class":112},[102,129302,61053],{"class":217},[102,129304,129305],{"class":112},">五彩导航3\u003C\u002F",[102,129307,351],{"class":51291},[102,129309,51298],{"class":112},[102,129311,129312,129314,129316,129318,129320,129322,129325,129327],{"class":104,"line":1189},[102,129313,52135],{"class":112},[102,129315,351],{"class":51291},[102,129317,61048],{"class":1952},[102,129319,158],{"class":112},[102,129321,61053],{"class":217},[102,129323,129324],{"class":112},">五彩导航4\u003C\u002F",[102,129326,351],{"class":51291},[102,129328,51298],{"class":112},[102,129330,129331,129333,129335,129337,129339,129341,129344,129346],{"class":104,"line":1203},[102,129332,52135],{"class":112},[102,129334,351],{"class":51291},[102,129336,61048],{"class":1952},[102,129338,158],{"class":112},[102,129340,61053],{"class":217},[102,129342,129343],{"class":112},">五彩导航5\u003C\u002F",[102,129345,351],{"class":51291},[102,129347,51298],{"class":112},[102,129349,129350,129352,129354],{"class":104,"line":1209},[102,129351,51776],{"class":112},[102,129353,51602],{"class":51291},[102,129355,51298],{"class":112},[93,129357,129359],{"className":126534,"code":129358,"language":126536,"meta":23,"style":23},".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",[99,129360,129361,129370,129380,129392,129404,129414,129426,129436,129440,129465,129488,129511,129534],{"__ignoreMap":23},[102,129362,129363,129366,129368],{"class":104,"line":105},[102,129364,129365],{"class":1952},".nav",[102,129367,1387],{"class":51291},[102,129369,15562],{"class":112},[102,129371,129372,129374,129376,129378],{"class":104,"line":24},[102,129373,128150],{"class":161},[102,129375,51428],{"class":112},[102,129377,72374],{"class":161},[102,129379,1279],{"class":112},[102,129381,129382,129384,129386,129388,129390],{"class":104,"line":1168},[102,129383,70559],{"class":161},[102,129385,51428],{"class":112},[102,129387,930],{"class":161},[102,129389,51483],{"class":108},[102,129391,1279],{"class":112},[102,129393,129394,129396,129398,129400,129402],{"class":104,"line":1183},[102,129395,70779],{"class":161},[102,129397,51428],{"class":112},[102,129399,969],{"class":161},[102,129401,51483],{"class":108},[102,129403,1279],{"class":112},[102,129405,129406,129408,129410,129412],{"class":104,"line":1189},[102,129407,70517],{"class":161},[102,129409,51428],{"class":112},[102,129411,51583],{"class":161},[102,129413,1279],{"class":112},[102,129415,129416,129418,129420,129422,129424],{"class":104,"line":1203},[102,129417,127218],{"class":161},[102,129419,51428],{"class":112},[102,129421,969],{"class":161},[102,129423,51483],{"class":108},[102,129425,1279],{"class":112},[102,129427,129428,129430,129432,129434],{"class":104,"line":1209},[102,129429,70896],{"class":161},[102,129431,51428],{"class":112},[102,129433,60833],{"class":161},[102,129435,1279],{"class":112},[102,129437,129438],{"class":104,"line":1300},[102,129439,1554],{"class":112},[102,129441,129442,129444,129446,129449,129451,129453,129456,129458,129460,129462],{"class":104,"line":1306},[102,129443,129365],{"class":1952},[102,129445,1387],{"class":51291},[102,129447,129448],{"class":1952},":nth-child",[102,129450,113],{"class":112},[102,129452,330],{"class":161},[102,129454,129455],{"class":112},") { ",[102,129457,129147],{"class":161},[102,129459,51428],{"class":112},[102,129461,128565],{"class":161},[102,129463,129464],{"class":112},"; }\n",[102,129466,129467,129469,129471,129473,129475,129477,129479,129481,129483,129486],{"class":104,"line":1318},[102,129468,129365],{"class":1952},[102,129470,1387],{"class":51291},[102,129472,129448],{"class":1952},[102,129474,113],{"class":112},[102,129476,190],{"class":161},[102,129478,129455],{"class":112},[102,129480,129147],{"class":161},[102,129482,51428],{"class":112},[102,129484,129485],{"class":161},"#ff0000",[102,129487,129464],{"class":112},[102,129489,129490,129492,129494,129496,129498,129500,129502,129504,129506,129509],{"class":104,"line":1601},[102,129491,129365],{"class":1952},[102,129493,1387],{"class":51291},[102,129495,129448],{"class":1952},[102,129497,113],{"class":112},[102,129499,184],{"class":161},[102,129501,129455],{"class":112},[102,129503,129147],{"class":161},[102,129505,51428],{"class":112},[102,129507,129508],{"class":161},"#00a4ff",[102,129510,129464],{"class":112},[102,129512,129513,129515,129517,129519,129521,129523,129525,129527,129529,129532],{"class":104,"line":1606},[102,129514,129365],{"class":1952},[102,129516,1387],{"class":51291},[102,129518,129448],{"class":1952},[102,129520,113],{"class":112},[102,129522,406],{"class":161},[102,129524,129455],{"class":112},[102,129526,129147],{"class":161},[102,129528,51428],{"class":112},[102,129530,129531],{"class":161},"#ff00ff",[102,129533,129464],{"class":112},[102,129535,129536,129538,129540,129542,129544,129546,129548,129550,129552,129555],{"class":104,"line":1612},[102,129537,129365],{"class":1952},[102,129539,1387],{"class":51291},[102,129541,129448],{"class":1952},[102,129543,113],{"class":112},[102,129545,432],{"class":161},[102,129547,129455],{"class":112},[102,129549,129147],{"class":161},[102,129551,51428],{"class":112},[102,129553,129554],{"class":161},"#00ff00",[102,129556,129464],{"class":112},[14,129558,129560],{"id":129559},"_83-css三大特性","8.3 css三大特性",[73,129562,129564],{"id":129563},"_831-层叠性","8.3.1 层叠性",[19,129566,129567],{},"为了解决样式冲突问题",[19,129569,129570],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129572,129573],{},"   ②样式不冲突，不会层叠",[73,129575,129577],{"id":129576},"_832-继承性","8.3.2 继承性",[19,129579,129580],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129582,129583],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[93,129585,129587],{"className":126534,"code":129586,"language":126536,"meta":23,"style":23},"p {\n  color: #333;\n}\n",[99,129588,129589,129595,129605],{"__ignoreMap":23},[102,129590,129591,129593],{"class":104,"line":105},[102,129592,19],{"class":51291},[102,129594,15562],{"class":112},[102,129596,129597,129599,129601,129603],{"class":104,"line":24},[102,129598,70896],{"class":161},[102,129600,51428],{"class":112},[102,129602,62360],{"class":161},[102,129604,1279],{"class":112},[102,129606,129607],{"class":104,"line":1168},[102,129608,1554],{"class":112},[1451,129610],{"style":126390,"src":129611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129613,129614],{},"解释：①行高可以跟单位也可以不跟单位",[19,129616,129617],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129619,129620],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129622,129623],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[73,129625,129627],{"id":129626},"_833-优先级","8.3.3 优先级",[56,129629,129630,129633],{},[59,129631,129632],{},"选择器相同，则执行层叠性",[59,129634,129635],{},"选择器不同，则根据选择器权重执行",[250,129637,129638,129648],{},[253,129639,129640],{},[256,129641,129642,129645],{},[259,129643,129644],{"align":23726},"选择器",[259,129646,129647],{"align":23726},"选择器权重",[297,129649,129650,129658,129666,129674,129682,129690],{},[256,129651,129652,129655],{},[302,129653,129654],{"align":23726},"继承 或者*",[302,129656,129657],{"align":23726},"0，0，0，0",[256,129659,129660,129663],{},[302,129661,129662],{"align":23726},"标签选择器",[302,129664,129665],{"align":23726},"0，0，0，1",[256,129667,129668,129671],{},[302,129669,129670],{"align":23726},"类选择器，伪类选择器",[302,129672,129673],{"align":23726},"0，0，1，0",[256,129675,129676,129679],{},[302,129677,129678],{"align":23726},"ID选择器",[302,129680,129681],{"align":23726},"0，1，0，0",[256,129683,129684,129687],{},[302,129685,129686],{"align":23726},"行内样式",[302,129688,129689],{"align":23726},"1，0，0，0",[256,129691,129692,129695],{},[302,129693,129694],{"align":23726},"！important",[302,129696,129697],{"align":23726},"无穷大",[19,129699,129700],{},"! important用法：",[93,129702,129704],{"className":126534,"code":129703,"language":126536,"meta":23,"style":23},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[99,129705,129706,129711,129717,129730,129734,129739,129745,129755],{"__ignoreMap":23},[102,129707,129708],{"class":104,"line":105},[102,129709,129710],{"class":171},"\u002F* !important 拥有最高优先级 *\u002F\n",[102,129712,129713,129715],{"class":104,"line":24},[102,129714,51602],{"class":51291},[102,129716,15562],{"class":112},[102,129718,129719,129721,129723,129725,129728],{"class":104,"line":1168},[102,129720,70896],{"class":161},[102,129722,51428],{"class":112},[102,129724,51636],{"class":161},[102,129726,129727],{"class":108}," !important",[102,129729,1279],{"class":112},[102,129731,129732],{"class":104,"line":1183},[102,129733,1554],{"class":112},[102,129735,129736],{"class":104,"line":1189},[102,129737,129738],{"class":171},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[102,129740,129741,129743],{"class":104,"line":1203},[102,129742,51602],{"class":51291},[102,129744,15562],{"class":112},[102,129746,129747,129749,129751,129753],{"class":104,"line":1209},[102,129748,70896],{"class":161},[102,129750,51428],{"class":112},[102,129752,57412],{"class":161},[102,129754,1279],{"class":112},[102,129756,129757],{"class":104,"line":1300},[102,129758,1554],{"class":112},[19,129760,129761],{},"优先级注意点：",[19,129763,129764],{},"①权重是有4组数字组成,但是不会有进位",[19,129766,129767],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129769,129770],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129772,129773],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129775,129776],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129778,129779],{},"⑥复合选择器",[250,129781,129782,129792],{},[253,129783,129784],{},[256,129785,129786,129789],{},[259,129787,129788],{"align":23726},"div ul li",[259,129790,129791],{"align":23726},"0,0,0,3",[297,129793,129794,129802,129810],{},[256,129795,129796,129799],{},[302,129797,129798],{"align":23726},".nav ul li",[302,129800,129801],{"align":23726},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[256,129803,129804,129807],{},[302,129805,129806],{"align":23726},"a:hover",[302,129808,129809],{"align":23726},"0,0,1,1",[256,129811,129812,129815],{},[302,129813,129814],{"align":23726},".nav a",[302,129816,129809],{"align":23726},[5116,129818,129819],{},"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":23,"searchDepth":24,"depth":24,"links":129821},[129822,129830,129841],{"id":127930,"depth":24,"text":127931,"children":129823},[129824,129825,129826,129827,129828,129829],{"id":127943,"depth":1168,"text":127944},{"id":128015,"depth":1168,"text":128016},{"id":128087,"depth":1168,"text":128088},{"id":128118,"depth":1168,"text":128119},{"id":128125,"depth":1168,"text":128126},{"id":128278,"depth":1168,"text":128279},{"id":128586,"depth":24,"text":128587,"children":129831},[129832,129833,129834,129835,129836,129837,129838,129839,129840],{"id":128593,"depth":1168,"text":128594},{"id":128603,"depth":1168,"text":128604},{"id":128699,"depth":1168,"text":128700},{"id":128772,"depth":1168,"text":128773},{"id":128927,"depth":1168,"text":128928},{"id":129015,"depth":1168,"text":129016},{"id":129067,"depth":1168,"text":129068},{"id":129126,"depth":1168,"text":129127},{"id":129231,"depth":1168,"text":129232},{"id":129559,"depth":24,"text":129560,"children":129842},[129843,129844,129845],{"id":129563,"depth":1168,"text":129564},{"id":129576,"depth":1168,"text":129577},{"id":129626,"depth":1168,"text":129627},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127922,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129852,"title":129853,"body":129854,"description":27,"extension":28,"meta":131444,"navigation":30,"path":131445,"seo":131446,"stem":131447,"__hash__":131448},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129855,"toc":131423},[129856,129859,129863,129866,129869,129872,129875,129878,129881,129884,129888,129896,129933,129969,129972,129986,129991,130025,130028,130121,130126,130129,130159,130162,130167,130175,130179,130186,130232,130276,130281,130284,130287,130290,130293,130296,130299,130301,130304,130308,130313,130357,130362,130365,130368,130405,130410,130413,130416,130419,130422,130454,130457,130460,130463,130495,130498,130501,130504,130508,130511,130543,130546,130550,130570,130573,130581,130584,130588,130593,130596,130628,130633,130636,130674,130678,130683,130686,130689,130720,130723,130740,130745,130797,130857,130862,130916,130954,130958,130962,130965,130969,130977,130980,130982,130993,130998,131046,131080,131083,131086,131089,131092,131136,131139,131142,131145,131148,131151,131154,131198,131201,131204,131207,131210,131213,131216,131222,131225,131269,131272,131275,131278,131281,131284,131328,131331,131333,131336,131340,131344,131382,131386,131389,131392,131396,131404,131408,131411,131414,131417,131420],[10,129857,129853],{"id":129858},"_9-css盒模型浮动与切图",[14,129860,129862],{"id":129861},"_91-盒子模型","9.1 盒子模型",[19,129864,129865],{},"利用盒子来设计网页",[19,129867,129868],{},"盒子包含：边框、外边距、内边距、实际内容",[19,129870,129871],{},"网页布局设置：",[19,129873,129874],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,129876,129877],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,129879,129880],{},"③往盒子里装内容",[1451,129882],{"style":126390,"src":129883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[73,129885,129887],{"id":129886},"_911-边框border","9.1.1 边框（border）",[56,129889,129890,129893],{},[59,129891,129892],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[59,129894,129895],{},"语法",[93,129897,129899],{"className":126534,"code":129898,"language":126536,"meta":23,"style":23},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[99,129900,129901,129906,129912,129929],{"__ignoreMap":23},[102,129902,129903],{"class":104,"line":105},[102,129904,129905],{"class":171},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[102,129907,129908,129910],{"class":104,"line":24},[102,129909,51602],{"class":51291},[102,129911,15562],{"class":112},[102,129913,129914,129916,129918,129920,129922,129924,129927],{"class":104,"line":1168},[102,129915,70887],{"class":161},[102,129917,51428],{"class":112},[102,129919,330],{"class":161},[102,129921,51483],{"class":108},[102,129923,51512],{"class":161},[102,129925,129926],{"class":161}," #ccc",[102,129928,1279],{"class":112},[102,129930,129931],{"class":104,"line":1183},[102,129932,1554],{"class":112},[250,129934,129935,129943],{},[253,129936,129937],{},[256,129938,129939,129941],{},[259,129940,129136],{"align":23726},[259,129942,102687],{"align":23726},[297,129944,129945,129953,129961],{},[256,129946,129947,129950],{},[302,129948,129949],{"align":23726},"border-width",[302,129951,129952],{"align":23726},"定义边框粗细，单位是px",[256,129954,129955,129958],{},[302,129956,129957],{"align":23726},"border-style",[302,129959,129960],{"align":23726},"边框的样式",[256,129962,129963,129966],{},[302,129964,129965],{"align":23726},"border-color",[302,129967,129968],{"align":23726},"边框的颜色",[19,129970,129971],{},"边框样式 border-style 可以设置如下值：",[1120,129973,129974,129977,129980,129983],{},[59,129975,129976],{},"none：没有边框即忽略所有边框的宽度（默认值）",[59,129978,129979],{},"solid：边框为单实线(最为常用的)",[59,129981,129982],{},"dashed：边框为虚线",[59,129984,129985],{},"dotted：边框为点线",[56,129987,129988],{"start":1168},[59,129989,129990],{},"边框的合写分写",[93,129992,129993],{"className":126534,"code":129898,"language":126536,"meta":23,"style":23},[99,129994,129995,129999,130005,130021],{"__ignoreMap":23},[102,129996,129997],{"class":104,"line":105},[102,129998,129905],{"class":171},[102,130000,130001,130003],{"class":104,"line":24},[102,130002,51602],{"class":51291},[102,130004,15562],{"class":112},[102,130006,130007,130009,130011,130013,130015,130017,130019],{"class":104,"line":1168},[102,130008,70887],{"class":161},[102,130010,51428],{"class":112},[102,130012,330],{"class":161},[102,130014,51483],{"class":108},[102,130016,51512],{"class":161},[102,130018,129926],{"class":161},[102,130020,1279],{"class":112},[102,130022,130023],{"class":104,"line":1183},[102,130024,1554],{"class":112},[19,130026,130027],{},"边框分开写法：",[93,130029,130031],{"className":126534,"code":130030,"language":126536,"meta":23,"style":23},"\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",[99,130032,130033,130038,130044,130062,130080,130099,130117],{"__ignoreMap":23},[102,130034,130035],{"class":104,"line":105},[102,130036,130037],{"class":171},"\u002F* 边框分开写法 *\u002F\n",[102,130039,130040,130042],{"class":104,"line":24},[102,130041,51602],{"class":51291},[102,130043,15562],{"class":112},[102,130045,130046,130049,130051,130053,130055,130057,130060],{"class":104,"line":1168},[102,130047,130048],{"class":161},"  border-top",[102,130050,51428],{"class":112},[102,130052,330],{"class":161},[102,130054,51483],{"class":108},[102,130056,51512],{"class":161},[102,130058,130059],{"class":161}," #000",[102,130061,1279],{"class":112},[102,130063,130064,130067,130069,130071,130073,130075,130078],{"class":104,"line":1183},[102,130065,130066],{"class":161},"  border-right",[102,130068,51428],{"class":112},[102,130070,190],{"class":161},[102,130072,51483],{"class":108},[102,130074,62232],{"class":161},[102,130076,130077],{"class":161}," #333",[102,130079,1279],{"class":112},[102,130081,130082,130085,130087,130089,130091,130094,130097],{"class":104,"line":1189},[102,130083,130084],{"class":161},"  border-bottom",[102,130086,51428],{"class":112},[102,130088,184],{"class":161},[102,130090,51483],{"class":108},[102,130092,130093],{"class":161}," dotted",[102,130095,130096],{"class":161}," #666",[102,130098,1279],{"class":112},[102,130100,130101,130104,130106,130108,130110,130112,130115],{"class":104,"line":1203},[102,130102,130103],{"class":161},"  border-left",[102,130105,51428],{"class":112},[102,130107,330],{"class":161},[102,130109,51483],{"class":108},[102,130111,51512],{"class":161},[102,130113,130114],{"class":161}," #999",[102,130116,1279],{"class":112},[102,130118,130119],{"class":104,"line":1209},[102,130120,1554],{"class":112},[56,130122,130123],{"start":1183},[59,130124,130125],{},"表格的细线边框",[19,130127,130128],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[93,130130,130132],{"className":126534,"code":130131,"language":126536,"meta":23,"style":23},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[99,130133,130134,130139,130145,130155],{"__ignoreMap":23},[102,130135,130136],{"class":104,"line":105},[102,130137,130138],{"class":171},"\u002F* 表格细线边框合并 *\u002F\n",[102,130140,130141,130143],{"class":104,"line":24},[102,130142,250],{"class":51291},[102,130144,15562],{"class":112},[102,130146,130147,130149,130151,130153],{"class":104,"line":1168},[102,130148,70569],{"class":161},[102,130150,51428],{"class":112},[102,130152,65026],{"class":161},[102,130154,1279],{"class":112},[102,130156,130157],{"class":104,"line":1183},[102,130158,1554],{"class":112},[19,130160,130161],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[56,130163,130164],{"start":1189},[59,130165,130166],{},"解决边框额外增加盒子的实际大小的方法：",[1120,130168,130169,130172],{},[59,130170,130171],{},"测量盒子大小的时候,不量边框",[59,130173,130174],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[73,130176,130178],{"id":130177},"_912-内边距","9.1.2 内边距",[56,130180,130181,130184],{},[59,130182,130183],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[59,130185,129895],{},[250,130187,130188,130198],{},[253,130189,130190],{},[256,130191,130192,130195],{},[259,130193,130194],{"align":23726},"值的个数",[259,130196,130197],{"align":23726},"表达意思",[297,130199,130200,130208,130216,130224],{},[256,130201,130202,130205],{},[302,130203,130204],{"align":23726},"padding: 5px;",[302,130206,130207],{"align":23726},"1个值，代表上下左右都有5个元素",[256,130209,130210,130213],{},[302,130211,130212],{"align":23726},"padding: 5px 10px;",[302,130214,130215],{"align":23726},"2个值，代表上下内边距为5像素，左右内边距为10像素",[256,130217,130218,130221],{},[302,130219,130220],{"align":23726},"padding: 5px 10px 20px;",[302,130222,130223],{"align":23726},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[256,130225,130226,130229],{},[302,130227,130228],{"align":23726},"padding: 5px 10px 20px 30px;",[302,130230,130231],{"align":23726},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[250,130233,130234,130242],{},[253,130235,130236],{},[256,130237,130238,130240],{},[259,130239,129136],{"align":23726},[259,130241,102687],{"align":23726},[297,130243,130244,130252,130260,130268],{},[256,130245,130246,130249],{},[302,130247,130248],{"align":23726},"padding-left",[302,130250,130251],{"align":23726},"左内边距",[256,130253,130254,130257],{},[302,130255,130256],{"align":23726},"padding-right",[302,130258,130259],{"align":23726},"右内边距",[256,130261,130262,130265],{},[302,130263,130264],{"align":23726},"padding-top",[302,130266,130267],{"align":23726},"上内边距",[256,130269,130270,130273],{},[302,130271,130272],{"align":23726},"padding-bottom",[302,130274,130275],{"align":23726},"下内边距",[56,130277,130278],{"start":1168},[59,130279,130280],{},"内边距会影响盒子的实际大小",[19,130282,130283],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130285,130286],{},"①内容和边框有了距离，添加了内边距",[19,130288,130289],{},"②padding影响了盒子实际大小",[19,130291,130292],{},"内边距对盒子大小的影响：",[19,130294,130295],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130297,130298],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130300,95211],{},[19,130302,130303],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[73,130305,130307],{"id":130306},"_913-外边距","9.1.3 外边距",[56,130309,130310],{},[59,130311,130312],{},"控制盒子与盒子之间的距离",[250,130314,130315,130323],{},[253,130316,130317],{},[256,130318,130319,130321],{},[259,130320,129136],{"align":23726},[259,130322,102687],{"align":23726},[297,130324,130325,130333,130341,130349],{},[256,130326,130327,130330],{},[302,130328,130329],{"align":23726},"margin-left",[302,130331,130332],{"align":23726},"左外边距",[256,130334,130335,130338],{},[302,130336,130337],{"align":23726},"margin-right",[302,130339,130340],{"align":23726},"右外边距",[256,130342,130343,130346],{},[302,130344,130345],{"align":23726},"margin-top",[302,130347,130348],{"align":23726},"上外边距",[256,130350,130351,130354],{},[302,130352,130353],{"align":23726},"margin-bottom",[302,130355,130356],{"align":23726},"下外边距",[56,130358,130359],{"start":24},[59,130360,130361],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130363,130364],{},"①盒子必须指定了宽度（width）",[19,130366,130367],{},"②盒子左右的外边距都设置为 auto",[93,130369,130371],{"className":126534,"code":130370,"language":126536,"meta":23,"style":23},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[99,130372,130373,130378,130385,130401],{"__ignoreMap":23},[102,130374,130375],{"class":104,"line":105},[102,130376,130377],{"class":171},"\u002F* margin 复合写法（同上） *\u002F\n",[102,130379,130380,130383],{"class":104,"line":24},[102,130381,130382],{"class":1952},".box",[102,130384,15562],{"class":112},[102,130386,130387,130389,130391,130393,130395,130398],{"class":104,"line":1168},[102,130388,70461],{"class":161},[102,130390,51428],{"class":112},[102,130392,304],{"class":161},[102,130394,51547],{"class":161},[102,130396,130397],{"class":112},";  ",[102,130399,130400],{"class":171},"\u002F* 块级盒子水平居中 *\u002F\n",[102,130402,130403],{"class":104,"line":1183},[102,130404,1554],{"class":112},[56,130406,130407],{"start":1168},[59,130408,130409],{},"外边距塌陷问题",[19,130411,130412],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1451,130414],{"style":126390,"src":130415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130417,130418],{},"解决方案：",[19,130420,130421],{},"①可以为父亲元素定义上边距",[93,130423,130424],{"className":126534,"code":130370,"language":126536,"meta":23,"style":23},[99,130425,130426,130430,130436,130450],{"__ignoreMap":23},[102,130427,130428],{"class":104,"line":105},[102,130429,130377],{"class":171},[102,130431,130432,130434],{"class":104,"line":24},[102,130433,130382],{"class":1952},[102,130435,15562],{"class":112},[102,130437,130438,130440,130442,130444,130446,130448],{"class":104,"line":1168},[102,130439,70461],{"class":161},[102,130441,51428],{"class":112},[102,130443,304],{"class":161},[102,130445,51547],{"class":161},[102,130447,130397],{"class":112},[102,130449,130400],{"class":171},[102,130451,130452],{"class":104,"line":1183},[102,130453,1554],{"class":112},[19,130455,130456],{},"②可以为父亲元素定义上内边距",[19,130458,130459],{},"③可以为父亲元素添加overflow:hidden",[1451,130461],{"style":126390,"src":130462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[93,130464,130465],{"className":126534,"code":130370,"language":126536,"meta":23,"style":23},[99,130466,130467,130471,130477,130491],{"__ignoreMap":23},[102,130468,130469],{"class":104,"line":105},[102,130470,130377],{"class":171},[102,130472,130473,130475],{"class":104,"line":24},[102,130474,130382],{"class":1952},[102,130476,15562],{"class":112},[102,130478,130479,130481,130483,130485,130487,130489],{"class":104,"line":1168},[102,130480,70461],{"class":161},[102,130482,51428],{"class":112},[102,130484,304],{"class":161},[102,130486,51547],{"class":161},[102,130488,130397],{"class":112},[102,130490,130400],{"class":171},[102,130492,130493],{"class":104,"line":1183},[102,130494,1554],{"class":112},[1451,130496],{"style":126390,"src":130497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130499,130500],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130502,130503],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[73,130505,130507],{"id":130506},"_914-清除内外边距","9.1.4 清除内外边距",[19,130509,130510],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[93,130512,130513],{"className":126534,"code":130370,"language":126536,"meta":23,"style":23},[99,130514,130515,130519,130525,130539],{"__ignoreMap":23},[102,130516,130517],{"class":104,"line":105},[102,130518,130377],{"class":171},[102,130520,130521,130523],{"class":104,"line":24},[102,130522,130382],{"class":1952},[102,130524,15562],{"class":112},[102,130526,130527,130529,130531,130533,130535,130537],{"class":104,"line":1168},[102,130528,70461],{"class":161},[102,130530,51428],{"class":112},[102,130532,304],{"class":161},[102,130534,51547],{"class":161},[102,130536,130397],{"class":112},[102,130538,130400],{"class":171},[102,130540,130541],{"class":104,"line":1183},[102,130542,1554],{"class":112},[19,130544,130545],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[73,130547,130549],{"id":130548},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1120,130551,130552,130555,130558,130561,130564,130567],{},[59,130553,130554],{},"文件→打开 ：可以打开我们要测量的图片",[59,130556,130557],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[59,130559,130560],{},"右击标尺，把里面的单位改为像素",[59,130562,130563],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[59,130565,130566],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[59,130568,130569],{},"用选区拖动 可以测量大小",[1451,130571],{"style":126390,"src":130572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1120,130574,130575,130578],{},[59,130576,130577],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[59,130579,130580],{},"吸管取色工具",[1451,130582],{"style":126390,"src":130583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[73,130585,130587],{"id":130586},"_916-案例","9.1.6 案例",[56,130589,130590],{},[59,130591,130592],{},"小米商品",[1451,130594],{"style":126390,"src":130595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[93,130597,130598],{"className":126534,"code":130370,"language":126536,"meta":23,"style":23},[99,130599,130600,130604,130610,130624],{"__ignoreMap":23},[102,130601,130602],{"class":104,"line":105},[102,130603,130377],{"class":171},[102,130605,130606,130608],{"class":104,"line":24},[102,130607,130382],{"class":1952},[102,130609,15562],{"class":112},[102,130611,130612,130614,130616,130618,130620,130622],{"class":104,"line":1168},[102,130613,70461],{"class":161},[102,130615,51428],{"class":112},[102,130617,304],{"class":161},[102,130619,51547],{"class":161},[102,130621,130397],{"class":112},[102,130623,130400],{"class":171},[102,130625,130626],{"class":104,"line":1183},[102,130627,1554],{"class":112},[56,130629,130630],{"start":24},[59,130631,130632],{},"快报模块",[1451,130634],{"style":126390,"src":130635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[93,130637,130639],{"className":127281,"code":130638,"language":127283,"meta":23,"style":23},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[99,130640,130641,130646,130661,130666],{"__ignoreMap":23},[102,130642,130643],{"class":104,"line":105},[102,130644,130645],{"class":171},"\u003C!-- HTML 代码示例 -->\n",[102,130647,130648,130650,130652,130654,130656,130659],{"class":104,"line":24},[102,130649,1023],{"class":112},[102,130651,51602],{"class":51291},[102,130653,53477],{"class":1952},[102,130655,158],{"class":112},[102,130657,130658],{"class":217},"\"example\"",[102,130660,51298],{"class":112},[102,130662,130663],{"class":104,"line":1168},[102,130664,130665],{"class":112},"  示例内容\n",[102,130667,130668,130670,130672],{"class":104,"line":1183},[102,130669,51776],{"class":112},[102,130671,51602],{"class":51291},[102,130673,51298],{"class":112},[73,130675,130677],{"id":130676},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[56,130679,130680],{},[59,130681,130682],{},"圆角边框",[19,130684,130685],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1451,130687],{"style":126390,"src":130688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[93,130690,130692],{"className":126534,"code":130691,"language":126536,"meta":23,"style":23},"div {\n  border: 1px solid #ccc;\n}\n",[99,130693,130694,130700,130716],{"__ignoreMap":23},[102,130695,130696,130698],{"class":104,"line":105},[102,130697,51602],{"class":51291},[102,130699,15562],{"class":112},[102,130701,130702,130704,130706,130708,130710,130712,130714],{"class":104,"line":24},[102,130703,70887],{"class":161},[102,130705,51428],{"class":112},[102,130707,330],{"class":161},[102,130709,51483],{"class":108},[102,130711,51512],{"class":161},[102,130713,129926],{"class":161},[102,130715,1279],{"class":112},[102,130717,130718],{"class":104,"line":1168},[102,130719,1554],{"class":112},[19,130721,130722],{},"解释:",[1120,130724,130725,130728,130731,130734,130737],{},[59,130726,130727],{},"参数值可以为数值或百分比的形式",[59,130729,130730],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[59,130732,130733],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[59,130735,130736],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[59,130738,130739],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[56,130741,130742],{"start":24},[59,130743,130744],{},"盒子阴影",[93,130746,130748],{"className":126534,"code":130747,"language":126536,"meta":23,"style":23},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[99,130749,130750,130756,130793],{"__ignoreMap":23},[102,130751,130752,130754],{"class":104,"line":105},[102,130753,51602],{"class":51291},[102,130755,15562],{"class":112},[102,130757,130758,130761,130763,130765,130767,130769,130771,130773,130775,130777,130779,130781,130783,130785,130787,130789,130791],{"class":104,"line":24},[102,130759,130760],{"class":161},"  box-shadow",[102,130762,51428],{"class":112},[102,130764,304],{"class":161},[102,130766,14745],{"class":161},[102,130768,51483],{"class":108},[102,130770,2027],{"class":161},[102,130772,51483],{"class":108},[102,130774,78758],{"class":161},[102,130776,113],{"class":112},[102,130778,304],{"class":161},[102,130780,12425],{"class":112},[102,130782,304],{"class":161},[102,130784,12425],{"class":112},[102,130786,304],{"class":161},[102,130788,12425],{"class":112},[102,130790,86201],{"class":161},[102,130792,2708],{"class":112},[102,130794,130795],{"class":104,"line":1168},[102,130796,1554],{"class":112},[250,130798,130799,130807],{},[253,130800,130801],{},[256,130802,130803,130805],{},[259,130804,265],{"align":23726},[259,130806,27480],{"align":23726},[297,130808,130809,130817,130825,130833,130841,130849],{},[256,130810,130811,130814],{},[302,130812,130813],{"align":23726},"h-shadow",[302,130815,130816],{"align":23726},"必需,水平阴影的位置,允许负值",[256,130818,130819,130822],{},[302,130820,130821],{"align":23726},"v-shadow",[302,130823,130824],{"align":23726},"必需,垂直阴影的位置,允许负值",[256,130826,130827,130830],{},[302,130828,130829],{"align":23726},"blur",[302,130831,130832],{"align":23726},"可选,模糊距离,就是影子的虚实",[256,130834,130835,130838],{},[302,130836,130837],{"align":23726},"spread",[302,130839,130840],{"align":23726},"可选,阴影尺寸",[256,130842,130843,130846],{},[302,130844,130845],{"align":23726},"color",[302,130847,130848],{"align":23726},"可选,阴影的颜色",[256,130850,130851,130854],{},[302,130852,130853],{"align":23726},"inset",[302,130855,130856],{"align":23726},"可选,将外部阴影(outset)改为内部阴影",[56,130858,130859],{"start":1168},[59,130860,130861],{},"文字阴影",[93,130863,130865],{"className":126534,"code":130864,"language":126536,"meta":23,"style":23},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[99,130866,130867,130873,130912],{"__ignoreMap":23},[102,130868,130869,130871],{"class":104,"line":105},[102,130870,19],{"class":51291},[102,130872,15562],{"class":112},[102,130874,130875,130878,130880,130882,130884,130886,130888,130890,130892,130894,130896,130898,130900,130902,130904,130906,130908,130910],{"class":104,"line":24},[102,130876,130877],{"class":161},"  text-shadow",[102,130879,51428],{"class":112},[102,130881,330],{"class":161},[102,130883,51483],{"class":108},[102,130885,25109],{"class":161},[102,130887,51483],{"class":108},[102,130889,14745],{"class":161},[102,130891,51483],{"class":108},[102,130893,78758],{"class":161},[102,130895,113],{"class":112},[102,130897,304],{"class":161},[102,130899,12425],{"class":112},[102,130901,304],{"class":161},[102,130903,12425],{"class":112},[102,130905,304],{"class":161},[102,130907,12425],{"class":112},[102,130909,100512],{"class":161},[102,130911,2708],{"class":112},[102,130913,130914],{"class":104,"line":1168},[102,130915,1554],{"class":112},[250,130917,130918,130926],{},[253,130919,130920],{},[256,130921,130922,130924],{},[259,130923,265],{"align":23726},[259,130925,27480],{"align":23726},[297,130927,130928,130934,130941,130948],{},[256,130929,130930,130932],{},[302,130931,130813],{"align":23726},[302,130933,130816],{"align":23726},[256,130935,130936,130938],{},[302,130937,130821],{"align":23726},[302,130939,130940],{"align":23726},"必需,垂直阴影位置,允许负值",[256,130942,130943,130945],{},[302,130944,130829],{"align":23726},[302,130946,130947],{"align":23726},"可选,模糊的距离",[256,130949,130950,130952],{},[302,130951,130845],{"align":23726},[302,130953,130848],{"align":23726},[14,130955,130957],{"id":130956},"_92-浮动","9.2 浮动",[73,130959,130961],{"id":130960},"_921-浮动介绍","9.2.1 浮动介绍",[19,130963,130964],{},"在16.2中详细介绍",[73,130966,130968],{"id":130967},"_922-清除浮动","9.2.2 清除浮动",[56,130970,130971,130974],{},[59,130972,130973],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[59,130975,130976],{},"清除浮动的本质",[19,130978,130979],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,130981,9015],{},[1120,130983,130984,130987,130990],{},[59,130985,130986],{},"如果父盒子本身有高度，则不需要清除浮动",[59,130988,130989],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[59,130991,130992],{},"父级有了高度，就不会影响下面的标准流了",[56,130994,130995],{"start":1168},[59,130996,130997],{},"清除浮动样式",[93,130999,131001],{"className":126534,"code":131000,"language":126536,"meta":23,"style":23},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[99,131002,131003,131010,131021,131025,131032,131042],{"__ignoreMap":23},[102,131004,131005,131008],{"class":104,"line":105},[102,131006,131007],{"class":1952},".left",[102,131009,15562],{"class":112},[102,131011,131012,131015,131017,131019],{"class":104,"line":24},[102,131013,131014],{"class":161},"  float",[102,131016,51428],{"class":112},[102,131018,23726],{"class":161},[102,131020,1279],{"class":112},[102,131022,131023],{"class":104,"line":1168},[102,131024,1554],{"class":112},[102,131026,131027,131030],{"class":104,"line":1183},[102,131028,131029],{"class":1952},".right",[102,131031,15562],{"class":112},[102,131033,131034,131036,131038,131040],{"class":104,"line":1189},[102,131035,131014],{"class":161},[102,131037,51428],{"class":112},[102,131039,72513],{"class":161},[102,131041,1279],{"class":112},[102,131043,131044],{"class":104,"line":1203},[102,131045,1554],{"class":112},[250,131047,131048,131056],{},[253,131049,131050],{},[256,131051,131052,131054],{},[259,131053,126998],{"align":23726},[259,131055,27480],{"align":23726},[297,131057,131058,131065,131072],{},[256,131059,131060,131062],{},[302,131061,23726],{"align":23726},[302,131063,131064],{"align":23726},"不允许左侧有浮动元素（清除左侧浮动的影响）",[256,131066,131067,131069],{},[302,131068,72513],{"align":23726},[302,131070,131071],{"align":23726},"不允许右侧有浮动元素（清除右侧浮动的影响）",[256,131073,131074,131077],{},[302,131075,131076],{"align":23726},"both",[302,131078,131079],{"align":23726},"同时清除左右侧浮动的影响",[19,131081,131082],{},"法一",[19,131084,131085],{},"额外标签法也称为隔墙法",[19,131087,131088],{},"使用方式：",[19,131090,131091],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[93,131093,131094],{"className":126534,"code":131000,"language":126536,"meta":23,"style":23},[99,131095,131096,131102,131112,131116,131122,131132],{"__ignoreMap":23},[102,131097,131098,131100],{"class":104,"line":105},[102,131099,131007],{"class":1952},[102,131101,15562],{"class":112},[102,131103,131104,131106,131108,131110],{"class":104,"line":24},[102,131105,131014],{"class":161},[102,131107,51428],{"class":112},[102,131109,23726],{"class":161},[102,131111,1279],{"class":112},[102,131113,131114],{"class":104,"line":1168},[102,131115,1554],{"class":112},[102,131117,131118,131120],{"class":104,"line":1183},[102,131119,131029],{"class":1952},[102,131121,15562],{"class":112},[102,131123,131124,131126,131128,131130],{"class":104,"line":1189},[102,131125,131014],{"class":161},[102,131127,51428],{"class":112},[102,131129,72513],{"class":161},[102,131131,1279],{"class":112},[102,131133,131134],{"class":104,"line":1203},[102,131135,1554],{"class":112},[19,131137,131138],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131140,131141],{},"优点： 通俗易懂，书写方便",[19,131143,131144],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131146,131147],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131149,131150],{},"法二",[19,131152,131153],{},"父级添加overflow属性",[93,131155,131156],{"className":126534,"code":131000,"language":126536,"meta":23,"style":23},[99,131157,131158,131164,131174,131178,131184,131194],{"__ignoreMap":23},[102,131159,131160,131162],{"class":104,"line":105},[102,131161,131007],{"class":1952},[102,131163,15562],{"class":112},[102,131165,131166,131168,131170,131172],{"class":104,"line":24},[102,131167,131014],{"class":161},[102,131169,51428],{"class":112},[102,131171,23726],{"class":161},[102,131173,1279],{"class":112},[102,131175,131176],{"class":104,"line":1168},[102,131177,1554],{"class":112},[102,131179,131180,131182],{"class":104,"line":1183},[102,131181,131029],{"class":1952},[102,131183,15562],{"class":112},[102,131185,131186,131188,131190,131192],{"class":104,"line":1189},[102,131187,131014],{"class":161},[102,131189,51428],{"class":112},[102,131191,72513],{"class":161},[102,131193,1279],{"class":112},[102,131195,131196],{"class":104,"line":1203},[102,131197,1554],{"class":112},[19,131199,131200],{},"overflow: hidden;",[19,131202,131203],{},"优点：代码简洁",[19,131205,131206],{},"缺点：无法显示溢出的部分",[19,131208,131209],{},"注意：是给父元素添加代码",[19,131211,131212],{},"法三",[19,131214,131215],{},"父级添加after伪元素",[19,131217,131218,131221],{},[131219,131220],"after",{}," 方式是额外标签法的升级版",[19,131223,131224],{},"使用的时候复制就可以",[93,131226,131227],{"className":126534,"code":131000,"language":126536,"meta":23,"style":23},[99,131228,131229,131235,131245,131249,131255,131265],{"__ignoreMap":23},[102,131230,131231,131233],{"class":104,"line":105},[102,131232,131007],{"class":1952},[102,131234,15562],{"class":112},[102,131236,131237,131239,131241,131243],{"class":104,"line":24},[102,131238,131014],{"class":161},[102,131240,51428],{"class":112},[102,131242,23726],{"class":161},[102,131244,1279],{"class":112},[102,131246,131247],{"class":104,"line":1168},[102,131248,1554],{"class":112},[102,131250,131251,131253],{"class":104,"line":1183},[102,131252,131029],{"class":1952},[102,131254,15562],{"class":112},[102,131256,131257,131259,131261,131263],{"class":104,"line":1189},[102,131258,131014],{"class":161},[102,131260,51428],{"class":112},[102,131262,72513],{"class":161},[102,131264,1279],{"class":112},[102,131266,131267],{"class":104,"line":1203},[102,131268,1554],{"class":112},[19,131270,131271],{},"优点：没有增加标签，结构更简单",[19,131273,131274],{},"缺点：照顾低版本浏览器",[19,131276,131277],{},"代表网站： 百度、淘宝网、网易等",[19,131279,131280],{},"法四",[19,131282,131283],{},"父级添加双伪元素",[93,131285,131286],{"className":126534,"code":131000,"language":126536,"meta":23,"style":23},[99,131287,131288,131294,131304,131308,131314,131324],{"__ignoreMap":23},[102,131289,131290,131292],{"class":104,"line":105},[102,131291,131007],{"class":1952},[102,131293,15562],{"class":112},[102,131295,131296,131298,131300,131302],{"class":104,"line":24},[102,131297,131014],{"class":161},[102,131299,51428],{"class":112},[102,131301,23726],{"class":161},[102,131303,1279],{"class":112},[102,131305,131306],{"class":104,"line":1168},[102,131307,1554],{"class":112},[102,131309,131310,131312],{"class":104,"line":1183},[102,131311,131029],{"class":1952},[102,131313,15562],{"class":112},[102,131315,131316,131318,131320,131322],{"class":104,"line":1189},[102,131317,131014],{"class":161},[102,131319,51428],{"class":112},[102,131321,72513],{"class":161},[102,131323,1279],{"class":112},[102,131325,131326],{"class":104,"line":1203},[102,131327,1554],{"class":112},[19,131329,131330],{},"优点：代码更简洁",[19,131332,131274],{},[19,131334,131335],{},"代表网站：小米、腾讯等",[14,131337,131339],{"id":131338},"_93-ps切图","9.3 PS切图",[73,131341,131343],{"id":131342},"_931-常见图片格式","9.3.1 常见图片格式",[250,131345,131346,131356],{},[253,131347,131348],{},[256,131349,131350,131353],{},[259,131351,131352],{"align":23726},"jpg图像格式",[259,131354,131355],{"align":23726},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[297,131357,131358,131366,131374],{},[256,131359,131360,131363],{},[302,131361,131362],{"align":23726},"gif图像格式",[302,131364,131365],{"align":23726},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[256,131367,131368,131371],{},[302,131369,131370],{"align":23726},"png图像格式",[302,131372,131373],{"align":23726},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[256,131375,131376,131379],{},[302,131377,131378],{"align":23726},"PSD图像格式",[302,131380,131381],{"align":23726},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[73,131383,131385],{"id":131384},"_932-图层切图","9.3.2 图层切图",[19,131387,131388],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131390,131391],{},"按住shift选中两个图层->图层菜单->合并图层",[73,131393,131395],{"id":131394},"_933-切片切图","9.3.3 切片切图",[1120,131397,131398,131401],{},[59,131399,131400],{},"利用切片工具手动划出",[59,131402,131403],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[73,131405,131407],{"id":131406},"_934-切图步骤","9.3.4 切图步骤",[19,131409,131410],{},"用切片工具选中：",[1451,131412],{"style":126390,"src":131413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131415,131416],{},"文件 -> 导出",[1451,131418],{"style":126390,"src":131419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5116,131421,131422],{},"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":23,"searchDepth":24,"depth":24,"links":131424},[131425,131434,131438],{"id":129861,"depth":24,"text":129862,"children":131426},[131427,131428,131429,131430,131431,131432,131433],{"id":129886,"depth":1168,"text":129887},{"id":130177,"depth":1168,"text":130178},{"id":130306,"depth":1168,"text":130307},{"id":130506,"depth":1168,"text":130507},{"id":130548,"depth":1168,"text":130549},{"id":130586,"depth":1168,"text":130587},{"id":130676,"depth":1168,"text":130677},{"id":130956,"depth":24,"text":130957,"children":131435},[131436,131437],{"id":130960,"depth":1168,"text":130961},{"id":130967,"depth":1168,"text":130968},{"id":131338,"depth":24,"text":131339,"children":131439},[131440,131441,131442,131443],{"id":131342,"depth":1168,"text":131343},{"id":131384,"depth":1168,"text":131385},{"id":131394,"depth":1168,"text":131395},{"id":131406,"depth":1168,"text":131407},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129853,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131450,"title":131451,"body":131452,"description":27,"extension":28,"meta":132093,"navigation":30,"path":132094,"seo":132095,"stem":132096,"__hash__":132097},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131453,"toc":132081},[131454,131457,131461,131487,131521,131525,131529,131532,131574,131581,131591,131599,131601,131604,131607,131610,131617,131631,131635,131638,131667,131671,131674,131688,131692,131695,131723,131727,131730,131756,131760,131765,131798,131803,131831,131835,131852,131898,131903,131947,131964,132071,132079],[10,131455,131451],{"id":131456},"_10-css规范与学成在线案例",[14,131458,131460],{"id":131459},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[56,131462,131463,131469,131475,131481],{},[59,131464,131465,131468],{},[262,131466,131467],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[59,131470,131471,131474],{},[262,131472,131473],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[59,131476,131477,131480],{},[262,131478,131479],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[59,131482,131483,131486],{},[262,131484,131485],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[93,131488,131489],{"className":126534,"code":129898,"language":126536,"meta":23,"style":23},[99,131490,131491,131495,131501,131517],{"__ignoreMap":23},[102,131492,131493],{"class":104,"line":105},[102,131494,129905],{"class":171},[102,131496,131497,131499],{"class":104,"line":24},[102,131498,51602],{"class":51291},[102,131500,15562],{"class":112},[102,131502,131503,131505,131507,131509,131511,131513,131515],{"class":104,"line":1168},[102,131504,70887],{"class":161},[102,131506,51428],{"class":112},[102,131508,330],{"class":161},[102,131510,51483],{"class":108},[102,131512,51512],{"class":161},[102,131514,129926],{"class":161},[102,131516,1279],{"class":112},[102,131518,131519],{"class":104,"line":1183},[102,131520,1554],{"class":112},[14,131522,131524],{"id":131523},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[73,131526,131528],{"id":131527},"_1021-header头部制作","10.2.1 header头部制作",[1451,131530],{"style":126390,"src":131531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1120,131533,131534,131541,131548,131554,131561,131568],{},[59,131535,131536,131537,131540],{},"1号是版心盒子 ",[262,131538,131539],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[59,131542,131543,131544,131547],{},"版心盒子 里面包含 2号盒子 ",[262,131545,131546],{},"logo"," 图标",[59,131549,131550,131551,131553],{},"版心盒子 里面包含 3号盒子 ",[262,131552,53704],{}," 导航栏",[59,131555,131556,131557,131560],{},"版心盒子 里面包含 4号盒子 ",[262,131558,131559],{},"search"," 搜索框",[59,131562,131563,131564,131567],{},"版心盒子 里面包含 5号盒子 ",[262,131565,131566],{},"user"," 个人信息",[59,131569,131570,131571],{},"注意，要求里面的 ",[262,131572,131573],{},"4个子盒子 必须都浮动",[56,131575,131576],{},[59,131577,131578],{},[262,131579,131580],{},"导航栏注意点:",[19,131582,131583,131584,131587,131588],{},"实际开发中， ",[262,131585,131586],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[262,131589,131590],{},"用 li 包含链接(li+a)的做法",[1120,131592,131593,131596],{},[59,131594,131595],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[59,131597,131598],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131600,9015],{},[19,131602,131603],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131605,131606],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131608,131609],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[56,131611,131612],{"start":24},[59,131613,131614],{},[262,131615,131616],{},"4号盒子search的细节：",[1120,131618,131619,131622,131625],{},[59,131620,131621],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[59,131623,131624],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[59,131626,131627,131630],{},[99,131628,131629],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[73,131632,131634],{"id":131633},"_1022-banner制作","10.2.2 banner制作",[1451,131636],{"style":126390,"src":131637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1120,131639,131640,131647,131653,131660],{},[59,131641,131642,131643,131646],{},"1号盒子是通栏的大盒子 ",[262,131644,131645],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[59,131648,131649,131650,131652],{},"2号盒子是版心 ",[262,131651,908],{}," ， 要水平居中对齐",[59,131654,131655,131656,131659],{},"3号盒子版心内，左对齐 ",[262,131657,131658],{},"subnav"," 侧导航栏",[59,131661,131662,131663,131666],{},"4号盒子版心内，右对齐 ",[262,131664,131665],{},"course"," 课程",[73,131668,131670],{"id":131669},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1451,131672],{"style":126390,"src":131673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1120,131675,131676,131679,131682,131685],{},[59,131677,131678],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[59,131680,131681],{},"1号盒子是标题 H3 左侧浮动",[59,131683,131684],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[59,131686,131687],{},"3号盒子 右浮动 mod 修改",[73,131689,131691],{"id":131690},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1451,131693],{"style":126390,"src":131694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1120,131696,131697,131703,131710,131717,131720],{},[59,131698,131699,131700,131702],{},"1号盒子为最大的盒子 ",[262,131701,53705],{}," 版心水平居中对齐",[59,131704,131705,131706,131709],{},"2号盒子为上面部分 ",[262,131707,131708],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[59,131711,131712,131713,131716],{},"3号盒子为底下部分 ",[262,131714,131715],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[59,131718,131719],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[59,131721,131722],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[73,131724,131726],{"id":131725},"_1025-底部模块制作","10.2.5 底部模块制作",[1451,131728],{"style":126390,"src":131729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1120,131731,131732,131739,131742,131749],{},[59,131733,131734,131735,131738],{},"1号盒子通栏大盒子 底部 ",[262,131736,131737],{},"footer"," 给高度 底色是白色",[59,131740,131741],{},"2号盒子版心水平居中",[59,131743,131744,131745,131748],{},"3号盒子版权 ",[262,131746,131747],{},"copyright"," 左对齐",[59,131750,131751,131752,131755],{},"4号盒子 链接组 ",[262,131753,131754],{},"links"," 右对齐",[73,131757,131759],{"id":131758},"_1026-代码模块","10.2.6 代码模块",[56,131761,131762],{},[59,131763,131764],{},"html部分",[93,131766,131768],{"className":127281,"code":131767,"language":127283,"meta":23,"style":23},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[99,131769,131770],{"__ignoreMap":23},[102,131771,131772,131774,131776,131778,131780,131783,131786,131788,131791,131794,131796],{"class":104,"line":105},[102,131773,1023],{"class":112},[102,131775,351],{"class":51291},[102,131777,61048],{"class":1952},[102,131779,158],{"class":112},[102,131781,131782],{"class":217},"\"https:\u002F\u002Fexample.com\"",[102,131784,131785],{"class":1952}," target",[102,131787,158],{"class":112},[102,131789,131790],{"class":217},"\"_blank\"",[102,131792,131793],{"class":112},">链接文字\u003C\u002F",[102,131795,351],{"class":51291},[102,131797,51298],{"class":112},[56,131799,131800],{"start":24},[59,131801,131802],{},"css部分",[93,131804,131805],{"className":127281,"code":131767,"language":127283,"meta":23,"style":23},[99,131806,131807],{"__ignoreMap":23},[102,131808,131809,131811,131813,131815,131817,131819,131821,131823,131825,131827,131829],{"class":104,"line":105},[102,131810,1023],{"class":112},[102,131812,351],{"class":51291},[102,131814,61048],{"class":1952},[102,131816,158],{"class":112},[102,131818,131782],{"class":217},[102,131820,131785],{"class":1952},[102,131822,158],{"class":112},[102,131824,131790],{"class":217},[102,131826,131793],{"class":112},[102,131828,351],{"class":51291},[102,131830,51298],{"class":112},[73,131832,131834],{"id":131833},"_1027-收获","10.2.7 收获",[56,131836,131837,131840,131843,131846,131849],{},[59,131838,131839],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[59,131841,131842],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[59,131844,131845],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[59,131847,131848],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[59,131850,131851],{},"遗忘代码",[93,131853,131855],{"className":126534,"code":131854,"language":126536,"meta":23,"style":23},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[99,131856,131857,131879,131884,131894],{"__ignoreMap":23},[102,131858,131859,131861,131863,131865,131867,131869,131871,131873,131875,131877],{"class":104,"line":105},[102,131860,51602],{"class":51291},[102,131862,12425],{"class":112},[102,131864,19],{"class":51291},[102,131866,12425],{"class":112},[102,131868,10],{"class":51291},[102,131870,12425],{"class":112},[102,131872,1120],{"class":51291},[102,131874,12425],{"class":112},[102,131876,59],{"class":51291},[102,131878,15562],{"class":112},[102,131880,131881],{"class":104,"line":24},[102,131882,131883],{"class":171},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[102,131885,131886,131888,131890,131892],{"class":104,"line":1168},[102,131887,128150],{"class":161},[102,131889,51428],{"class":112},[102,131891,60860],{"class":161},[102,131893,1279],{"class":112},[102,131895,131896],{"class":104,"line":1183},[102,131897,1554],{"class":112},[56,131899,131900],{"start":1203},[59,131901,131902],{},"html引css的程序",[93,131904,131905],{"className":126534,"code":131854,"language":126536,"meta":23,"style":23},[99,131906,131907,131929,131933,131943],{"__ignoreMap":23},[102,131908,131909,131911,131913,131915,131917,131919,131921,131923,131925,131927],{"class":104,"line":105},[102,131910,51602],{"class":51291},[102,131912,12425],{"class":112},[102,131914,19],{"class":51291},[102,131916,12425],{"class":112},[102,131918,10],{"class":51291},[102,131920,12425],{"class":112},[102,131922,1120],{"class":51291},[102,131924,12425],{"class":112},[102,131926,59],{"class":51291},[102,131928,15562],{"class":112},[102,131930,131931],{"class":104,"line":24},[102,131932,131883],{"class":171},[102,131934,131935,131937,131939,131941],{"class":104,"line":1168},[102,131936,128150],{"class":161},[102,131938,51428],{"class":112},[102,131940,60860],{"class":161},[102,131942,1279],{"class":112},[102,131944,131945],{"class":104,"line":1183},[102,131946,1554],{"class":112},[56,131948,131949,131952,131955,131958,131961],{"start":1209},[59,131950,131951],{},"浮动的盒子不会有外边距合并问题",[59,131953,131954],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[59,131956,131957],{},"ctrl+g快速定位行；shift+alt多个光标",[59,131959,131960],{},"学习上方各个模块的选择器起名方法，以后就这样用",[59,131962,131963],{},"在写选择器时尽量写全一些，例如",[93,131965,131967],{"className":126534,"code":131966,"language":126536,"meta":23,"style":23},"\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",[99,131968,131969,131974,131990,131995,132010,132015,132030,132035,132050,132055],{"__ignoreMap":23},[102,131970,131971],{"class":104,"line":105},[102,131972,131973],{"class":171},"\u002F* 静态定位（默认） *\u002F\n",[102,131975,131976,131979,131981,131983,131985,131988],{"class":104,"line":24},[102,131977,131978],{"class":1952},".static",[102,131980,79798],{"class":112},[102,131982,128894],{"class":161},[102,131984,51428],{"class":112},[102,131986,131987],{"class":161},"static",[102,131989,129464],{"class":112},[102,131991,131992],{"class":104,"line":1168},[102,131993,131994],{"class":171},"\u002F* 相对定位 *\u002F\n",[102,131996,131997,132000,132002,132004,132006,132008],{"class":104,"line":1183},[102,131998,131999],{"class":1952},".relative",[102,132001,79798],{"class":112},[102,132003,128894],{"class":161},[102,132005,51428],{"class":112},[102,132007,54755],{"class":161},[102,132009,129464],{"class":112},[102,132011,132012],{"class":104,"line":1189},[102,132013,132014],{"class":171},"\u002F* 绝对定位 *\u002F\n",[102,132016,132017,132020,132022,132024,132026,132028],{"class":104,"line":1203},[102,132018,132019],{"class":1952},".absolute",[102,132021,79798],{"class":112},[102,132023,128894],{"class":161},[102,132025,51428],{"class":112},[102,132027,54822],{"class":161},[102,132029,129464],{"class":112},[102,132031,132032],{"class":104,"line":1209},[102,132033,132034],{"class":171},"\u002F* 固定定位 *\u002F\n",[102,132036,132037,132040,132042,132044,132046,132048],{"class":104,"line":1300},[102,132038,132039],{"class":1952},".fixed",[102,132041,79798],{"class":112},[102,132043,128894],{"class":161},[102,132045,51428],{"class":112},[102,132047,86224],{"class":161},[102,132049,129464],{"class":112},[102,132051,132052],{"class":104,"line":1306},[102,132053,132054],{"class":171},"\u002F* 粘性定位 *\u002F\n",[102,132056,132057,132060,132062,132064,132066,132069],{"class":104,"line":1318},[102,132058,132059],{"class":1952},".sticky",[102,132061,79798],{"class":112},[102,132063,128894],{"class":161},[102,132065,51428],{"class":112},[102,132067,132068],{"class":161},"sticky",[102,132070,129464],{"class":112},[56,132072,132073,132076],{"start":1606},[59,132074,132075],{},"一定要用好注释",[59,132077,132078],{},"浮动的盒子不会有外边距合并的问题",[5116,132080,131422],{},{"title":23,"searchDepth":24,"depth":24,"links":132082},[132083,132084],{"id":131459,"depth":24,"text":131460},{"id":131523,"depth":24,"text":131524,"children":132085},[132086,132087,132088,132089,132090,132091,132092],{"id":131527,"depth":1168,"text":131528},{"id":131633,"depth":1168,"text":131634},{"id":131669,"depth":1168,"text":131670},{"id":131690,"depth":1168,"text":131691},{"id":131725,"depth":1168,"text":131726},{"id":131758,"depth":1168,"text":131759},{"id":131833,"depth":1168,"text":131834},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131451,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132099,"title":132100,"body":132101,"description":27,"extension":28,"meta":133587,"navigation":30,"path":133588,"seo":133589,"stem":133590,"__hash__":133591},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132102,"toc":133579},[132103,132106,132110,132114,132125,132129,132146,132190,132223,132226,132243,132246,132249,132293,132297,132301,132304,132307,132311,132314,132325,132388,132429,132432,132447,132501,132509,132512,132523,132577,132603,132606,132619,132673,132705,132759,132782,132836,132839,132842,132849,132903,132924,132978,132981,132984,133069,133077,133134,133157,133161,133164,133182,133186,133205,133259,133297,133301,133304,133307,133329,133333,133341,133344,133349,133360,133363,133367,133381,133425,133428,133432,133435,133440,133466,133471,133548,133551,133555,133558,133561,133564,133567,133570,133573,133576],[10,132104,132100],{"id":132105},"_11-传统布局与定位体系",[14,132107,132109],{"id":132108},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[73,132111,132113],{"id":132112},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1120,132115,132116,132119,132122],{},[59,132117,132118],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[59,132120,132121],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[59,132123,132124],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[73,132126,132128],{"id":132127},"_1112-浮动","11.1.2 浮动",[1120,132130,132131,132134,132137,132140,132143],{},[59,132132,132133],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[59,132135,132136],{},"浮动可以改变元素标签默认的排列方式",[59,132138,132139],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[59,132141,132142],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[59,132144,132145],{},"在使用行内块转换时盒子之间是有空隙的",[93,132147,132148],{"className":126534,"code":131000,"language":126536,"meta":23,"style":23},[99,132149,132150,132156,132166,132170,132176,132186],{"__ignoreMap":23},[102,132151,132152,132154],{"class":104,"line":105},[102,132153,131007],{"class":1952},[102,132155,15562],{"class":112},[102,132157,132158,132160,132162,132164],{"class":104,"line":24},[102,132159,131014],{"class":161},[102,132161,51428],{"class":112},[102,132163,23726],{"class":161},[102,132165,1279],{"class":112},[102,132167,132168],{"class":104,"line":1168},[102,132169,1554],{"class":112},[102,132171,132172,132174],{"class":104,"line":1183},[102,132173,131029],{"class":1952},[102,132175,15562],{"class":112},[102,132177,132178,132180,132182,132184],{"class":104,"line":1189},[102,132179,131014],{"class":161},[102,132181,51428],{"class":112},[102,132183,72513],{"class":161},[102,132185,1279],{"class":112},[102,132187,132188],{"class":104,"line":1203},[102,132189,1554],{"class":112},[250,132191,132192,132200],{},[253,132193,132194],{},[256,132195,132196,132198],{},[259,132197,126998],{"align":23726},[259,132199,27480],{"align":23726},[297,132201,132202,132209,132216],{},[256,132203,132204,132206],{},[302,132205,54728],{"align":23726},[302,132207,132208],{"align":23726},"元素不浮动（默认值）",[256,132210,132211,132213],{},[302,132212,23726],{"align":23726},[302,132214,132215],{"align":23726},"元素向左浮动",[256,132217,132218,132220],{},[302,132219,72513],{"align":23726},[302,132221,132222],{"align":23726},"元素向右浮动",[19,132224,132225],{},"浮动重点：",[1120,132227,132228,132231,132234,132237,132240],{},[59,132229,132230],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[59,132232,132233],{},"浮动的元素会一行内显示并且元素顶部对齐",[59,132235,132236],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[59,132238,132239],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[59,132241,132242],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132244,132245],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132247,132248],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[93,132250,132251],{"className":126534,"code":131000,"language":126536,"meta":23,"style":23},[99,132252,132253,132259,132269,132273,132279,132289],{"__ignoreMap":23},[102,132254,132255,132257],{"class":104,"line":105},[102,132256,131007],{"class":1952},[102,132258,15562],{"class":112},[102,132260,132261,132263,132265,132267],{"class":104,"line":24},[102,132262,131014],{"class":161},[102,132264,51428],{"class":112},[102,132266,23726],{"class":161},[102,132268,1279],{"class":112},[102,132270,132271],{"class":104,"line":1168},[102,132272,1554],{"class":112},[102,132274,132275,132277],{"class":104,"line":1183},[102,132276,131029],{"class":1952},[102,132278,15562],{"class":112},[102,132280,132281,132283,132285,132287],{"class":104,"line":1189},[102,132282,131014],{"class":161},[102,132284,51428],{"class":112},[102,132286,72513],{"class":161},[102,132288,1279],{"class":112},[102,132290,132291],{"class":104,"line":1203},[102,132292,1554],{"class":112},[73,132294,132296],{"id":132295},"_1113-定位","11.1.3 定位",[21988,132298,132300],{"id":132299},"_11131-使用场景","11.1.3.1 使用场景",[19,132302,132303],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132305,132306],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21988,132308,132310],{"id":132309},"_11132-定位组成","11.1.3.2 定位组成",[19,132312,132313],{},"定位 = 定位模式 + 边偏移",[56,132315,132316],{},[59,132317,132318,132321,132322],{},[262,132319,132320],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[262,132323,132324],{},"定位模式",[93,132326,132328],{"className":126534,"code":132327,"language":126536,"meta":23,"style":23},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[99,132329,132330,132336,132350,132367,132384],{"__ignoreMap":23},[102,132331,132332,132334],{"class":104,"line":105},[102,132333,130382],{"class":1952},[102,132335,15562],{"class":112},[102,132337,132338,132341,132343,132345,132347],{"class":104,"line":24},[102,132339,132340],{"class":161},"  position",[102,132342,51428],{"class":112},[102,132344,54755],{"class":161},[102,132346,130397],{"class":112},[102,132348,132349],{"class":171},"\u002F* 定位模式 *\u002F\n",[102,132351,132352,132355,132357,132359,132361,132364],{"class":104,"line":1168},[102,132353,132354],{"class":161},"  top",[102,132356,51428],{"class":112},[102,132358,559],{"class":161},[102,132360,51483],{"class":108},[102,132362,132363],{"class":112},";           ",[102,132365,132366],{"class":171},"\u002F* 边偏移：上 *\u002F\n",[102,132368,132369,132372,132374,132376,132378,132381],{"class":104,"line":1183},[102,132370,132371],{"class":161},"  left",[102,132373,51428],{"class":112},[102,132375,813],{"class":161},[102,132377,51483],{"class":108},[102,132379,132380],{"class":112},";          ",[102,132382,132383],{"class":171},"\u002F* 边偏移：左 *\u002F\n",[102,132385,132386],{"class":104,"line":1189},[102,132387,1554],{"class":112},[250,132389,132390,132399],{},[253,132391,132392],{},[256,132393,132394,132396],{},[259,132395,265],{"align":23726},[259,132397,132398],{"align":23726},"语义",[297,132400,132401,132408,132415,132422],{},[256,132402,132403,132405],{},[302,132404,131987],{"align":23726},[302,132406,132407],{"align":23726},"静态定位",[256,132409,132410,132412],{},[302,132411,54755],{"align":23726},[302,132413,132414],{"align":23726},"相对定位",[256,132416,132417,132419],{},[302,132418,54822],{"align":23726},[302,132420,132421],{"align":23726},"绝对定位",[256,132423,132424,132426],{},[302,132425,86224],{"align":23726},[302,132427,132428],{"align":23726},"固定定位",[19,132430,132431],{},"（1）静态定位：",[1120,132433,132434,132445],{},[59,132435,132436,132437,132440,132441,132444],{},"静态定位是元素的 ",[262,132438,132439],{},"默认定位方式"," ， ",[262,132442,132443],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[59,132446,5171],{},[93,132448,132449],{"className":126534,"code":132327,"language":126536,"meta":23,"style":23},[99,132450,132451,132457,132469,132483,132497],{"__ignoreMap":23},[102,132452,132453,132455],{"class":104,"line":105},[102,132454,130382],{"class":1952},[102,132456,15562],{"class":112},[102,132458,132459,132461,132463,132465,132467],{"class":104,"line":24},[102,132460,132340],{"class":161},[102,132462,51428],{"class":112},[102,132464,54755],{"class":161},[102,132466,130397],{"class":112},[102,132468,132349],{"class":171},[102,132470,132471,132473,132475,132477,132479,132481],{"class":104,"line":1168},[102,132472,132354],{"class":161},[102,132474,51428],{"class":112},[102,132476,559],{"class":161},[102,132478,51483],{"class":108},[102,132480,132363],{"class":112},[102,132482,132366],{"class":171},[102,132484,132485,132487,132489,132491,132493,132495],{"class":104,"line":1183},[102,132486,132371],{"class":161},[102,132488,51428],{"class":112},[102,132490,813],{"class":161},[102,132492,51483],{"class":108},[102,132494,132380],{"class":112},[102,132496,132383],{"class":171},[102,132498,132499],{"class":104,"line":1189},[102,132500,1554],{"class":112},[1120,132502,132503,132506],{},[59,132504,132505],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[59,132507,132508],{},"静态定位在布局时我们几乎不用的",[19,132510,132511],{},"（2）相对定位",[1120,132513,132514,132521],{},[59,132515,132516,132517,132520],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[262,132518,132519],{},"原来的位置"," 来说的（自恋型）",[59,132522,5171],{},[93,132524,132525],{"className":126534,"code":132327,"language":126536,"meta":23,"style":23},[99,132526,132527,132533,132545,132559,132573],{"__ignoreMap":23},[102,132528,132529,132531],{"class":104,"line":105},[102,132530,130382],{"class":1952},[102,132532,15562],{"class":112},[102,132534,132535,132537,132539,132541,132543],{"class":104,"line":24},[102,132536,132340],{"class":161},[102,132538,51428],{"class":112},[102,132540,54755],{"class":161},[102,132542,130397],{"class":112},[102,132544,132349],{"class":171},[102,132546,132547,132549,132551,132553,132555,132557],{"class":104,"line":1168},[102,132548,132354],{"class":161},[102,132550,51428],{"class":112},[102,132552,559],{"class":161},[102,132554,51483],{"class":108},[102,132556,132363],{"class":112},[102,132558,132366],{"class":171},[102,132560,132561,132563,132565,132567,132569,132571],{"class":104,"line":1183},[102,132562,132371],{"class":161},[102,132564,51428],{"class":112},[102,132566,813],{"class":161},[102,132568,51483],{"class":108},[102,132570,132380],{"class":112},[102,132572,132383],{"class":171},[102,132574,132575],{"class":104,"line":1189},[102,132576,1554],{"class":112},[1120,132578,132579],{},[59,132580,132581,132582,132584,132585,132587,132588,132591,132592,132595,132596,132598,132599,132602],{},"相对定位的特点：",[53707,132583],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53707,132586],{},"  ② ",[262,132589,132590],{},"原来"," 在标准流的 ",[262,132593,132594],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53707,132597],{},"  ③因此， ",[262,132600,132601],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132604,132605],{},"（3）绝对定位",[1120,132607,132608,132617],{},[59,132609,132610,132612,132613,132616],{},[262,132611,132421],{}," 是元素在移动位置的时候，是相对于它 ",[262,132614,132615],{},"祖先元素"," 来说的（拼爹型）",[59,132618,5171],{},[93,132620,132621],{"className":126534,"code":132327,"language":126536,"meta":23,"style":23},[99,132622,132623,132629,132641,132655,132669],{"__ignoreMap":23},[102,132624,132625,132627],{"class":104,"line":105},[102,132626,130382],{"class":1952},[102,132628,15562],{"class":112},[102,132630,132631,132633,132635,132637,132639],{"class":104,"line":24},[102,132632,132340],{"class":161},[102,132634,51428],{"class":112},[102,132636,54755],{"class":161},[102,132638,130397],{"class":112},[102,132640,132349],{"class":171},[102,132642,132643,132645,132647,132649,132651,132653],{"class":104,"line":1168},[102,132644,132354],{"class":161},[102,132646,51428],{"class":112},[102,132648,559],{"class":161},[102,132650,51483],{"class":108},[102,132652,132363],{"class":112},[102,132654,132366],{"class":171},[102,132656,132657,132659,132661,132663,132665,132667],{"class":104,"line":1183},[102,132658,132371],{"class":161},[102,132660,51428],{"class":112},[102,132662,813],{"class":161},[102,132664,51483],{"class":108},[102,132666,132380],{"class":112},[102,132668,132383],{"class":171},[102,132670,132671],{"class":104,"line":1189},[102,132672,1554],{"class":112},[1120,132674,132675,132690,132699,132702],{},[59,132676,132677,132678,132680,132681,132683,132684,132686,132687,132689],{},"绝对定位的特点：",[53707,132679],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53707,132682],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53707,132685],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53707,132688],{},"  (4)固定定位",[59,132691,132692,132694,132695,132698],{},[262,132693,132428],{}," 是元素 ",[262,132696,132697],{},"固定于浏览器可视区的位置"," 。（认死理型）",[59,132700,132701],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[59,132703,132704],{},"语法:",[93,132706,132707],{"className":126534,"code":132327,"language":126536,"meta":23,"style":23},[99,132708,132709,132715,132727,132741,132755],{"__ignoreMap":23},[102,132710,132711,132713],{"class":104,"line":105},[102,132712,130382],{"class":1952},[102,132714,15562],{"class":112},[102,132716,132717,132719,132721,132723,132725],{"class":104,"line":24},[102,132718,132340],{"class":161},[102,132720,51428],{"class":112},[102,132722,54755],{"class":161},[102,132724,130397],{"class":112},[102,132726,132349],{"class":171},[102,132728,132729,132731,132733,132735,132737,132739],{"class":104,"line":1168},[102,132730,132354],{"class":161},[102,132732,51428],{"class":112},[102,132734,559],{"class":161},[102,132736,51483],{"class":108},[102,132738,132363],{"class":112},[102,132740,132366],{"class":171},[102,132742,132743,132745,132747,132749,132751,132753],{"class":104,"line":1183},[102,132744,132371],{"class":161},[102,132746,51428],{"class":112},[102,132748,813],{"class":161},[102,132750,51483],{"class":108},[102,132752,132380],{"class":112},[102,132754,132383],{"class":171},[102,132756,132757],{"class":104,"line":1189},[102,132758,1554],{"class":112},[1120,132760,132761,132770],{},[59,132762,132763,132764,132766,132767,132769],{},"特点:",[53707,132765],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53707,132768],{},"  ②固定定位不再占有原先的位置,完全脱标",[59,132771,132772,132773,132775,132776,132778,132779,132781],{},"固定在版心位置的方法:",[53707,132774],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53707,132777],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53707,132780],{},"  实例：",[93,132783,132784],{"className":126534,"code":132327,"language":126536,"meta":23,"style":23},[99,132785,132786,132792,132804,132818,132832],{"__ignoreMap":23},[102,132787,132788,132790],{"class":104,"line":105},[102,132789,130382],{"class":1952},[102,132791,15562],{"class":112},[102,132793,132794,132796,132798,132800,132802],{"class":104,"line":24},[102,132795,132340],{"class":161},[102,132797,51428],{"class":112},[102,132799,54755],{"class":161},[102,132801,130397],{"class":112},[102,132803,132349],{"class":171},[102,132805,132806,132808,132810,132812,132814,132816],{"class":104,"line":1168},[102,132807,132354],{"class":161},[102,132809,51428],{"class":112},[102,132811,559],{"class":161},[102,132813,51483],{"class":108},[102,132815,132363],{"class":112},[102,132817,132366],{"class":171},[102,132819,132820,132822,132824,132826,132828,132830],{"class":104,"line":1183},[102,132821,132371],{"class":161},[102,132823,51428],{"class":112},[102,132825,813],{"class":161},[102,132827,51483],{"class":108},[102,132829,132380],{"class":112},[102,132831,132383],{"class":171},[102,132833,132834],{"class":104,"line":1189},[102,132835,1554],{"class":112},[1451,132837],{"style":126390,"src":132838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,132840,132841],{},"(5)粘性定位",[1120,132843,132844,132847],{},[59,132845,132846],{},"粘性定位可以被认为是相对定位和固定定位的混合",[59,132848,5171],{},[93,132850,132851],{"className":126534,"code":132327,"language":126536,"meta":23,"style":23},[99,132852,132853,132859,132871,132885,132899],{"__ignoreMap":23},[102,132854,132855,132857],{"class":104,"line":105},[102,132856,130382],{"class":1952},[102,132858,15562],{"class":112},[102,132860,132861,132863,132865,132867,132869],{"class":104,"line":24},[102,132862,132340],{"class":161},[102,132864,51428],{"class":112},[102,132866,54755],{"class":161},[102,132868,130397],{"class":112},[102,132870,132349],{"class":171},[102,132872,132873,132875,132877,132879,132881,132883],{"class":104,"line":1168},[102,132874,132354],{"class":161},[102,132876,51428],{"class":112},[102,132878,559],{"class":161},[102,132880,51483],{"class":108},[102,132882,132363],{"class":112},[102,132884,132366],{"class":171},[102,132886,132887,132889,132891,132893,132895,132897],{"class":104,"line":1183},[102,132888,132371],{"class":161},[102,132890,51428],{"class":112},[102,132892,813],{"class":161},[102,132894,51483],{"class":108},[102,132896,132380],{"class":112},[102,132898,132383],{"class":171},[102,132900,132901],{"class":104,"line":1189},[102,132902,1554],{"class":112},[1120,132904,132905],{},[59,132906,132907,132908,132910,132911,132913,132914,132916,132917,132920,132921,132923],{},"粘性定位的特点：",[53707,132909],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53707,132912],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53707,132915],{},"  ③必须添加 top 、left、right、bottom ",[262,132918,132919],{},"其中一个"," 才有效",[53707,132922],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[93,132925,132926],{"className":126534,"code":132327,"language":126536,"meta":23,"style":23},[99,132927,132928,132934,132946,132960,132974],{"__ignoreMap":23},[102,132929,132930,132932],{"class":104,"line":105},[102,132931,130382],{"class":1952},[102,132933,15562],{"class":112},[102,132935,132936,132938,132940,132942,132944],{"class":104,"line":24},[102,132937,132340],{"class":161},[102,132939,51428],{"class":112},[102,132941,54755],{"class":161},[102,132943,130397],{"class":112},[102,132945,132349],{"class":171},[102,132947,132948,132950,132952,132954,132956,132958],{"class":104,"line":1168},[102,132949,132354],{"class":161},[102,132951,51428],{"class":112},[102,132953,559],{"class":161},[102,132955,51483],{"class":108},[102,132957,132363],{"class":112},[102,132959,132366],{"class":171},[102,132961,132962,132964,132966,132968,132970,132972],{"class":104,"line":1183},[102,132963,132371],{"class":161},[102,132965,51428],{"class":112},[102,132967,813],{"class":161},[102,132969,51483],{"class":108},[102,132971,132380],{"class":112},[102,132973,132383],{"class":171},[102,132975,132976],{"class":104,"line":1189},[102,132977,1554],{"class":112},[1451,132979],{"style":126390,"src":132980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,132982,132983],{},"(6)总结",[250,132985,132986,133001],{},[253,132987,132988],{},[256,132989,132990,132992,132995,132998],{},[259,132991,132324],{"align":23726},[259,132993,132994],{"align":23726},"是否脱标",[259,132996,132997],{"align":23726},"移动位置",[259,132999,133000],{"align":23726},"是否常用",[297,133002,133003,133016,133030,133044,133057],{},[256,133004,133005,133008,133010,133013],{},[302,133006,133007],{"align":23726},"Static 静态定位",[302,133009,104669],{"align":23726},[302,133011,133012],{"align":23726},"不能使用边偏移",[302,133014,133015],{"align":23726},"很少",[256,133017,133018,133021,133024,133027],{},[302,133019,133020],{"align":23726},"Relative 相对定位",[302,133022,133023],{"align":23726},"否(占有位置)",[302,133025,133026],{"align":23726},"相对于自身位置移动",[302,133028,133029],{"align":23726},"基本单独使用",[256,133031,133032,133035,133038,133041],{},[302,133033,133034],{"align":23726},"Absolute 绝对定位",[302,133036,133037],{"align":23726},"是(不占有位置)",[302,133039,133040],{"align":23726},"带有定位的父级",[302,133042,133043],{"align":23726},"要和定位父级元素搭配使用",[256,133045,133046,133049,133051,133054],{},[302,133047,133048],{"align":23726},"Fixed 固定定位",[302,133050,133037],{"align":23726},[302,133052,133053],{"align":23726},"浏览器可视区",[302,133055,133056],{"align":23726},"单独使用,不需要父级",[256,133058,133059,133062,133064,133066],{},[302,133060,133061],{"align":23726},"Sticky 粘性定位",[302,133063,133023],{"align":23726},[302,133065,133053],{"align":23726},[302,133067,133068],{"align":23726},"当前阶段少",[56,133070,133071],{"start":24},[59,133072,133073,133076],{},[262,133074,133075],{},"边偏移"," 则决定了该元素的最终位置",[250,133078,133079,133090],{},[253,133080,133081],{},[256,133082,133083,133086,133088],{},[259,133084,133085],{"align":23726},"边偏移属性",[259,133087,27483],{"align":23726},[259,133089,27480],{"align":23726},[297,133091,133092,133103,133114,133124],{},[256,133093,133094,133097,133100],{},[302,133095,133096],{"align":23726},"top",[302,133098,133099],{"align":23726},"top: 80px;",[302,133101,133102],{"align":23726},"顶端偏移量，定义元素相对于父元素上边线的距离",[256,133104,133105,133108,133111],{},[302,133106,133107],{"align":23726},"bottom",[302,133109,133110],{"align":23726},"bottom: 80px ;",[302,133112,133113],{"align":23726},"底部偏移量，定义元素相对于其父元素下边线的距离",[256,133115,133116,133118,133121],{},[302,133117,23726],{"align":23726},[302,133119,133120],{"align":23726},"left: 80px ;",[302,133122,133123],{"align":23726},"左侧偏移量，定义元素相对于其父元素左边线的距离",[256,133125,133126,133128,133131],{},[302,133127,72513],{"align":23726},[302,133129,133130],{"align":23726},"right: 80px ;",[302,133132,133133],{"align":23726},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1120,133135,133136],{},[59,133137,9015,133138,133140,133141,133143,133144,133146,133147,133150,133151,133153,133154,133156],{},[53707,133139],{},"  ① ",[262,133142,133075],{}," 需要和 ",[262,133145,132324],{}," 联合使用， ",[262,133148,133149],{},"单独使用无效"," ；",[53707,133152],{},"  ②top和bottom不要同时使用",[53707,133155],{},"  ③left和right不要同时使用",[21988,133158,133160],{"id":133159},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133162,133163],{},"子级是绝对定位的话，父级要用相对定位",[1120,133165,133166,133169,133172,133175],{},[59,133167,133168],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[59,133170,133171],{},"父盒子需要加定位限制子盒子在父盒子内显示",[59,133173,133174],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[59,133176,133177,133178,133181],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[262,133179,133180],{},"子绝父绝"," 也会遇到",[21988,133183,133185],{"id":133184},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1120,133187,133188,133203],{},[59,133189,133190,133191,133194,133195,133198,133199,133202],{},"在使用 ",[262,133192,133193],{},"定位"," 布局时，可能会 ",[262,133196,133197],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[262,133200,133201],{},"z-index"," 来控制盒子的前后次序 (z轴)",[59,133204,5171],{},[93,133206,133207],{"className":126534,"code":132327,"language":126536,"meta":23,"style":23},[99,133208,133209,133215,133227,133241,133255],{"__ignoreMap":23},[102,133210,133211,133213],{"class":104,"line":105},[102,133212,130382],{"class":1952},[102,133214,15562],{"class":112},[102,133216,133217,133219,133221,133223,133225],{"class":104,"line":24},[102,133218,132340],{"class":161},[102,133220,51428],{"class":112},[102,133222,54755],{"class":161},[102,133224,130397],{"class":112},[102,133226,132349],{"class":171},[102,133228,133229,133231,133233,133235,133237,133239],{"class":104,"line":1168},[102,133230,132354],{"class":161},[102,133232,51428],{"class":112},[102,133234,559],{"class":161},[102,133236,51483],{"class":108},[102,133238,132363],{"class":112},[102,133240,132366],{"class":171},[102,133242,133243,133245,133247,133249,133251,133253],{"class":104,"line":1183},[102,133244,132371],{"class":161},[102,133246,51428],{"class":112},[102,133248,813],{"class":161},[102,133250,51483],{"class":108},[102,133252,132380],{"class":112},[102,133254,132383],{"class":171},[102,133256,133257],{"class":104,"line":1189},[102,133258,1554],{"class":112},[1120,133260,133261],{},[59,133262,133263,133264,133140,133266,133268,133269,127697,133272,82530,133275,133277,133278,133280,133281,133284,133285,133150,133288,133290,133291,133294,133296],{},"z-index的特性",[53707,133265],{},[262,133267,126998],{}," ： ",[262,133270,133271],{},"正整数",[262,133273,133274],{},"负整数",[262,133276,304],{}," ，默认值是 0，数值越大，盒子越靠上；",[53707,133279],{},"  ②如果 ",[262,133282,133283],{},"属性值相同"," ，则按照书写顺序， ",[262,133286,133287],{},"后来居上",[53707,133289],{},"  ③数字后面 ",[262,133292,133293],{},"不能加单位",[53707,133295],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21988,133298,133300],{"id":133299},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133302,133303],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133305,133306],{},"方法:",[1120,133308,133309,133319],{},[59,133310,133311,133312,133315,133316],{},"left: 50%; 让 ",[262,133313,133314],{},"盒子的左侧"," 移动到 ",[262,133317,133318],{},"父级元素的水平中心位置",[59,133320,133321,133322,133325,133326],{},"margin-left: -100px; 让盒子 ",[262,133323,133324],{},"向左"," 移动 ",[262,133327,133328],{},"自身宽度的一半",[21988,133330,133332],{"id":133331},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[56,133334,133335,133338],{},[59,133336,133337],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[59,133339,133340],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133342,133343],{},"也就是说绝对定位和固定定位和浮动类似",[56,133345,133346],{"start":1168},[59,133347,133348],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1120,133350,133351,133354,133357],{},[59,133352,133353],{},"可以用inline-block 转换为行内块",[59,133355,133356],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[59,133358,133359],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133361,133362],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21988,133364,133366],{"id":133365},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[56,133368,133369,133372,133375,133378],{},[59,133370,133371],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[59,133373,133374],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[59,133376,133377],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[59,133379,133380],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[93,133382,133383],{"className":126534,"code":131000,"language":126536,"meta":23,"style":23},[99,133384,133385,133391,133401,133405,133411,133421],{"__ignoreMap":23},[102,133386,133387,133389],{"class":104,"line":105},[102,133388,131007],{"class":1952},[102,133390,15562],{"class":112},[102,133392,133393,133395,133397,133399],{"class":104,"line":24},[102,133394,131014],{"class":161},[102,133396,51428],{"class":112},[102,133398,23726],{"class":161},[102,133400,1279],{"class":112},[102,133402,133403],{"class":104,"line":1168},[102,133404,1554],{"class":112},[102,133406,133407,133409],{"class":104,"line":1183},[102,133408,131029],{"class":1952},[102,133410,15562],{"class":112},[102,133412,133413,133415,133417,133419],{"class":104,"line":1189},[102,133414,131014],{"class":161},[102,133416,51428],{"class":112},[102,133418,72513],{"class":161},[102,133420,1279],{"class":112},[102,133422,133423],{"class":104,"line":1203},[102,133424,1554],{"class":112},[1451,133426],{"style":126390,"src":133427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21988,133429,133431],{"id":133430},"_11138-轮播图","11.1.3.8 轮播图",[1451,133433],{"style":126390,"src":133434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[56,133436,133437],{},[59,133438,133439],{},"制作顺序:",[1120,133441,133442,133445,133448,133457],{},[59,133443,133444],{},"大盒子我们类名为： tb-promo 淘宝广告",[59,133446,133447],{},"里面先放一张图片",[59,133449,133450,133451,133453,133454,133456],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53707,133452],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53707,133455],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[59,133458,133459,133460,133462,133463,133465],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53707,133461],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53707,133464],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[56,133467,133468],{"start":24},[59,133469,133470],{},"代码模块",[93,133472,133474],{"className":126534,"code":133473,"language":126536,"meta":23,"style":23},"\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",[99,133475,133476,133481,133488,133498,133508,133518,133522,133527,133534,133544],{"__ignoreMap":23},[102,133477,133478],{"class":104,"line":105},[102,133479,133480],{"class":171},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[102,133482,133483,133486],{"class":104,"line":24},[102,133484,133485],{"class":1952},".son",[102,133487,15562],{"class":112},[102,133489,133490,133492,133494,133496],{"class":104,"line":1168},[102,133491,132340],{"class":161},[102,133493,51428],{"class":112},[102,133495,54822],{"class":161},[102,133497,1279],{"class":112},[102,133499,133500,133502,133504,133506],{"class":104,"line":1183},[102,133501,132354],{"class":161},[102,133503,51428],{"class":112},[102,133505,304],{"class":161},[102,133507,1279],{"class":112},[102,133509,133510,133512,133514,133516],{"class":104,"line":1189},[102,133511,132371],{"class":161},[102,133513,51428],{"class":112},[102,133515,304],{"class":161},[102,133517,1279],{"class":112},[102,133519,133520],{"class":104,"line":1203},[102,133521,1554],{"class":112},[102,133523,133524],{"class":104,"line":1209},[102,133525,133526],{"class":171},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[102,133528,133529,133532],{"class":104,"line":1300},[102,133530,133531],{"class":1952},".father",[102,133533,15562],{"class":112},[102,133535,133536,133538,133540,133542],{"class":104,"line":1306},[102,133537,132340],{"class":161},[102,133539,51428],{"class":112},[102,133541,54755],{"class":161},[102,133543,1279],{"class":112},[102,133545,133546],{"class":104,"line":1318},[102,133547,1554],{"class":112},[19,133549,133550],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[73,133552,133554],{"id":133553},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1451,133556],{"style":126390,"src":133557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133559,133560],{},"✨ 黄金口诀：",[19,133562,133563],{},"\"TOP正下负上，LEFT正右负左\"",[19,133565,133566],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133568,133569],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133571,133572],{},"✨ 简单记：",[19,133574,133575],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5116,133577,133578],{},"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":23,"searchDepth":24,"depth":24,"links":133580},[133581],{"id":132108,"depth":24,"text":132109,"children":133582},[133583,133584,133585,133586],{"id":132112,"depth":1168,"text":132113},{"id":132127,"depth":1168,"text":132128},{"id":132295,"depth":1168,"text":132296},{"id":133553,"depth":1168,"text":133554},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132100,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133593,"title":133594,"body":133595,"description":27,"extension":28,"meta":135018,"navigation":30,"path":135019,"seo":135020,"stem":135021,"__hash__":135022},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133596,"toc":134997},[133597,133600,133604,133612,133616,133621,133629,133641,133645,133650,133658,133669,133673,133678,133719,133727,133731,133734,133737,133740,133834,133837,133931,133934,134028,134031,134034,134069,134072,134075,134105,134108,134111,134114,134117,134120,134123,134126,134196,134199,134203,134207,134248,134252,134258,134261,134264,134268,134271,134274,134277,134358,134361,134364,134368,134372,134375,134378,134381,134384,134387,134393,134402,134406,134425,134429,134439,134442,134445,134448,134451,134454,134457,134460,134463,134472,134476,134485,134488,134493,134546,134551,134717,134720,134723,134728,134731,134734,134737,134740,134745,134893,134896,134899,134904,134907,134912,134946,134949,134952,134956,134959,134966,134969,134972,134975,134978,134981,134984,134987,134991,134994],[10,133598,133594],{"id":133599},"_12-显示隐藏与图形资源",[14,133601,133603],{"id":133602},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1120,133605,133606,133609],{},[59,133607,133608],{},"目的:让一个元素在页面中消失或者显示出来",[59,133610,133611],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[73,133613,133615],{"id":133614},"_1211-display-显示","12.1.1 display 显示",[56,133617,133618],{},[59,133619,133620],{},"display 设置或检索对象是否及如何显示",[1120,133622,133623,133626],{},[59,133624,133625],{},"display: none;隐藏对象",[59,133627,133628],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[56,133630,133631,133638],{"start":24},[59,133632,133633,133634,133637],{},"特点： display 隐藏元素后， ",[262,133635,133636],{},"不再占"," 有原来的位置",[59,133639,133640],{},"在js中使用非常的广泛",[73,133642,133644],{"id":133643},"_1212-visibility可见性","12.1.2 visibility可见性",[56,133646,133647],{},[59,133648,133649],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1120,133651,133652,133655],{},[59,133653,133654],{},"visibility： visible；元素可见",[59,133656,133657],{},"visibility：hidden；元素隐藏",[56,133659,133660,133663,133666],{"start":24},[59,133661,133662],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[59,133664,133665],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[59,133667,133668],{},"隐藏后继续占有原有位置",[73,133670,133672],{"id":133671},"_1213-overflow溢出","12.1.3 overflow溢出",[1120,133674,133675],{},[59,133676,133677],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[250,133679,133680,133688],{},[253,133681,133682],{},[256,133683,133684,133686],{},[259,133685,126998],{"align":23726},[259,133687,27480],{"align":23726},[297,133689,133690,133698,133705,133712],{},[256,133691,133692,133695],{},[302,133693,133694],{"align":23726},"visible",[302,133696,133697],{"align":23726},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[256,133699,133700,133702],{},[302,133701,61705],{"align":23726},[302,133703,133704],{"align":23726},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[256,133706,133707,133709],{},[302,133708,128954],{"align":23726},[302,133710,133711],{"align":23726},"不管超出内容否，总是显示滚动条",[256,133713,133714,133716],{},[302,133715,72654],{"align":23726},[302,133717,133718],{"align":23726},"超出自动显示滚动条，不超出不显示滚动条",[1120,133720,133721,133724],{},[59,133722,133723],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[59,133725,133726],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[73,133728,133730],{"id":133729},"_1214-案例收获","12.1.4 案例收获",[1451,133732],{"style":126390,"src":133733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133735,133736],{},"问题：没做出来动态效果，使用hover没实现",[19,133738,133739],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[93,133741,133742],{"className":126534,"code":131966,"language":126536,"meta":23,"style":23},[99,133743,133744,133748,133762,133766,133780,133784,133798,133802,133816,133820],{"__ignoreMap":23},[102,133745,133746],{"class":104,"line":105},[102,133747,131973],{"class":171},[102,133749,133750,133752,133754,133756,133758,133760],{"class":104,"line":24},[102,133751,131978],{"class":1952},[102,133753,79798],{"class":112},[102,133755,128894],{"class":161},[102,133757,51428],{"class":112},[102,133759,131987],{"class":161},[102,133761,129464],{"class":112},[102,133763,133764],{"class":104,"line":1168},[102,133765,131994],{"class":171},[102,133767,133768,133770,133772,133774,133776,133778],{"class":104,"line":1183},[102,133769,131999],{"class":1952},[102,133771,79798],{"class":112},[102,133773,128894],{"class":161},[102,133775,51428],{"class":112},[102,133777,54755],{"class":161},[102,133779,129464],{"class":112},[102,133781,133782],{"class":104,"line":1189},[102,133783,132014],{"class":171},[102,133785,133786,133788,133790,133792,133794,133796],{"class":104,"line":1203},[102,133787,132019],{"class":1952},[102,133789,79798],{"class":112},[102,133791,128894],{"class":161},[102,133793,51428],{"class":112},[102,133795,54822],{"class":161},[102,133797,129464],{"class":112},[102,133799,133800],{"class":104,"line":1209},[102,133801,132034],{"class":171},[102,133803,133804,133806,133808,133810,133812,133814],{"class":104,"line":1300},[102,133805,132039],{"class":1952},[102,133807,79798],{"class":112},[102,133809,128894],{"class":161},[102,133811,51428],{"class":112},[102,133813,86224],{"class":161},[102,133815,129464],{"class":112},[102,133817,133818],{"class":104,"line":1306},[102,133819,132054],{"class":171},[102,133821,133822,133824,133826,133828,133830,133832],{"class":104,"line":1318},[102,133823,132059],{"class":1952},[102,133825,79798],{"class":112},[102,133827,128894],{"class":161},[102,133829,51428],{"class":112},[102,133831,132068],{"class":161},[102,133833,129464],{"class":112},[19,133835,133836],{},"完整代码：",[93,133838,133839],{"className":126534,"code":131966,"language":126536,"meta":23,"style":23},[99,133840,133841,133845,133859,133863,133877,133881,133895,133899,133913,133917],{"__ignoreMap":23},[102,133842,133843],{"class":104,"line":105},[102,133844,131973],{"class":171},[102,133846,133847,133849,133851,133853,133855,133857],{"class":104,"line":24},[102,133848,131978],{"class":1952},[102,133850,79798],{"class":112},[102,133852,128894],{"class":161},[102,133854,51428],{"class":112},[102,133856,131987],{"class":161},[102,133858,129464],{"class":112},[102,133860,133861],{"class":104,"line":1168},[102,133862,131994],{"class":171},[102,133864,133865,133867,133869,133871,133873,133875],{"class":104,"line":1183},[102,133866,131999],{"class":1952},[102,133868,79798],{"class":112},[102,133870,128894],{"class":161},[102,133872,51428],{"class":112},[102,133874,54755],{"class":161},[102,133876,129464],{"class":112},[102,133878,133879],{"class":104,"line":1189},[102,133880,132014],{"class":171},[102,133882,133883,133885,133887,133889,133891,133893],{"class":104,"line":1203},[102,133884,132019],{"class":1952},[102,133886,79798],{"class":112},[102,133888,128894],{"class":161},[102,133890,51428],{"class":112},[102,133892,54822],{"class":161},[102,133894,129464],{"class":112},[102,133896,133897],{"class":104,"line":1209},[102,133898,132034],{"class":171},[102,133900,133901,133903,133905,133907,133909,133911],{"class":104,"line":1300},[102,133902,132039],{"class":1952},[102,133904,79798],{"class":112},[102,133906,128894],{"class":161},[102,133908,51428],{"class":112},[102,133910,86224],{"class":161},[102,133912,129464],{"class":112},[102,133914,133915],{"class":104,"line":1306},[102,133916,132054],{"class":171},[102,133918,133919,133921,133923,133925,133927,133929],{"class":104,"line":1318},[102,133920,132059],{"class":1952},[102,133922,79798],{"class":112},[102,133924,128894],{"class":161},[102,133926,51428],{"class":112},[102,133928,132068],{"class":161},[102,133930,129464],{"class":112},[19,133932,133933],{},"分布思路重点详解：",[93,133935,133936],{"className":126534,"code":131966,"language":126536,"meta":23,"style":23},[99,133937,133938,133942,133956,133960,133974,133978,133992,133996,134010,134014],{"__ignoreMap":23},[102,133939,133940],{"class":104,"line":105},[102,133941,131973],{"class":171},[102,133943,133944,133946,133948,133950,133952,133954],{"class":104,"line":24},[102,133945,131978],{"class":1952},[102,133947,79798],{"class":112},[102,133949,128894],{"class":161},[102,133951,51428],{"class":112},[102,133953,131987],{"class":161},[102,133955,129464],{"class":112},[102,133957,133958],{"class":104,"line":1168},[102,133959,131994],{"class":171},[102,133961,133962,133964,133966,133968,133970,133972],{"class":104,"line":1183},[102,133963,131999],{"class":1952},[102,133965,79798],{"class":112},[102,133967,128894],{"class":161},[102,133969,51428],{"class":112},[102,133971,54755],{"class":161},[102,133973,129464],{"class":112},[102,133975,133976],{"class":104,"line":1189},[102,133977,132014],{"class":171},[102,133979,133980,133982,133984,133986,133988,133990],{"class":104,"line":1203},[102,133981,132019],{"class":1952},[102,133983,79798],{"class":112},[102,133985,128894],{"class":161},[102,133987,51428],{"class":112},[102,133989,54822],{"class":161},[102,133991,129464],{"class":112},[102,133993,133994],{"class":104,"line":1209},[102,133995,132034],{"class":171},[102,133997,133998,134000,134002,134004,134006,134008],{"class":104,"line":1300},[102,133999,132039],{"class":1952},[102,134001,79798],{"class":112},[102,134003,128894],{"class":161},[102,134005,51428],{"class":112},[102,134007,86224],{"class":161},[102,134009,129464],{"class":112},[102,134011,134012],{"class":104,"line":1306},[102,134013,132054],{"class":171},[102,134015,134016,134018,134020,134022,134024,134026],{"class":104,"line":1318},[102,134017,132059],{"class":1952},[102,134019,79798],{"class":112},[102,134021,128894],{"class":161},[102,134023,51428],{"class":112},[102,134025,132068],{"class":161},[102,134027,129464],{"class":112},[1451,134029],{"style":126390,"src":134030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134032,134033],{},"图片太大，盒子太小，此时需要修改图片的大小",[93,134035,134037],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[99,134038,134039],{"__ignoreMap":23},[102,134040,134041,134043,134045,134047,134049,134052,134054,134056,134059,134062,134064,134067],{"class":104,"line":105},[102,134042,1023],{"class":112},[102,134044,1451],{"class":51291},[102,134046,55230],{"class":1952},[102,134048,158],{"class":112},[102,134050,134051],{"class":217},"\"images\u002Fpic.jpg\"",[102,134053,55238],{"class":1952},[102,134055,158],{"class":112},[102,134057,134058],{"class":217},"\"描述文字\"",[102,134060,134061],{"class":1952}," title",[102,134063,158],{"class":112},[102,134065,134066],{"class":217},"\"悬停提示\"",[102,134068,51298],{"class":112},[1451,134070],{"style":126390,"src":134071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134073,134074],{},"制造遮罩层",[93,134076,134077],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,134078,134079],{"__ignoreMap":23},[102,134080,134081,134083,134085,134087,134089,134091,134093,134095,134097,134099,134101,134103],{"class":104,"line":105},[102,134082,1023],{"class":112},[102,134084,1451],{"class":51291},[102,134086,55230],{"class":1952},[102,134088,158],{"class":112},[102,134090,134051],{"class":217},[102,134092,55238],{"class":1952},[102,134094,158],{"class":112},[102,134096,134058],{"class":217},[102,134098,134061],{"class":1952},[102,134100,158],{"class":112},[102,134102,134066],{"class":217},[102,134104,51298],{"class":112},[19,134106,134107],{},"此时是这样的为标准流",[1451,134109],{"style":126390,"src":134110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134112,134113],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134115,134116],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134118,134119],{},"让他在中间，用center(background-position)",[19,134121,134122],{},"将需要变的尽可能放到一个盒子中",[19,134124,134125],{},"放大盒子上内部盒子发生变化",[93,134127,134129],{"className":126534,"code":134128,"language":126536,"meta":23,"style":23},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[99,134130,134131,134137,134147,134151,134158,134168,134180,134192],{"__ignoreMap":23},[102,134132,134133,134135],{"class":104,"line":105},[102,134134,127601],{"class":1952},[102,134136,15562],{"class":112},[102,134138,134139,134141,134143,134145],{"class":104,"line":24},[102,134140,132340],{"class":161},[102,134142,51428],{"class":112},[102,134144,54755],{"class":161},[102,134146,1279],{"class":112},[102,134148,134149],{"class":104,"line":1168},[102,134150,1554],{"class":112},[102,134152,134153,134156],{"class":104,"line":1183},[102,134154,134155],{"class":1952},".child",[102,134157,15562],{"class":112},[102,134159,134160,134162,134164,134166],{"class":104,"line":1189},[102,134161,132340],{"class":161},[102,134163,51428],{"class":112},[102,134165,54822],{"class":161},[102,134167,1279],{"class":112},[102,134169,134170,134172,134174,134176,134178],{"class":104,"line":1203},[102,134171,132354],{"class":161},[102,134173,51428],{"class":112},[102,134175,769],{"class":161},[102,134177,441],{"class":108},[102,134179,1279],{"class":112},[102,134181,134182,134184,134186,134188,134190],{"class":104,"line":1209},[102,134183,132371],{"class":161},[102,134185,51428],{"class":112},[102,134187,769],{"class":161},[102,134189,441],{"class":108},[102,134191,1279],{"class":112},[102,134193,134194],{"class":104,"line":1300},[102,134195,1554],{"class":112},[19,134197,134198],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134200,134202],{"id":134201},"_122-精灵图","12.2 精灵图",[73,134204,134206],{"id":134205},"_1221-理解","12.2.1 理解",[56,134208,134209,134227],{},[59,134210,134211,134212,132440,134215,134218,134219,134222,134223,134226],{},"目的： ",[262,134213,134214],{},"为了有效地减少服务器接收和发送请求的次数",[262,134216,134217],{},"提高"," 页面的 ",[262,134220,134221],{},"加载速度"," ，出现了 ",[262,134224,134225],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[59,134228,134229,134230,134232,134233,134235,134236,134238,134239,134241,134242,134244,134245,134247],{},"使用精灵图核心：",[53707,134231],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53707,134234],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53707,134237],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53707,134240],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53707,134243],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53707,134246],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[73,134249,134251],{"id":134250},"_1222-扒图","12.2.2 扒图",[93,134253,134256],{"className":134254,"code":134255,"language":5177},[5175],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[99,134257,134255],{"__ignoreMap":23},[1451,134259],{"style":126390,"src":134260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1451,134262],{"style":126390,"src":134263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[73,134265,134267],{"id":134266},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1451,134269],{"style":126390,"src":134270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134272,134273],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1451,134275],{"style":126390,"src":134276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[93,134278,134280],{"className":126534,"code":134279,"language":126536,"meta":23,"style":23},"\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",[99,134281,134282,134287,134294,134306,134318,134337,134354],{"__ignoreMap":23},[102,134283,134284],{"class":104,"line":105},[102,134285,134286],{"class":171},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[102,134288,134289,134292],{"class":104,"line":24},[102,134290,134291],{"class":1952},".icon",[102,134293,15562],{"class":112},[102,134295,134296,134298,134300,134302,134304],{"class":104,"line":1168},[102,134297,70559],{"class":161},[102,134299,51428],{"class":112},[102,134301,813],{"class":161},[102,134303,51483],{"class":108},[102,134305,1279],{"class":112},[102,134307,134308,134310,134312,134314,134316],{"class":104,"line":1183},[102,134309,70779],{"class":161},[102,134311,51428],{"class":112},[102,134313,813],{"class":161},[102,134315,51483],{"class":108},[102,134317,1279],{"class":112},[102,134319,134320,134322,134324,134326,134328,134331,134333,134335],{"class":104,"line":1189},[102,134321,70602],{"class":161},[102,134323,51428],{"class":112},[102,134325,61717],{"class":161},[102,134327,113],{"class":112},[102,134329,134330],{"class":5206},"sprites.png",[102,134332,13704],{"class":112},[102,134334,61727],{"class":161},[102,134336,1279],{"class":112},[102,134338,134339,134341,134343,134345,134347,134350,134352],{"class":104,"line":1203},[102,134340,128794],{"class":161},[102,134342,51428],{"class":112},[102,134344,51754],{"class":161},[102,134346,51483],{"class":108},[102,134348,134349],{"class":161}," -20",[102,134351,51483],{"class":108},[102,134353,1279],{"class":112},[102,134355,134356],{"class":104,"line":1209},[102,134357,1554],{"class":112},[1451,134359],{"style":126390,"src":134360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134362,134363],{},"在前端中坐标轴的正方向是右和下",[14,134365,134367],{"id":134366},"_123-字体图标","12.3 字体图标",[73,134369,134371],{"id":134370},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134373,134374],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134376,134377],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134379,134380],{},"1.图片文件还是比较大的。",[19,134382,134383],{},"2.图片本身放大和缩小会失真。",[19,134385,134386],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134388,134389,134390,25731],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[262,134391,134392],{},"字体图标 iconfont",[19,134394,134395,134398,134399,28376],{},[262,134396,134397],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[262,134400,134401],{},"展示的是图标，本质属于字体",[73,134403,134405],{"id":134404},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1120,134407,134408,134413,134416,134419,134422],{},[59,134409,134410,134412],{},[262,134411,25867],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[59,134414,134415],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[59,134417,134418],{},"兼容性：几乎支持所有的浏览器，请放心使用",[59,134420,134421],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[59,134423,134424],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[73,134426,134428],{"id":134427},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1120,134430,134431],{},[59,134432,134433,134434],{},"icomoon字体库：",[351,134435,134438],{"href":134436,"rel":134437},"http:\u002F\u002Ficomoon.io\u002F",[23855],"http:\u002F\u002Ficomoon.io",[19,134440,134441],{},"进去之后点icomoon app",[1451,134443],{"style":126390,"src":134444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134446,134447],{},"可以对其编辑：",[1451,134449],{"style":126390,"src":134450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134452,134453],{},"生成字体：",[1451,134455],{"style":126390,"src":134456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134458,134459],{},"下载：",[1451,134461],{"style":126390,"src":134462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1120,134464,134465],{},[59,134466,134467,134468],{},"阿里iconfont字体库： ",[351,134469,134470],{"href":134470,"rel":134471},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23855],[73,134473,134475],{"id":134474},"_1234-字体图标的引入","12.3.4 字体图标的引入",[56,134477,134478],{},[59,134479,134480,134481,134484],{},"把下载包里面的 ",[262,134482,134483],{},"fonts"," 文件夹放入页面根目录下",[1451,134486],{"style":126390,"src":134487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[56,134489,134490],{"start":24},[59,134491,134492],{},"字体文件格式",[250,134494,134495,134504],{},[253,134496,134497],{},[256,134498,134499,134502],{},[259,134500,134501],{"align":23726},"格式",[259,134503,23730],{"align":23726},[297,134505,134506,134516,134526,134536],{},[256,134507,134508,134513],{},[302,134509,134510],{"align":23726},[262,134511,134512],{},".ttf",[302,134514,134515],{"align":23726},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[256,134517,134518,134523],{},[302,134519,134520],{"align":23726},[262,134521,134522],{},".woff",[302,134524,134525],{"align":23726},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[256,134527,134528,134533],{},[302,134529,134530],{"align":23726},[262,134531,134532],{},".eot",[302,134534,134535],{"align":23726},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[256,134537,134538,134543],{},[302,134539,134540],{"align":23726},[262,134541,134542],{},"svg",[302,134544,134545],{"align":23726},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[56,134547,134548],{"start":1168},[59,134549,134550],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[93,134552,134554],{"className":126534,"code":134553,"language":126536,"meta":23,"style":23},"\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",[99,134555,134556,134561,134568,134580,134596,134621,134642,134662,134682,134686,134692,134702,134713],{"__ignoreMap":23},[102,134557,134558],{"class":104,"line":105},[102,134559,134560],{"class":171},"\u002F* 引入字体图标 *\u002F\n",[102,134562,134563,134566],{"class":104,"line":24},[102,134564,134565],{"class":108},"@font-face",[102,134567,15562],{"class":112},[102,134569,134570,134573,134575,134578],{"class":104,"line":1168},[102,134571,134572],{"class":161},"  font-family",[102,134574,51428],{"class":112},[102,134576,134577],{"class":217},"'icomoon'",[102,134579,1279],{"class":112},[102,134581,134582,134585,134587,134589,134591,134594],{"class":104,"line":1183},[102,134583,134584],{"class":161},"  src",[102,134586,51428],{"class":112},[102,134588,61717],{"class":161},[102,134590,113],{"class":112},[102,134592,134593],{"class":217},"'fonts\u002Ficomoon.eot'",[102,134595,2708],{"class":112},[102,134597,134598,134600,134602,134604,134606,134609,134611,134614,134616,134619],{"class":104,"line":1189},[102,134599,134584],{"class":161},[102,134601,51428],{"class":112},[102,134603,61717],{"class":161},[102,134605,113],{"class":112},[102,134607,134608],{"class":217},"'fonts\u002Ficomoon.eot?#iefix'",[102,134610,13704],{"class":112},[102,134612,134613],{"class":161},"format",[102,134615,113],{"class":112},[102,134617,134618],{"class":217},"'embedded-opentype'",[102,134620,38038],{"class":112},[102,134622,134623,134626,134628,134631,134633,134635,134637,134640],{"class":104,"line":1203},[102,134624,134625],{"class":161},"       url",[102,134627,113],{"class":112},[102,134629,134630],{"class":217},"'fonts\u002Ficomoon.woff'",[102,134632,13704],{"class":112},[102,134634,134613],{"class":161},[102,134636,113],{"class":112},[102,134638,134639],{"class":217},"'woff'",[102,134641,38038],{"class":112},[102,134643,134644,134646,134648,134651,134653,134655,134657,134660],{"class":104,"line":1209},[102,134645,134625],{"class":161},[102,134647,113],{"class":112},[102,134649,134650],{"class":217},"'fonts\u002Ficomoon.ttf'",[102,134652,13704],{"class":112},[102,134654,134613],{"class":161},[102,134656,113],{"class":112},[102,134658,134659],{"class":217},"'truetype'",[102,134661,38038],{"class":112},[102,134663,134664,134666,134668,134671,134673,134675,134677,134680],{"class":104,"line":1300},[102,134665,134625],{"class":161},[102,134667,113],{"class":112},[102,134669,134670],{"class":217},"'fonts\u002Ficomoon.svg#icomoon'",[102,134672,13704],{"class":112},[102,134674,134613],{"class":161},[102,134676,113],{"class":112},[102,134678,134679],{"class":217},"'svg'",[102,134681,2708],{"class":112},[102,134683,134684],{"class":104,"line":1306},[102,134685,1554],{"class":112},[102,134687,134688,134690],{"class":104,"line":1318},[102,134689,134291],{"class":1952},[102,134691,15562],{"class":112},[102,134693,134694,134696,134698,134700],{"class":104,"line":1601},[102,134695,134572],{"class":161},[102,134697,51428],{"class":112},[102,134699,134577],{"class":217},[102,134701,1279],{"class":112},[102,134703,134704,134707,134709,134711],{"class":104,"line":1606},[102,134705,134706],{"class":161},"  font-style",[102,134708,51428],{"class":112},[102,134710,63832],{"class":161},[102,134712,1279],{"class":112},[102,134714,134715],{"class":104,"line":1612},[102,134716,1554],{"class":112},[19,134718,134719],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1451,134721],{"style":126390,"src":134722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[56,134724,134725],{"start":1183},[59,134726,134727],{},"添加字体",[1451,134729],{"style":126390,"src":134730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134732,134733],{},"复制：",[1451,134735],{"style":126390,"src":134736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134738,134739],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[56,134741,134742],{"start":1189},[59,134743,134744],{},"代码展示：",[93,134746,134747],{"className":126534,"code":134553,"language":126536,"meta":23,"style":23},[99,134748,134749,134753,134759,134769,134783,134805,134823,134841,134859,134863,134869,134879,134889],{"__ignoreMap":23},[102,134750,134751],{"class":104,"line":105},[102,134752,134560],{"class":171},[102,134754,134755,134757],{"class":104,"line":24},[102,134756,134565],{"class":108},[102,134758,15562],{"class":112},[102,134760,134761,134763,134765,134767],{"class":104,"line":1168},[102,134762,134572],{"class":161},[102,134764,51428],{"class":112},[102,134766,134577],{"class":217},[102,134768,1279],{"class":112},[102,134770,134771,134773,134775,134777,134779,134781],{"class":104,"line":1183},[102,134772,134584],{"class":161},[102,134774,51428],{"class":112},[102,134776,61717],{"class":161},[102,134778,113],{"class":112},[102,134780,134593],{"class":217},[102,134782,2708],{"class":112},[102,134784,134785,134787,134789,134791,134793,134795,134797,134799,134801,134803],{"class":104,"line":1189},[102,134786,134584],{"class":161},[102,134788,51428],{"class":112},[102,134790,61717],{"class":161},[102,134792,113],{"class":112},[102,134794,134608],{"class":217},[102,134796,13704],{"class":112},[102,134798,134613],{"class":161},[102,134800,113],{"class":112},[102,134802,134618],{"class":217},[102,134804,38038],{"class":112},[102,134806,134807,134809,134811,134813,134815,134817,134819,134821],{"class":104,"line":1203},[102,134808,134625],{"class":161},[102,134810,113],{"class":112},[102,134812,134630],{"class":217},[102,134814,13704],{"class":112},[102,134816,134613],{"class":161},[102,134818,113],{"class":112},[102,134820,134639],{"class":217},[102,134822,38038],{"class":112},[102,134824,134825,134827,134829,134831,134833,134835,134837,134839],{"class":104,"line":1209},[102,134826,134625],{"class":161},[102,134828,113],{"class":112},[102,134830,134650],{"class":217},[102,134832,13704],{"class":112},[102,134834,134613],{"class":161},[102,134836,113],{"class":112},[102,134838,134659],{"class":217},[102,134840,38038],{"class":112},[102,134842,134843,134845,134847,134849,134851,134853,134855,134857],{"class":104,"line":1300},[102,134844,134625],{"class":161},[102,134846,113],{"class":112},[102,134848,134670],{"class":217},[102,134850,13704],{"class":112},[102,134852,134613],{"class":161},[102,134854,113],{"class":112},[102,134856,134679],{"class":217},[102,134858,2708],{"class":112},[102,134860,134861],{"class":104,"line":1306},[102,134862,1554],{"class":112},[102,134864,134865,134867],{"class":104,"line":1318},[102,134866,134291],{"class":1952},[102,134868,15562],{"class":112},[102,134870,134871,134873,134875,134877],{"class":104,"line":1601},[102,134872,134572],{"class":161},[102,134874,51428],{"class":112},[102,134876,134577],{"class":217},[102,134878,1279],{"class":112},[102,134880,134881,134883,134885,134887],{"class":104,"line":1606},[102,134882,134706],{"class":161},[102,134884,51428],{"class":112},[102,134886,63832],{"class":161},[102,134888,1279],{"class":112},[102,134890,134891],{"class":104,"line":1612},[102,134892,1554],{"class":112},[1451,134894],{"style":126390,"src":134895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,134897,134898],{},"更加细节展示：",[56,134900,134901],{},[59,134902,134903],{},"html 标签内添加小图标",[1451,134905],{"style":126390,"src":134906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[56,134908,134909],{"start":24},[59,134910,134911],{},"给标签定义字体",[93,134913,134914],{"className":127281,"code":130638,"language":127283,"meta":23,"style":23},[99,134915,134916,134920,134934,134938],{"__ignoreMap":23},[102,134917,134918],{"class":104,"line":105},[102,134919,130645],{"class":171},[102,134921,134922,134924,134926,134928,134930,134932],{"class":104,"line":24},[102,134923,1023],{"class":112},[102,134925,51602],{"class":51291},[102,134927,53477],{"class":1952},[102,134929,158],{"class":112},[102,134931,130658],{"class":217},[102,134933,51298],{"class":112},[102,134935,134936],{"class":104,"line":1168},[102,134937,130665],{"class":112},[102,134939,134940,134942,134944],{"class":104,"line":1183},[102,134941,51776],{"class":112},[102,134943,51602],{"class":51291},[102,134945,51298],{"class":112},[19,134947,134948],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1451,134950],{"style":126390,"src":134951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[73,134953,134955],{"id":134954},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,134957,134958],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,134960,134961,134962,134965],{},"把压缩包里面的 ",[262,134963,134964],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,134967,134968],{},"打开网站，点下方：",[1451,134970],{"style":126390,"src":134971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1451,134973],{"style":126390,"src":134974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1451,134976],{"style":126390,"src":134977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,134979,134980],{},"点yes重新加载",[19,134982,134983],{},"然后重复之前的操作就可以实现了",[19,134985,134986],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[73,134988,134990],{"id":134989},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1451,134992],{"style":126390,"src":134993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5116,134995,134996],{},"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":23,"searchDepth":24,"depth":24,"links":134998},[134999,135005,135010],{"id":133602,"depth":24,"text":133603,"children":135000},[135001,135002,135003,135004],{"id":133614,"depth":1168,"text":133615},{"id":133643,"depth":1168,"text":133644},{"id":133671,"depth":1168,"text":133672},{"id":133729,"depth":1168,"text":133730},{"id":134201,"depth":24,"text":134202,"children":135006},[135007,135008,135009],{"id":134205,"depth":1168,"text":134206},{"id":134250,"depth":1168,"text":134251},{"id":134266,"depth":1168,"text":134267},{"id":134366,"depth":24,"text":134367,"children":135011},[135012,135013,135014,135015,135016,135017],{"id":134370,"depth":1168,"text":134371},{"id":134404,"depth":1168,"text":134405},{"id":134427,"depth":1168,"text":134428},{"id":134474,"depth":1168,"text":134475},{"id":134954,"depth":1168,"text":134955},{"id":134989,"depth":1168,"text":134990},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133594,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135024,"title":135025,"body":135026,"description":27,"extension":28,"meta":136253,"navigation":30,"path":136254,"seo":136255,"stem":136256,"__hash__":136257},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135027,"toc":136234},[135028,135031,135035,135038,135052,135120,135150,135153,135157,135161,135263,135310,135314,135317,135320,135354,135357,135360,135363,135366,135369,135372,135375,135377,135380,135383,135386,135389,135392,135395,135398,135426,135429,135433,135436,135443,135446,135449,135475,135478,135482,135485,135488,135495,135499,135502,135504,135536,135539,135542,135554,135560,135563,135566,135569,135571,135575,135578,135581,135584,135629,135633,135635,135638,135645,135687,135690,135694,135699,135713,135717,135720,135723,135726,135729,135732,135766,135769,135772,135826,135829,135832,135835,135838,135890,135893,135896,135945,135949,135951,135954,135957,135960,135963,135966,136024,136027,136033,136036,136039,136071,136074,136078,136082,136085,136117,136121,136124,136168,136172,136175,136178,136181,136184,136187,136190,136193,136195,136198,136200,136203,136206,136209,136212,136217,136220,136222,136225,136228,136231],[10,135029,135025],{"id":135030},"_13-界面样式与布局技巧",[14,135032,135034],{"id":135033},"_131-css三角","13.1 css三角",[19,135036,135037],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1120,135039,135040,135043,135046,135049],{},[59,135041,135042],{},"用css 边框可以模拟三角效果",[59,135044,135045],{},"宽度高度为0",[59,135047,135048],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[59,135050,135051],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[93,135053,135055],{"className":126534,"code":135054,"language":126536,"meta":23,"style":23},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[99,135056,135057,135062,135069,135079,135089,135105,135116],{"__ignoreMap":23},[102,135058,135059],{"class":104,"line":105},[102,135060,135061],{"class":171},"\u002F* CSS 实现三角形 *\u002F\n",[102,135063,135064,135067],{"class":104,"line":24},[102,135065,135066],{"class":1952},".triangle",[102,135068,15562],{"class":112},[102,135070,135071,135073,135075,135077],{"class":104,"line":1168},[102,135072,70559],{"class":161},[102,135074,51428],{"class":112},[102,135076,304],{"class":161},[102,135078,1279],{"class":112},[102,135080,135081,135083,135085,135087],{"class":104,"line":1183},[102,135082,70779],{"class":161},[102,135084,51428],{"class":112},[102,135086,304],{"class":161},[102,135088,1279],{"class":112},[102,135090,135091,135093,135095,135097,135099,135101,135103],{"class":104,"line":1189},[102,135092,70887],{"class":161},[102,135094,51428],{"class":112},[102,135096,559],{"class":161},[102,135098,51483],{"class":108},[102,135100,51512],{"class":161},[102,135102,63982],{"class":161},[102,135104,1279],{"class":112},[102,135106,135107,135110,135112,135114],{"class":104,"line":1203},[102,135108,135109],{"class":161},"  border-bottom-color",[102,135111,51428],{"class":112},[102,135113,62360],{"class":161},[102,135115,1279],{"class":112},[102,135117,135118],{"class":104,"line":1209},[102,135119,1554],{"class":112},[93,135121,135122],{"className":126534,"code":130691,"language":126536,"meta":23,"style":23},[99,135123,135124,135130,135146],{"__ignoreMap":23},[102,135125,135126,135128],{"class":104,"line":105},[102,135127,51602],{"class":51291},[102,135129,15562],{"class":112},[102,135131,135132,135134,135136,135138,135140,135142,135144],{"class":104,"line":24},[102,135133,70887],{"class":161},[102,135135,51428],{"class":112},[102,135137,330],{"class":161},[102,135139,51483],{"class":108},[102,135141,51512],{"class":161},[102,135143,129926],{"class":161},[102,135145,1279],{"class":112},[102,135147,135148],{"class":104,"line":1168},[102,135149,1554],{"class":112},[1451,135151],{"style":126390,"src":135152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135154,135156],{"id":135155},"_132-css用户界面样式","13.2 css用户界面样式",[73,135158,135160],{"id":135159},"_1321-鼠标样式","13.2.1 鼠标样式",[93,135162,135164],{"className":126534,"code":135163,"language":126536,"meta":23,"style":23},"\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",[99,135165,135166,135171,135190,135208,135227,135244],{"__ignoreMap":23},[102,135167,135168],{"class":104,"line":105},[102,135169,135170],{"class":171},"\u002F* 鼠标样式 *\u002F\n",[102,135172,135173,135175,135177,135180,135182,135184,135187],{"class":104,"line":24},[102,135174,51602],{"class":51291},[102,135176,79798],{"class":112},[102,135178,135179],{"class":161},"cursor",[102,135181,51428],{"class":112},[102,135183,62021],{"class":161},[102,135185,135186],{"class":112},"; }   ",[102,135188,135189],{"class":171},"\u002F* 手型 *\u002F\n",[102,135191,135192,135194,135196,135198,135200,135203,135205],{"class":104,"line":1168},[102,135193,51602],{"class":51291},[102,135195,79798],{"class":112},[102,135197,135179],{"class":161},[102,135199,51428],{"class":112},[102,135201,135202],{"class":161},"default",[102,135204,135186],{"class":112},[102,135206,135207],{"class":171},"\u002F* 默认 *\u002F\n",[102,135209,135210,135212,135214,135216,135218,135221,135224],{"class":104,"line":1183},[102,135211,51602],{"class":51291},[102,135213,79798],{"class":112},[102,135215,135179],{"class":161},[102,135217,51428],{"class":112},[102,135219,135220],{"class":161},"move",[102,135222,135223],{"class":112},"; }      ",[102,135225,135226],{"class":171},"\u002F* 移动 *\u002F\n",[102,135228,135229,135231,135233,135235,135237,135239,135241],{"class":104,"line":1189},[102,135230,51602],{"class":51291},[102,135232,79798],{"class":112},[102,135234,135179],{"class":161},[102,135236,51428],{"class":112},[102,135238,5177],{"class":161},[102,135240,135223],{"class":112},[102,135242,135243],{"class":171},"\u002F* 文本 *\u002F\n",[102,135245,135246,135248,135250,135252,135254,135257,135260],{"class":104,"line":1203},[102,135247,51602],{"class":51291},[102,135249,79798],{"class":112},[102,135251,135179],{"class":161},[102,135253,51428],{"class":112},[102,135255,135256],{"class":161},"not-allowed",[102,135258,135259],{"class":112},"; } ",[102,135261,135262],{"class":171},"\u002F* 禁止 *\u002F\n",[250,135264,135265,135273],{},[253,135266,135267],{},[256,135268,135269,135271],{},[259,135270,126998],{"align":23726},[259,135272,27480],{"align":23726},[297,135274,135275,135282,135289,135296,135303],{},[256,135276,135277,135279],{},[302,135278,135202],{"align":23726},[302,135280,135281],{"align":23726},"小白 默认",[256,135283,135284,135286],{},[302,135285,62021],{"align":23726},[302,135287,135288],{"align":23726},"小手",[256,135290,135291,135293],{},[302,135292,135220],{"align":23726},[302,135294,135295],{"align":23726},"移动",[256,135297,135298,135300],{},[302,135299,5177],{"align":23726},[302,135301,135302],{"align":23726},"文本",[256,135304,135305,135307],{},[302,135306,135256],{"align":23726},[302,135308,135309],{"align":23726},"禁止",[73,135311,135313],{"id":135312},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135315,135316],{},"去除表单轮廓线",[19,135318,135319],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[93,135321,135322],{"className":126534,"code":129898,"language":126536,"meta":23,"style":23},[99,135323,135324,135328,135334,135350],{"__ignoreMap":23},[102,135325,135326],{"class":104,"line":105},[102,135327,129905],{"class":171},[102,135329,135330,135332],{"class":104,"line":24},[102,135331,51602],{"class":51291},[102,135333,15562],{"class":112},[102,135335,135336,135338,135340,135342,135344,135346,135348],{"class":104,"line":1168},[102,135337,70887],{"class":161},[102,135339,51428],{"class":112},[102,135341,330],{"class":161},[102,135343,51483],{"class":108},[102,135345,51512],{"class":161},[102,135347,129926],{"class":161},[102,135349,1279],{"class":112},[102,135351,135352],{"class":104,"line":1183},[102,135353,1554],{"class":112},[19,135355,135356],{},"文本域：",[1451,135358],{"style":126390,"src":135359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135361,135362],{},"此时会有一个空白区域",[1451,135364],{"style":126390,"src":135365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135367,135368],{},"写在同一行就不会出现这个问题",[1451,135370],{"style":126390,"src":135371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135373,135374],{},"文本域是行内块元素，一定记住！！！",[19,135376,98224],{},[1451,135378],{"style":126390,"src":135379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135381,135382],{},"文本域尽量放在一行",[19,135384,135385],{},"知识回顾：cols是列，rols是行",[1451,135387],{"style":126390,"src":135388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135390,135391],{},"它可以进行拖动，显然这是我们不愿意看到的",[1451,135393],{"style":126390,"src":135394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135396,135397],{},"使用resize进行解决",[93,135399,135401],{"className":126534,"code":135400,"language":126536,"meta":23,"style":23},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[99,135402,135403,135409,135422],{"__ignoreMap":23},[102,135404,135405,135407],{"class":104,"line":105},[102,135406,53812],{"class":51291},[102,135408,15562],{"class":112},[102,135410,135411,135413,135415,135417,135419],{"class":104,"line":24},[102,135412,70789],{"class":161},[102,135414,51428],{"class":112},[102,135416,54728],{"class":161},[102,135418,130397],{"class":112},[102,135420,135421],{"class":171},"\u002F* 取消表单轮廓线 *\u002F\n",[102,135423,135424],{"class":104,"line":1168},[102,135425,1554],{"class":112},[19,135427,135428],{},"此时就无法通过右下方实现拖动了",[73,135430,135432],{"id":135431},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135434,135435],{},"实现一个盒子中的文字和图片对齐",[19,135437,135438,135439,135442],{},"用于设置一个元素的 ",[262,135440,135441],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135444,135445],{},"图片和文字默认是基线对齐",[1451,135447],{"style":126390,"src":135448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[93,135450,135451],{"className":126534,"code":135400,"language":126536,"meta":23,"style":23},[99,135452,135453,135459,135471],{"__ignoreMap":23},[102,135454,135455,135457],{"class":104,"line":105},[102,135456,53812],{"class":51291},[102,135458,15562],{"class":112},[102,135460,135461,135463,135465,135467,135469],{"class":104,"line":24},[102,135462,70789],{"class":161},[102,135464,51428],{"class":112},[102,135466,54728],{"class":161},[102,135468,130397],{"class":112},[102,135470,135421],{"class":171},[102,135472,135473],{"class":104,"line":1168},[102,135474,1554],{"class":112},[1451,135476],{"style":126390,"src":135477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21988,135479,135481],{"id":135480},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135483,135484],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1451,135486],{"style":126390,"src":135487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135489,135490,135491,135494],{},"此时可以给图片、表单这些行内块元素的 ",[262,135492,135493],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21988,135496,135498],{"id":135497},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135500,135501],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135503,14623],{},[93,135505,135507],{"className":126534,"code":135506,"language":126536,"meta":23,"style":23},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[99,135508,135509,135514,135520,135532],{"__ignoreMap":23},[102,135510,135511],{"class":104,"line":105},[102,135512,135513],{"class":171},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[102,135515,135516,135518],{"class":104,"line":24},[102,135517,1451],{"class":51291},[102,135519,15562],{"class":112},[102,135521,135522,135525,135527,135530],{"class":104,"line":1168},[102,135523,135524],{"class":161},"  vertical-align",[102,135526,51428],{"class":112},[102,135528,135529],{"class":161},"middle",[102,135531,1279],{"class":112},[102,135533,135534],{"class":104,"line":1183},[102,135535,1554],{"class":112},[1451,135537],{"style":126390,"src":135538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135540,135541],{},"主要解决方法有两种：",[56,135543,135544],{},[59,135545,135546,135549,135550,135553],{},[262,135547,135548],{},"给图片"," 添加 ",[262,135551,135552],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135555,135556,135557],{},"2.把图片转换为块级元素 ",[262,135558,135559],{},"display: block",[19,135561,135562],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135564,135565],{},"img {",[19,135567,135568],{},"vertical-align:middle;",[19,135570,1059],{},[73,135572,135574],{"id":135573},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135576,135577],{},"效果：",[1451,135579],{"style":126390,"src":135580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135582,135583],{},"单行文本溢出显示省略号--必须满足三个条件：",[93,135585,135587],{"className":126534,"code":135586,"language":126536,"meta":23,"style":23},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[99,135588,135589,135594,135600,135610,135615,135625],{"__ignoreMap":23},[102,135590,135591],{"class":104,"line":105},[102,135592,135593],{"class":171},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[102,135595,135596,135598],{"class":104,"line":24},[102,135597,1451],{"class":51291},[102,135599,15562],{"class":112},[102,135601,135602,135604,135606,135608],{"class":104,"line":1168},[102,135603,135524],{"class":161},[102,135605,51428],{"class":112},[102,135607,135529],{"class":161},[102,135609,1279],{"class":112},[102,135611,135612],{"class":104,"line":1183},[102,135613,135614],{"class":171},"  \u002F* 或 *\u002F\n",[102,135616,135617,135619,135621,135623],{"class":104,"line":1189},[102,135618,128150],{"class":161},[102,135620,51428],{"class":112},[102,135622,60860],{"class":161},[102,135624,1279],{"class":112},[102,135626,135627],{"class":104,"line":1203},[102,135628,1554],{"class":112},[73,135630,135632],{"id":135631},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135634,135577],{},[1451,135636],{"style":126390,"src":135637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135639,135640,135641,135644],{},"多行文本溢出显示省略号， ",[262,135642,135643],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[93,135646,135647],{"className":126534,"code":135586,"language":126536,"meta":23,"style":23},[99,135648,135649,135653,135659,135669,135673,135683],{"__ignoreMap":23},[102,135650,135651],{"class":104,"line":105},[102,135652,135593],{"class":171},[102,135654,135655,135657],{"class":104,"line":24},[102,135656,1451],{"class":51291},[102,135658,15562],{"class":112},[102,135660,135661,135663,135665,135667],{"class":104,"line":1168},[102,135662,135524],{"class":161},[102,135664,51428],{"class":112},[102,135666,135529],{"class":161},[102,135668,1279],{"class":112},[102,135670,135671],{"class":104,"line":1183},[102,135672,135614],{"class":171},[102,135674,135675,135677,135679,135681],{"class":104,"line":1189},[102,135676,128150],{"class":161},[102,135678,51428],{"class":112},[102,135680,60860],{"class":161},[102,135682,1279],{"class":112},[102,135684,135685],{"class":104,"line":1203},[102,135686,1554],{"class":112},[19,135688,135689],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135691,135693],{"id":135692},"_133-常见布局技巧","13.3 常见布局技巧",[19,135695,135696],{},[262,135697,135698],{},"巧妙利用一个技术更快更好的布局：",[56,135700,135701,135704,135707,135710],{},[59,135702,135703],{},"margin负值的运用",[59,135705,135706],{},"文字围绕浮动元素",[59,135708,135709],{},"行内块的巧妙运用",[59,135711,135712],{},"CSS三角强化",[73,135714,135716],{"id":135715},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135718,135719],{},"应用场景：",[1451,135721],{"style":126390,"src":135722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1451,135724],{"style":126390,"src":135725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135727,135728],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135730,135731],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[93,135733,135734],{"className":126534,"code":129898,"language":126536,"meta":23,"style":23},[99,135735,135736,135740,135746,135762],{"__ignoreMap":23},[102,135737,135738],{"class":104,"line":105},[102,135739,129905],{"class":171},[102,135741,135742,135744],{"class":104,"line":24},[102,135743,51602],{"class":51291},[102,135745,15562],{"class":112},[102,135747,135748,135750,135752,135754,135756,135758,135760],{"class":104,"line":1168},[102,135749,70887],{"class":161},[102,135751,51428],{"class":112},[102,135753,330],{"class":161},[102,135755,51483],{"class":108},[102,135757,51512],{"class":161},[102,135759,129926],{"class":161},[102,135761,1279],{"class":112},[102,135763,135764],{"class":104,"line":1183},[102,135765,1554],{"class":112},[1451,135767],{"style":126390,"src":135768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135770,135771],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[93,135773,135775],{"className":126534,"code":135774,"language":126536,"meta":23,"style":23},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[99,135776,135777,135782,135788,135798,135810,135822],{"__ignoreMap":23},[102,135778,135779],{"class":104,"line":105},[102,135780,135781],{"class":171},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[102,135783,135784,135786],{"class":104,"line":24},[102,135785,130382],{"class":1952},[102,135787,15562],{"class":112},[102,135789,135790,135792,135794,135796],{"class":104,"line":1168},[102,135791,132340],{"class":161},[102,135793,51428],{"class":112},[102,135795,54755],{"class":161},[102,135797,1279],{"class":112},[102,135799,135800,135802,135804,135806,135808],{"class":104,"line":1183},[102,135801,132354],{"class":161},[102,135803,51428],{"class":112},[102,135805,559],{"class":161},[102,135807,51483],{"class":108},[102,135809,1279],{"class":112},[102,135811,135812,135814,135816,135818,135820],{"class":104,"line":1189},[102,135813,132371],{"class":161},[102,135815,51428],{"class":112},[102,135817,813],{"class":161},[102,135819,51483],{"class":108},[102,135821,1279],{"class":112},[102,135823,135824],{"class":104,"line":1203},[102,135825,1554],{"class":112},[19,135827,135828],{},"加上上述代码会发现：",[1451,135830],{"style":126390,"src":135831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,135833,135834],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,135836,135837],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[93,135839,135840],{"className":126534,"code":135774,"language":126536,"meta":23,"style":23},[99,135841,135842,135846,135852,135862,135874,135886],{"__ignoreMap":23},[102,135843,135844],{"class":104,"line":105},[102,135845,135781],{"class":171},[102,135847,135848,135850],{"class":104,"line":24},[102,135849,130382],{"class":1952},[102,135851,15562],{"class":112},[102,135853,135854,135856,135858,135860],{"class":104,"line":1168},[102,135855,132340],{"class":161},[102,135857,51428],{"class":112},[102,135859,54755],{"class":161},[102,135861,1279],{"class":112},[102,135863,135864,135866,135868,135870,135872],{"class":104,"line":1183},[102,135865,132354],{"class":161},[102,135867,51428],{"class":112},[102,135869,559],{"class":161},[102,135871,51483],{"class":108},[102,135873,1279],{"class":112},[102,135875,135876,135878,135880,135882,135884],{"class":104,"line":1189},[102,135877,132371],{"class":161},[102,135879,51428],{"class":112},[102,135881,813],{"class":161},[102,135883,51483],{"class":108},[102,135885,1279],{"class":112},[102,135887,135888],{"class":104,"line":1203},[102,135889,1554],{"class":112},[19,135891,135892],{},"解决方式2：",[19,135894,135895],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[93,135897,135899],{"className":126534,"code":135898,"language":126536,"meta":23,"style":23},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[99,135900,135901,135907,135917,135929,135941],{"__ignoreMap":23},[102,135902,135903,135905],{"class":104,"line":105},[102,135904,51602],{"class":51291},[102,135906,15562],{"class":112},[102,135908,135909,135911,135913,135915],{"class":104,"line":24},[102,135910,132340],{"class":161},[102,135912,51428],{"class":112},[102,135914,54755],{"class":161},[102,135916,1279],{"class":112},[102,135918,135919,135921,135923,135925,135927],{"class":104,"line":1168},[102,135920,132354],{"class":161},[102,135922,51428],{"class":112},[102,135924,559],{"class":161},[102,135926,51483],{"class":108},[102,135928,1279],{"class":112},[102,135930,135931,135933,135935,135937,135939],{"class":104,"line":1183},[102,135932,132371],{"class":161},[102,135934,51428],{"class":112},[102,135936,813],{"class":161},[102,135938,51483],{"class":108},[102,135940,1279],{"class":112},[102,135942,135943],{"class":104,"line":1189},[102,135944,1554],{"class":112},[73,135946,135948],{"id":135947},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,135950,135719],{},[1451,135952],{"style":126390,"src":135953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,135955,135956],{},"实现结构图：",[1451,135958],{"style":126390,"src":135959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,135961,135962],{},"巧妙运用浮动元素不会压住文字的特性",[19,135964,135965],{},"代码显示：",[93,135967,135969],{"className":126534,"code":135968,"language":126536,"meta":23,"style":23},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[99,135970,135971,135977,135987,135991,135996,136000,136006,136020],{"__ignoreMap":23},[102,135972,135973,135975],{"class":104,"line":105},[102,135974,130382],{"class":1952},[102,135976,15562],{"class":112},[102,135978,135979,135981,135983,135985],{"class":104,"line":24},[102,135980,131014],{"class":161},[102,135982,51428],{"class":112},[102,135984,23726],{"class":161},[102,135986,1279],{"class":112},[102,135988,135989],{"class":104,"line":1168},[102,135990,1554],{"class":112},[102,135992,135993],{"class":104,"line":1183},[102,135994,135995],{"class":112},"```Css\n",[102,135997,135998],{"class":104,"line":1189},[102,135999,130377],{"class":171},[102,136001,136002,136004],{"class":104,"line":1203},[102,136003,130382],{"class":1952},[102,136005,15562],{"class":112},[102,136007,136008,136010,136012,136014,136016,136018],{"class":104,"line":1209},[102,136009,70461],{"class":161},[102,136011,51428],{"class":112},[102,136013,304],{"class":161},[102,136015,51547],{"class":161},[102,136017,130397],{"class":112},[102,136019,130400],{"class":171},[102,136021,136022],{"class":104,"line":1300},[102,136023,1554],{"class":112},[19,136025,136026],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[93,136028,136031],{"className":136029,"code":136030,"language":5177},[5175],"\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",[99,136032,136030],{"__ignoreMap":23},[1451,136034],{"style":126390,"src":136035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136037,136038],{},"最终展示结果：",[93,136040,136041],{"className":126534,"code":130370,"language":126536,"meta":23,"style":23},[99,136042,136043,136047,136053,136067],{"__ignoreMap":23},[102,136044,136045],{"class":104,"line":105},[102,136046,130377],{"class":171},[102,136048,136049,136051],{"class":104,"line":24},[102,136050,130382],{"class":1952},[102,136052,15562],{"class":112},[102,136054,136055,136057,136059,136061,136063,136065],{"class":104,"line":1168},[102,136056,70461],{"class":161},[102,136058,51428],{"class":112},[102,136060,304],{"class":161},[102,136062,51547],{"class":161},[102,136064,130397],{"class":112},[102,136066,130400],{"class":171},[102,136068,136069],{"class":104,"line":1183},[102,136070,1554],{"class":112},[1451,136072],{"style":126390,"src":136073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136075,136077],{"id":136076},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[73,136079,136081],{"id":136080},"_1341-原理","13.4.1 原理",[1451,136083],{"style":126390,"src":136084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[93,136086,136087],{"className":126534,"code":130370,"language":126536,"meta":23,"style":23},[99,136088,136089,136093,136099,136113],{"__ignoreMap":23},[102,136090,136091],{"class":104,"line":105},[102,136092,130377],{"class":171},[102,136094,136095,136097],{"class":104,"line":24},[102,136096,130382],{"class":1952},[102,136098,15562],{"class":112},[102,136100,136101,136103,136105,136107,136109,136111],{"class":104,"line":1168},[102,136102,70461],{"class":161},[102,136104,51428],{"class":112},[102,136106,304],{"class":161},[102,136108,51547],{"class":161},[102,136110,130397],{"class":112},[102,136112,130400],{"class":171},[102,136114,136115],{"class":104,"line":1183},[102,136116,1554],{"class":112},[73,136118,136120],{"id":136119},"_1342-实例","13.4.2 实例",[1451,136122],{"style":126390,"src":136123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[93,136125,136126],{"className":126534,"code":131000,"language":126536,"meta":23,"style":23},[99,136127,136128,136134,136144,136148,136154,136164],{"__ignoreMap":23},[102,136129,136130,136132],{"class":104,"line":105},[102,136131,131007],{"class":1952},[102,136133,15562],{"class":112},[102,136135,136136,136138,136140,136142],{"class":104,"line":24},[102,136137,131014],{"class":161},[102,136139,51428],{"class":112},[102,136141,23726],{"class":161},[102,136143,1279],{"class":112},[102,136145,136146],{"class":104,"line":1168},[102,136147,1554],{"class":112},[102,136149,136150,136152],{"class":104,"line":1183},[102,136151,131029],{"class":1952},[102,136153,15562],{"class":112},[102,136155,136156,136158,136160,136162],{"class":104,"line":1189},[102,136157,131014],{"class":161},[102,136159,51428],{"class":112},[102,136161,72513],{"class":161},[102,136163,1279],{"class":112},[102,136165,136166],{"class":104,"line":1203},[102,136167,1554],{"class":112},[14,136169,136171],{"id":136170},"_135-css的初始化","13.5 css的初始化",[19,136173,136174],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136176,136177],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136179,136180],{},"每个网页都必须首先进行 CSS初始化。",[19,136182,136183],{},"这里我们以 京东CSS初始化代码为例。",[19,136185,136186],{},"在网页右键查看网页源代码",[19,136188,136189],{},"找到css的link引入语句",[19,136191,136192],{},"然后ctrl+f 输入body",[19,136194,77217],{},[1451,136196],{"style":126390,"src":136197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136199,77240],{},[1451,136201],{"style":126390,"src":136202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136204,136205],{},"③打开了网页上传压缩的代码",[1451,136207],{"style":126390,"src":136208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136210,136211],{},"④从body前可以查看这个网页的初始化代码",[19,136213,136214],{},[262,136215,136216],{},"Unicode编码字体：",[19,136218,136219],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136221,83198],{},[19,136223,136224],{},"黑体 \\9ED1\\4F53",[19,136226,136227],{},"宋体 \\5B8B\\4F53",[19,136229,136230],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5116,136232,136233],{},"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":23,"searchDepth":24,"depth":24,"links":136235},[136236,136237,136244,136248,136252],{"id":135033,"depth":24,"text":135034},{"id":135155,"depth":24,"text":135156,"children":136238},[136239,136240,136241,136242,136243],{"id":135159,"depth":1168,"text":135160},{"id":135312,"depth":1168,"text":135313},{"id":135431,"depth":1168,"text":135432},{"id":135573,"depth":1168,"text":135574},{"id":135631,"depth":1168,"text":135632},{"id":135692,"depth":24,"text":135693,"children":136245},[136246,136247],{"id":135715,"depth":1168,"text":135716},{"id":135947,"depth":1168,"text":135948},{"id":136076,"depth":24,"text":136077,"children":136249},[136250,136251],{"id":136080,"depth":1168,"text":136081},{"id":136119,"depth":1168,"text":136120},{"id":136170,"depth":24,"text":136171},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135025,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136259,"title":136260,"body":136261,"description":27,"extension":28,"meta":137947,"navigation":30,"path":137948,"seo":137949,"stem":137950,"__hash__":137951},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136262,"toc":137936},[136263,136266,136270,136274,136277,136284,136287,136290,136328,136331,136333,136347,136351,136360,136364,136369,136372,136375,136378,136413,136418,136421,136451,136454,136459,136462,136465,136495,136498,136552,136555,136559,136564,136576,136579,136583,136613,136616,136621,136624,136654,136657,136661,136678,136682,136686,136689,136722,136725,136729,136732,136735,136738,136741,136744,136855,136858,136861,136864,136966,136969,136973,136977,136981,136984,137024,137027,137029,137045,137049,137052,137057,137138,137141,137144,137270,137275,137278,137286,137289,137294,137379,137382,137386,137389,137392,137396,137416,137421,137505,137508,137513,137516,137519,137597,137600,137603,137606,137609,137612,137617,137620,137623,137695,137698,137703,137706,137803,137806,137812,137815,137818,137821,137824,137827,137830,137833,137836,137840,137845,137848,137881,137886,137889,137930,137933],[10,136264,136260],{"id":136265},"_14-html5与css3新特性",[14,136267,136269],{"id":136268},"_141-html5的新特性","14.1 HTML5的新特性",[73,136271,136273],{"id":136272},"_1411-基本标签","14.1.1 基本标签",[19,136275,136276],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136278,136279,136280,136283],{},"这些新特性都有兼容性问题，基本是 ",[262,136281,136282],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136285,136286],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136288,136289],{},"现在使用的是新特性：",[1120,136291,136292,136298,136304,136310,136316,136322],{},[59,136293,136294,136297],{},[99,136295,136296],{},"\u003Cheader>"," 头部标签",[59,136299,136300,136303],{},[99,136301,136302],{},"\u003Cnav>"," 导航标签",[59,136305,136306,136309],{},[99,136307,136308],{},"\u003Carticle>"," 内容标签",[59,136311,136312,136315],{},[99,136313,136314],{},"\u003Csection>"," 定义文档某个区域",[59,136317,136318,136321],{},[99,136319,136320],{},"\u003Caside>"," 侧边栏标签",[59,136323,136324,136327],{},[99,136325,136326],{},"\u003Cfooter>"," 尾部标签",[1451,136329],{"style":126390,"src":136330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136332,142],{},[1120,136334,136335,136338,136341,136344],{},[59,136336,136337],{},"这种语义化标准主要是针对搜索引擎的",[59,136339,136340],{},"这些标签页面中可以经常使用",[59,136342,136343],{},"在IE9中，需要把这些元素转换为块级元素",[59,136345,136346],{},"移动端更喜欢使用这些标签",[73,136348,136350],{"id":136349},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136352,136353,136354,136356,136357,136359],{},"音频 ",[262,136355,28165],{}," 和视频 ",[262,136358,28174],{}," 两个标签",[21988,136361,136363],{"id":136362},"_14121-视频标签-video","14.1.2.1 视频标签- video",[56,136365,136366],{},[59,136367,136368],{},"支持格式：",[1451,136370],{"style":126390,"src":136371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136373,136374],{},"尽量使用MP4，兼容性好",[19,136376,136377],{},"用MP4就可以",[93,136379,136381],{"className":127281,"code":136380,"language":127283,"meta":23,"style":23},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[99,136382,136383],{"__ignoreMap":23},[102,136384,136385,136387,136389,136391,136393,136396,136398,136401,136404,136407,136409,136411],{"class":104,"line":105},[102,136386,1023],{"class":112},[102,136388,28174],{"class":51291},[102,136390,55230],{"class":1952},[102,136392,158],{"class":112},[102,136394,136395],{"class":217},"\"movie.mp4\"",[102,136397,92414],{"class":1952},[102,136399,136400],{"class":1952}," autoplay",[102,136402,136403],{"class":1952}," muted",[102,136405,136406],{"class":1952}," loop",[102,136408,55305],{"class":112},[102,136410,28174],{"class":51291},[102,136412,51298],{"class":112},[56,136414,136415],{"start":24},[59,136416,136417],{},"兼容写法",[19,136419,136420],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[93,136422,136423],{"className":127281,"code":136380,"language":127283,"meta":23,"style":23},[99,136424,136425],{"__ignoreMap":23},[102,136426,136427,136429,136431,136433,136435,136437,136439,136441,136443,136445,136447,136449],{"class":104,"line":105},[102,136428,1023],{"class":112},[102,136430,28174],{"class":51291},[102,136432,55230],{"class":1952},[102,136434,158],{"class":112},[102,136436,136395],{"class":217},[102,136438,92414],{"class":1952},[102,136440,136400],{"class":1952},[102,136442,136403],{"class":1952},[102,136444,136406],{"class":1952},[102,136446,55305],{"class":112},[102,136448,28174],{"class":51291},[102,136450,51298],{"class":112},[19,136452,136453],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[56,136455,136456],{"start":1168},[59,136457,136458],{},"video常用属性",[1451,136460],{"style":126390,"src":136461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136463,136464],{},"poster属性后面是跟的等待加载图片的地址",[93,136466,136467],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,136468,136469],{"__ignoreMap":23},[102,136470,136471,136473,136475,136477,136479,136481,136483,136485,136487,136489,136491,136493],{"class":104,"line":105},[102,136472,1023],{"class":112},[102,136474,1451],{"class":51291},[102,136476,55230],{"class":1952},[102,136478,158],{"class":112},[102,136480,134051],{"class":217},[102,136482,55238],{"class":1952},[102,136484,158],{"class":112},[102,136486,134058],{"class":217},[102,136488,134061],{"class":1952},[102,136490,158],{"class":112},[102,136492,134066],{"class":217},[102,136494,51298],{"class":112},[19,136496,136497],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[93,136499,136501],{"className":126534,"code":136500,"language":126536,"meta":23,"style":23},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[99,136502,136503,136508,136514,136538,136543,136548],{"__ignoreMap":23},[102,136504,136505],{"class":104,"line":105},[102,136506,136507],{"class":171},"\u002F* 2D 位移 *\u002F\n",[102,136509,136510,136512],{"class":104,"line":24},[102,136511,51602],{"class":51291},[102,136513,15562],{"class":112},[102,136515,136516,136519,136521,136524,136526,136528,136530,136532,136534,136536],{"class":104,"line":1168},[102,136517,136518],{"class":161},"  transform",[102,136520,51428],{"class":112},[102,136522,136523],{"class":161},"translate",[102,136525,113],{"class":112},[102,136527,424],{"class":161},[102,136529,51483],{"class":108},[102,136531,12425],{"class":112},[102,136533,769],{"class":161},[102,136535,51483],{"class":108},[102,136537,2708],{"class":112},[102,136539,136540],{"class":104,"line":1183},[102,136541,136542],{"class":171},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[102,136544,136545],{"class":104,"line":1189},[102,136546,136547],{"class":171},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[102,136549,136550],{"class":104,"line":1203},[102,136551,1554],{"class":112},[19,136553,136554],{},"muted:自动静音属性",[21988,136556,136558],{"id":136557},"_14122-音频标签audio","14.1.2.2 音频标签audio",[56,136560,136561],{},[59,136562,136563],{},"基本使用",[19,136565,136566,136567,136572,136573],{},"当前 ",[262,136568,136569],{},[99,136570,136571],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[262,136574,136575],{},"mp3格式",[1451,136577],{"style":126390,"src":136578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[56,136580,136581],{"start":24},[59,136582,136417],{},[93,136584,136585],{"className":127281,"code":136380,"language":127283,"meta":23,"style":23},[99,136586,136587],{"__ignoreMap":23},[102,136588,136589,136591,136593,136595,136597,136599,136601,136603,136605,136607,136609,136611],{"class":104,"line":105},[102,136590,1023],{"class":112},[102,136592,28174],{"class":51291},[102,136594,55230],{"class":1952},[102,136596,158],{"class":112},[102,136598,136395],{"class":217},[102,136600,92414],{"class":1952},[102,136602,136400],{"class":1952},[102,136604,136403],{"class":1952},[102,136606,136406],{"class":1952},[102,136608,55305],{"class":112},[102,136610,28174],{"class":51291},[102,136612,51298],{"class":112},[19,136614,136615],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[56,136617,136618],{"start":1168},[59,136619,136620],{},"常用属性",[1451,136622],{"style":126390,"src":136623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[93,136625,136626],{"className":127281,"code":136380,"language":127283,"meta":23,"style":23},[99,136627,136628],{"__ignoreMap":23},[102,136629,136630,136632,136634,136636,136638,136640,136642,136644,136646,136648,136650,136652],{"class":104,"line":105},[102,136631,1023],{"class":112},[102,136633,28174],{"class":51291},[102,136635,55230],{"class":1952},[102,136637,158],{"class":112},[102,136639,136395],{"class":217},[102,136641,92414],{"class":1952},[102,136643,136400],{"class":1952},[102,136645,136403],{"class":1952},[102,136647,136406],{"class":1952},[102,136649,55305],{"class":112},[102,136651,28174],{"class":51291},[102,136653,51298],{"class":112},[19,136655,136656],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21988,136658,136660],{"id":136659},"_14123-总结","14.1.2.3 总结",[1120,136662,136663,136666,136669,136672,136675],{},[59,136664,136665],{},"音频标签和视频标签使用方式基本一致",[59,136667,136668],{},"浏览器支持情况不同",[59,136670,136671],{},"谷歌浏览器把音频和视频自动播放禁止了",[59,136673,136674],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[59,136676,136677],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[73,136679,136681],{"id":136680},"_1413-表单元素","14.1.3 表单元素",[21988,136683,136685],{"id":136684},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1451,136687],{"style":126390,"src":136688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[93,136690,136692],{"className":127281,"code":136691,"language":127283,"meta":23,"style":23},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[99,136693,136694],{"__ignoreMap":23},[102,136695,136696,136698,136700,136702,136704,136706,136708,136710,136713,136715,136717,136720],{"class":104,"line":105},[102,136697,1023],{"class":112},[102,136699,53812],{"class":51291},[102,136701,53815],{"class":1952},[102,136703,158],{"class":112},[102,136705,62690],{"class":217},[102,136707,14910],{"class":1952},[102,136709,158],{"class":112},[102,136711,136712],{"class":217},"\"username\"",[102,136714,61011],{"class":1952},[102,136716,158],{"class":112},[102,136718,136719],{"class":217},"\"请输入用户名\"",[102,136721,51298],{"class":112},[1451,136723],{"style":126390,"src":136724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21988,136726,136728],{"id":136727},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1451,136730],{"style":126390,"src":136731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136733,136734],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136736,136737],{},"快捷操作：",[1451,136739],{"style":126390,"src":136740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136742,136743],{},"例子1：",[93,136745,136747],{"className":127281,"code":136746,"language":127283,"meta":23,"style":23},"\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",[99,136748,136749,136772,136799,136828,136847],{"__ignoreMap":23},[102,136750,136751,136753,136755,136757,136759,136762,136765,136767,136770],{"class":104,"line":105},[102,136752,1023],{"class":112},[102,136754,66616],{"class":51291},[102,136756,66619],{"class":1952},[102,136758,158],{"class":112},[102,136760,136761],{"class":217},"\"\u002Fsubmit\"",[102,136763,136764],{"class":1952}," method",[102,136766,158],{"class":112},[102,136768,136769],{"class":217},"\"post\"",[102,136771,51298],{"class":112},[102,136773,136774,136776,136778,136780,136782,136784,136786,136788,136790,136792,136794,136797],{"class":104,"line":24},[102,136775,52135],{"class":112},[102,136777,53812],{"class":51291},[102,136779,53815],{"class":1952},[102,136781,158],{"class":112},[102,136783,62690],{"class":217},[102,136785,14910],{"class":1952},[102,136787,158],{"class":112},[102,136789,136712],{"class":217},[102,136791,61011],{"class":1952},[102,136793,158],{"class":112},[102,136795,136796],{"class":217},"\"用户名\"",[102,136798,51298],{"class":112},[102,136800,136801,136803,136805,136807,136809,136812,136814,136816,136819,136821,136823,136826],{"class":104,"line":1168},[102,136802,52135],{"class":112},[102,136804,53812],{"class":51291},[102,136806,53815],{"class":1952},[102,136808,158],{"class":112},[102,136810,136811],{"class":217},"\"password\"",[102,136813,14910],{"class":1952},[102,136815,158],{"class":112},[102,136817,136818],{"class":217},"\"pwd\"",[102,136820,61011],{"class":1952},[102,136822,158],{"class":112},[102,136824,136825],{"class":217},"\"密码\"",[102,136827,51298],{"class":112},[102,136829,136830,136832,136834,136836,136838,136840,136843,136845],{"class":104,"line":1183},[102,136831,52135],{"class":112},[102,136833,53878],{"class":51291},[102,136835,53815],{"class":1952},[102,136837,158],{"class":112},[102,136839,66639],{"class":217},[102,136841,136842],{"class":112},">提交\u003C\u002F",[102,136844,53878],{"class":51291},[102,136846,51298],{"class":112},[102,136848,136849,136851,136853],{"class":104,"line":1189},[102,136850,51776],{"class":112},[102,136852,66616],{"class":51291},[102,136854,51298],{"class":112},[1451,136856],{"style":126390,"src":136857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,136859,136860],{},"value是表单域的内容",[19,136862,136863],{},"例子2：",[93,136865,136866],{"className":127281,"code":136746,"language":127283,"meta":23,"style":23},[99,136867,136868,136888,136914,136940,136958],{"__ignoreMap":23},[102,136869,136870,136872,136874,136876,136878,136880,136882,136884,136886],{"class":104,"line":105},[102,136871,1023],{"class":112},[102,136873,66616],{"class":51291},[102,136875,66619],{"class":1952},[102,136877,158],{"class":112},[102,136879,136761],{"class":217},[102,136881,136764],{"class":1952},[102,136883,158],{"class":112},[102,136885,136769],{"class":217},[102,136887,51298],{"class":112},[102,136889,136890,136892,136894,136896,136898,136900,136902,136904,136906,136908,136910,136912],{"class":104,"line":24},[102,136891,52135],{"class":112},[102,136893,53812],{"class":51291},[102,136895,53815],{"class":1952},[102,136897,158],{"class":112},[102,136899,62690],{"class":217},[102,136901,14910],{"class":1952},[102,136903,158],{"class":112},[102,136905,136712],{"class":217},[102,136907,61011],{"class":1952},[102,136909,158],{"class":112},[102,136911,136796],{"class":217},[102,136913,51298],{"class":112},[102,136915,136916,136918,136920,136922,136924,136926,136928,136930,136932,136934,136936,136938],{"class":104,"line":1168},[102,136917,52135],{"class":112},[102,136919,53812],{"class":51291},[102,136921,53815],{"class":1952},[102,136923,158],{"class":112},[102,136925,136811],{"class":217},[102,136927,14910],{"class":1952},[102,136929,158],{"class":112},[102,136931,136818],{"class":217},[102,136933,61011],{"class":1952},[102,136935,158],{"class":112},[102,136937,136825],{"class":217},[102,136939,51298],{"class":112},[102,136941,136942,136944,136946,136948,136950,136952,136954,136956],{"class":104,"line":1183},[102,136943,52135],{"class":112},[102,136945,53878],{"class":51291},[102,136947,53815],{"class":1952},[102,136949,158],{"class":112},[102,136951,66639],{"class":217},[102,136953,136842],{"class":112},[102,136955,53878],{"class":51291},[102,136957,51298],{"class":112},[102,136959,136960,136962,136964],{"class":104,"line":1189},[102,136961,51776],{"class":112},[102,136963,66616],{"class":51291},[102,136965,51298],{"class":112},[1451,136967],{"style":126390,"src":136968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,136970,136972],{"id":136971},"_142-css新特性","14.2 CSS新特性",[73,136974,136976],{"id":136975},"_1421-新增选择器","14.2.1 新增选择器",[21988,136978,136980],{"id":136979},"_14211-属性选择器","14.2.1.1 属性选择器",[1451,136982],{"style":126390,"src":136983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[93,136985,136987],{"className":126534,"code":136986,"language":126536,"meta":23,"style":23},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[99,136988,136989,137004,137020],{"__ignoreMap":23},[102,136990,136991,136993,136995,136997,136999,137001],{"class":104,"line":105},[102,136992,53812],{"class":51291},[102,136994,1003],{"class":112},[102,136996,103098],{"class":1952},[102,136998,158],{"class":108},[102,137000,62690],{"class":217},[102,137002,137003],{"class":112},"] {\n",[102,137005,137006,137008,137010,137012,137014,137016,137018],{"class":104,"line":24},[102,137007,70887],{"class":161},[102,137009,51428],{"class":112},[102,137011,330],{"class":161},[102,137013,51483],{"class":108},[102,137015,51512],{"class":161},[102,137017,130114],{"class":161},[102,137019,1279],{"class":112},[102,137021,137022],{"class":104,"line":1168},[102,137023,1554],{"class":112},[1451,137025],{"style":126390,"src":137026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137028,142],{},[1120,137030,137031,137034,137037,137040],{},[59,137032,137033],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[59,137035,137036],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[59,137038,137039],{},"属性选择器也可以选择出来自定义的属性",[59,137041,137042,137044],{},[262,137043,9015],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21988,137046,137048],{"id":137047},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1451,137050],{"style":126390,"src":137051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[56,137053,137054],{},[59,137055,137056],{},"fist-child",[93,137058,137060],{"className":126534,"code":137059,"language":126536,"meta":23,"style":23},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[99,137061,137062,137067,137082,137102,137120],{"__ignoreMap":23},[102,137063,137064],{"class":104,"line":105},[102,137065,137066],{"class":171},"\u002F* 属性选择器 *\u002F\n",[102,137068,137069,137071,137073,137075,137077,137079],{"class":104,"line":24},[102,137070,53812],{"class":51291},[102,137072,1003],{"class":112},[102,137074,103098],{"class":1952},[102,137076,158],{"class":108},[102,137078,62690],{"class":217},[102,137080,137081],{"class":112},"] { }\n",[102,137083,137084,137086,137088,137090,137093,137096,137099],{"class":104,"line":1168},[102,137085,53812],{"class":51291},[102,137087,1003],{"class":112},[102,137089,14684],{"class":1952},[102,137091,137092],{"class":108},"^=",[102,137094,137095],{"class":217},"\"icon\"",[102,137097,137098],{"class":112},"] { }  ",[102,137100,137101],{"class":171},"\u002F* 以 icon 开头 *\u002F\n",[102,137103,137104,137106,137108,137110,137113,137115,137117],{"class":104,"line":1183},[102,137105,53812],{"class":51291},[102,137107,1003],{"class":112},[102,137109,14684],{"class":1952},[102,137111,137112],{"class":108},"$=",[102,137114,137095],{"class":217},[102,137116,137098],{"class":112},[102,137118,137119],{"class":171},"\u002F* 以 icon 结尾 *\u002F\n",[102,137121,137122,137124,137126,137128,137131,137133,137135],{"class":104,"line":1189},[102,137123,53812],{"class":51291},[102,137125,1003],{"class":112},[102,137127,14684],{"class":1952},[102,137129,137130],{"class":108},"*=",[102,137132,137095],{"class":217},[102,137134,137098],{"class":112},[102,137136,137137],{"class":171},"\u002F* 包含 icon *\u002F\n",[19,137139,137140],{},"ul的第一个儿子文本为红色",[19,137142,137143],{},"一定要在冒号前加空格，不然就是选中所有的了",[93,137145,137147],{"className":126534,"code":137146,"language":126536,"meta":23,"style":23},".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",[99,137148,137149,137155,137165,137169,137173,137178,137191,137204,137220,137237,137254],{"__ignoreMap":23},[102,137150,137151,137153],{"class":104,"line":105},[102,137152,126825],{"class":1952},[102,137154,15562],{"class":112},[102,137156,137157,137159,137161,137163],{"class":104,"line":24},[102,137158,70896],{"class":161},[102,137160,51428],{"class":112},[102,137162,57412],{"class":161},[102,137164,1279],{"class":112},[102,137166,137167],{"class":104,"line":1168},[102,137168,1554],{"class":112},[102,137170,137171],{"class":104,"line":1183},[102,137172,135995],{"class":112},[102,137174,137175],{"class":104,"line":1189},[102,137176,137177],{"class":171},"\u002F* 结构伪类选择器 *\u002F\n",[102,137179,137180,137182,137185,137188],{"class":104,"line":1203},[102,137181,59],{"class":51291},[102,137183,137184],{"class":1952},":first-child",[102,137186,137187],{"class":112}," { }           ",[102,137189,137190],{"class":171},"\u002F* 第一个 *\u002F\n",[102,137192,137193,137195,137198,137201],{"class":104,"line":1209},[102,137194,59],{"class":51291},[102,137196,137197],{"class":1952},":last-child",[102,137199,137200],{"class":112}," { }            ",[102,137202,137203],{"class":171},"\u002F* 最后一个 *\u002F\n",[102,137205,137206,137208,137210,137212,137214,137217],{"class":104,"line":1300},[102,137207,59],{"class":51291},[102,137209,129448],{"class":1952},[102,137211,113],{"class":112},[102,137213,190],{"class":161},[102,137215,137216],{"class":112},") { }          ",[102,137218,137219],{"class":171},"\u002F* 第2个 *\u002F\n",[102,137221,137222,137224,137226,137228,137231,137234],{"class":104,"line":1306},[102,137223,59],{"class":51291},[102,137225,129448],{"class":1952},[102,137227,113],{"class":112},[102,137229,137230],{"class":161},"2n",[102,137232,137233],{"class":112},") { }         ",[102,137235,137236],{"class":171},"\u002F* 偶数 *\u002F\n",[102,137238,137239,137241,137243,137245,137248,137251],{"class":104,"line":1318},[102,137240,59],{"class":51291},[102,137242,129448],{"class":1952},[102,137244,113],{"class":112},[102,137246,137247],{"class":161},"2n+1",[102,137249,137250],{"class":112},") { }       ",[102,137252,137253],{"class":171},"\u002F* 奇数 *\u002F\n",[102,137255,137256,137258,137260,137262,137265,137267],{"class":104,"line":1601},[102,137257,59],{"class":51291},[102,137259,129448],{"class":1952},[102,137261,113],{"class":112},[102,137263,137264],{"class":161},"-n+3",[102,137266,137250],{"class":112},[102,137268,137269],{"class":171},"\u002F* 前3个 *\u002F\n",[51602,137271,137274],{"className":137272},[137273],"example","\n  示例内容\n",[19,137276,137277],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1120,137279,137280],{},[59,137281,137282,137285],{},[99,137283,137284],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137287,137288],{},"也就是说它选择的是熊大",[56,137290,137291],{"start":1203},[59,137292,137293],{},"权重",[93,137295,137297],{"className":126534,"code":137296,"language":126536,"meta":23,"style":23},"\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",[99,137298,137299,137303,137313,137323,137337,137351,137365],{"__ignoreMap":23},[102,137300,137301],{"class":104,"line":105},[102,137302,137177],{"class":171},[102,137304,137305,137307,137309,137311],{"class":104,"line":24},[102,137306,59],{"class":51291},[102,137308,137184],{"class":1952},[102,137310,137187],{"class":112},[102,137312,137190],{"class":171},[102,137314,137315,137317,137319,137321],{"class":104,"line":1168},[102,137316,59],{"class":51291},[102,137318,137197],{"class":1952},[102,137320,137200],{"class":112},[102,137322,137203],{"class":171},[102,137324,137325,137327,137329,137331,137333,137335],{"class":104,"line":1183},[102,137326,59],{"class":51291},[102,137328,129448],{"class":1952},[102,137330,113],{"class":112},[102,137332,190],{"class":161},[102,137334,137216],{"class":112},[102,137336,137219],{"class":171},[102,137338,137339,137341,137343,137345,137347,137349],{"class":104,"line":1189},[102,137340,59],{"class":51291},[102,137342,129448],{"class":1952},[102,137344,113],{"class":112},[102,137346,137230],{"class":161},[102,137348,137233],{"class":112},[102,137350,137236],{"class":171},[102,137352,137353,137355,137357,137359,137361,137363],{"class":104,"line":1203},[102,137354,59],{"class":51291},[102,137356,129448],{"class":1952},[102,137358,113],{"class":112},[102,137360,137247],{"class":161},[102,137362,137250],{"class":112},[102,137364,137253],{"class":171},[102,137366,137367,137369,137371,137373,137375,137377],{"class":104,"line":1209},[102,137368,59],{"class":51291},[102,137370,129448],{"class":1952},[102,137372,113],{"class":112},[102,137374,137264],{"class":161},[102,137376,137250],{"class":112},[102,137378,137269],{"class":171},[19,137380,137381],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21988,137383,137385],{"id":137384},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137387,137388],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1451,137390],{"style":126390,"src":137391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[56,137393,137394],{},[59,137395,142],{},[1120,137397,137398,137401,137404,137407,137410,137413],{},[59,137399,137400],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[59,137402,137403],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[59,137405,137406],{},"语法： element::before {}",[59,137408,137409],{},"before 和 after 必须有 content 属性",[59,137411,137412],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[59,137414,137415],{},"伪元素选择器和标签选择器一样，权重为 1",[56,137417,137418],{"start":24},[59,137419,137420],{},"实例",[93,137422,137423],{"className":126534,"code":137296,"language":126536,"meta":23,"style":23},[99,137424,137425,137429,137439,137449,137463,137477,137491],{"__ignoreMap":23},[102,137426,137427],{"class":104,"line":105},[102,137428,137177],{"class":171},[102,137430,137431,137433,137435,137437],{"class":104,"line":24},[102,137432,59],{"class":51291},[102,137434,137184],{"class":1952},[102,137436,137187],{"class":112},[102,137438,137190],{"class":171},[102,137440,137441,137443,137445,137447],{"class":104,"line":1168},[102,137442,59],{"class":51291},[102,137444,137197],{"class":1952},[102,137446,137200],{"class":112},[102,137448,137203],{"class":171},[102,137450,137451,137453,137455,137457,137459,137461],{"class":104,"line":1183},[102,137452,59],{"class":51291},[102,137454,129448],{"class":1952},[102,137456,113],{"class":112},[102,137458,190],{"class":161},[102,137460,137216],{"class":112},[102,137462,137219],{"class":171},[102,137464,137465,137467,137469,137471,137473,137475],{"class":104,"line":1189},[102,137466,59],{"class":51291},[102,137468,129448],{"class":1952},[102,137470,113],{"class":112},[102,137472,137230],{"class":161},[102,137474,137233],{"class":112},[102,137476,137236],{"class":171},[102,137478,137479,137481,137483,137485,137487,137489],{"class":104,"line":1203},[102,137480,59],{"class":51291},[102,137482,129448],{"class":1952},[102,137484,113],{"class":112},[102,137486,137247],{"class":161},[102,137488,137250],{"class":112},[102,137490,137253],{"class":171},[102,137492,137493,137495,137497,137499,137501,137503],{"class":104,"line":1209},[102,137494,59],{"class":51291},[102,137496,129448],{"class":1952},[102,137498,113],{"class":112},[102,137500,137264],{"class":161},[102,137502,137250],{"class":112},[102,137504,137269],{"class":171},[1451,137506],{"style":126390,"src":137507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[56,137509,137510],{"start":1168},[59,137511,137512],{},"使用场景1",[1451,137514],{"style":126390,"src":137515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137517,137518],{},"不需要再加盒子来整红色那部分了",[93,137520,137522],{"className":126534,"code":137521,"language":126536,"meta":23,"style":23},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[99,137523,137524,137529,137538,137549,137559,137563,137572,137583,137593],{"__ignoreMap":23},[102,137525,137526],{"class":104,"line":105},[102,137527,137528],{"class":171},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[102,137530,137531,137533,137536],{"class":104,"line":24},[102,137532,51602],{"class":51291},[102,137534,137535],{"class":1952},"::before",[102,137537,15562],{"class":112},[102,137539,137540,137543,137545,137547],{"class":104,"line":1168},[102,137541,137542],{"class":161},"  content",[102,137544,51428],{"class":112},[102,137546,7642],{"class":217},[102,137548,1279],{"class":112},[102,137550,137551,137553,137555,137557],{"class":104,"line":1183},[102,137552,128150],{"class":161},[102,137554,51428],{"class":112},[102,137556,60860],{"class":161},[102,137558,1279],{"class":112},[102,137560,137561],{"class":104,"line":1189},[102,137562,1554],{"class":112},[102,137564,137565,137567,137570],{"class":104,"line":1203},[102,137566,51602],{"class":51291},[102,137568,137569],{"class":1952},"::after",[102,137571,15562],{"class":112},[102,137573,137574,137576,137578,137581],{"class":104,"line":1209},[102,137575,137542],{"class":161},[102,137577,51428],{"class":112},[102,137579,137580],{"class":217},"\"→\"",[102,137582,1279],{"class":112},[102,137584,137585,137587,137589,137591],{"class":104,"line":1300},[102,137586,70896],{"class":161},[102,137588,51428],{"class":112},[102,137590,62061],{"class":161},[102,137592,1279],{"class":112},[102,137594,137595],{"class":104,"line":1306},[102,137596,1554],{"class":112},[1451,137598],{"style":126390,"src":137599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137601,137602],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1451,137604],{"style":126390,"src":137605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137607,137608],{},"但是在引用时需要先转义一下",[19,137610,137611],{},"content='\\e930'",[56,137613,137614],{"start":1183},[59,137615,137616],{},"使用场景2",[19,137618,137619],{},"仿土豆效果",[19,137621,137622],{},"通过使用伪元素选择器可以减少body中盒子的数量",[93,137624,137625],{"className":126534,"code":137521,"language":126536,"meta":23,"style":23},[99,137626,137627,137631,137639,137649,137659,137663,137671,137681,137691],{"__ignoreMap":23},[102,137628,137629],{"class":104,"line":105},[102,137630,137528],{"class":171},[102,137632,137633,137635,137637],{"class":104,"line":24},[102,137634,51602],{"class":51291},[102,137636,137535],{"class":1952},[102,137638,15562],{"class":112},[102,137640,137641,137643,137645,137647],{"class":104,"line":1168},[102,137642,137542],{"class":161},[102,137644,51428],{"class":112},[102,137646,7642],{"class":217},[102,137648,1279],{"class":112},[102,137650,137651,137653,137655,137657],{"class":104,"line":1183},[102,137652,128150],{"class":161},[102,137654,51428],{"class":112},[102,137656,60860],{"class":161},[102,137658,1279],{"class":112},[102,137660,137661],{"class":104,"line":1189},[102,137662,1554],{"class":112},[102,137664,137665,137667,137669],{"class":104,"line":1203},[102,137666,51602],{"class":51291},[102,137668,137569],{"class":1952},[102,137670,15562],{"class":112},[102,137672,137673,137675,137677,137679],{"class":104,"line":1209},[102,137674,137542],{"class":161},[102,137676,51428],{"class":112},[102,137678,137580],{"class":217},[102,137680,1279],{"class":112},[102,137682,137683,137685,137687,137689],{"class":104,"line":1300},[102,137684,70896],{"class":161},[102,137686,51428],{"class":112},[102,137688,62061],{"class":161},[102,137690,1279],{"class":112},[102,137692,137693],{"class":104,"line":1306},[102,137694,1554],{"class":112},[1451,137696],{"style":126390,"src":137697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[56,137699,137700],{"start":1189},[59,137701,137702],{},"使用场景3",[19,137704,137705],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[93,137707,137709],{"className":126534,"code":137708,"language":126536,"meta":23,"style":23},".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",[99,137710,137711,137717,137727,137731,137735,137739,137747,137757,137767,137771,137779,137789,137799],{"__ignoreMap":23},[102,137712,137713,137715],{"class":104,"line":105},[102,137714,130382],{"class":1952},[102,137716,15562],{"class":112},[102,137718,137719,137721,137723,137725],{"class":104,"line":24},[102,137720,131014],{"class":161},[102,137722,51428],{"class":112},[102,137724,23726],{"class":161},[102,137726,1279],{"class":112},[102,137728,137729],{"class":104,"line":1168},[102,137730,1554],{"class":112},[102,137732,137733],{"class":104,"line":1183},[102,137734,135995],{"class":112},[102,137736,137737],{"class":104,"line":1189},[102,137738,137528],{"class":171},[102,137740,137741,137743,137745],{"class":104,"line":1203},[102,137742,51602],{"class":51291},[102,137744,137535],{"class":1952},[102,137746,15562],{"class":112},[102,137748,137749,137751,137753,137755],{"class":104,"line":1209},[102,137750,137542],{"class":161},[102,137752,51428],{"class":112},[102,137754,7642],{"class":217},[102,137756,1279],{"class":112},[102,137758,137759,137761,137763,137765],{"class":104,"line":1300},[102,137760,128150],{"class":161},[102,137762,51428],{"class":112},[102,137764,60860],{"class":161},[102,137766,1279],{"class":112},[102,137768,137769],{"class":104,"line":1306},[102,137770,1554],{"class":112},[102,137772,137773,137775,137777],{"class":104,"line":1318},[102,137774,51602],{"class":51291},[102,137776,137569],{"class":1952},[102,137778,15562],{"class":112},[102,137780,137781,137783,137785,137787],{"class":104,"line":1601},[102,137782,137542],{"class":161},[102,137784,51428],{"class":112},[102,137786,137580],{"class":217},[102,137788,1279],{"class":112},[102,137790,137791,137793,137795,137797],{"class":104,"line":1606},[102,137792,70896],{"class":161},[102,137794,51428],{"class":112},[102,137796,62061],{"class":161},[102,137798,1279],{"class":112},[102,137800,137801],{"class":104,"line":1612},[102,137802,1554],{"class":112},[19,137804,137805],{},"div {\nmargin: 0 auto;\n}",[93,137807,137810],{"className":137808,"code":137809,"language":5177},[5175],"\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",[99,137811,137809],{"__ignoreMap":23},[19,137813,137814],{},"如果想让多个元素都发生变化",[19,137816,137817],{},"不能如下操作：",[19,137819,137820],{},"transition: width 2s ease 0.5s;",[19,137822,137823],{},"transition: height 2s ease 0.5s;不对！！！",[19,137825,137826],{},"上方会样式冲突，导致不显示任何过渡效果",[19,137828,137829],{},"使用如下：加逗号隔开",[19,137831,137832],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,137834,137835],{},"transition all 2s ease;",[73,137837,137839],{"id":137838},"_1426-过渡练习","14.2.6 过渡练习",[56,137841,137842],{},[59,137843,137844],{},"进度条",[1451,137846],{"style":126390,"src":137847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[93,137849,137851],{"className":126534,"code":137850,"language":126536,"meta":23,"style":23},"div {\n  transition: all 0.3s ease;\n}\n",[99,137852,137853,137859,137877],{"__ignoreMap":23},[102,137854,137855,137857],{"class":104,"line":105},[102,137856,51602],{"class":51291},[102,137858,15562],{"class":112},[102,137860,137861,137864,137866,137868,137871,137873,137875],{"class":104,"line":24},[102,137862,137863],{"class":161},"  transition",[102,137865,51428],{"class":112},[102,137867,28112],{"class":161},[102,137869,137870],{"class":161}," 0.3",[102,137872,808],{"class":108},[102,137874,78671],{"class":161},[102,137876,1279],{"class":112},[102,137878,137879],{"class":104,"line":1168},[102,137880,1554],{"class":112},[56,137882,137883],{"start":24},[59,137884,137885],{},"小米logo",[19,137887,137888],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[93,137890,137892],{"className":126534,"code":137891,"language":126536,"meta":23,"style":23},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[99,137893,137894,137899,137905,137921,137926],{"__ignoreMap":23},[102,137895,137896],{"class":104,"line":105},[102,137897,137898],{"class":171},"\u002F* CSS3 过渡 *\u002F\n",[102,137900,137901,137903],{"class":104,"line":24},[102,137902,51602],{"class":51291},[102,137904,15562],{"class":112},[102,137906,137907,137909,137911,137913,137915,137917,137919],{"class":104,"line":1168},[102,137908,137863],{"class":161},[102,137910,51428],{"class":112},[102,137912,28112],{"class":161},[102,137914,137870],{"class":161},[102,137916,808],{"class":108},[102,137918,78671],{"class":161},[102,137920,1279],{"class":112},[102,137922,137923],{"class":104,"line":1183},[102,137924,137925],{"class":171},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[102,137927,137928],{"class":104,"line":1189},[102,137929,1554],{"class":112},[19,137931,137932],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5116,137934,137935],{},"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":23,"searchDepth":24,"depth":24,"links":137937},[137938,137943],{"id":136268,"depth":24,"text":136269,"children":137939},[137940,137941,137942],{"id":136272,"depth":1168,"text":136273},{"id":136349,"depth":1168,"text":136350},{"id":136680,"depth":1168,"text":136681},{"id":136971,"depth":24,"text":136972,"children":137944},[137945,137946],{"id":136975,"depth":1168,"text":136976},{"id":137838,"depth":1168,"text":137839},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136260,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137953,"title":137954,"body":137955,"description":27,"extension":28,"meta":139699,"navigation":30,"path":139700,"seo":139701,"stem":139702,"__hash__":139703},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137956,"toc":139680},[137957,137960,137964,137967,137973,137979,137983,137985,137988,137991,137994,137997,138000,138003,138006,138010,138014,138017,138020,138023,138027,138030,138033,138038,138041,138044,138047,138051,138054,138063,138066,138069,138073,138076,138079,138084,138091,138105,138113,138120,138125,138128,138131,138134,138141,138145,138151,138157,138160,138163,138168,138174,138176,138184,138189,138192,138198,138200,138205,138210,138213,138215,138220,138223,138228,138233,138267,138271,138275,138278,138282,138285,138371,138374,138411,138414,138450,138454,138459,138472,138526,138528,138556,138558,138586,138592,138606,138608,138652,138654,138698,138701,138708,138719,138721,138748,138750,138776,138783,138799,138801,138895,138897,138991,138998,139001,139006,139012,139086,139089,139091,139127,139129,139165,139168,139175,139194,139197,139200,139202,139227,139229,139253,139256,139259,139289,139293,139296,139359,139361,139427,139429,139493,139496,139528,139530,139556,139558,139584,139587,139618,139620,139646,139648,139674,139677],[10,137958,137954],{"id":137959},"_15-品优购项目上篇-搭建与公共模块",[14,137961,137963],{"id":137962},"_151-项目规划","15.1 项目规划",[1451,137965],{"style":126390,"src":137966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,137968,137969,137972],{},[262,137970,137971],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,137974,137975,137978],{},[262,137976,137977],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,137980,137982],{"id":137981},"_152-项目介绍","15.2 项目介绍",[19,137984,137971],{},[1451,137986],{"style":126390,"src":137987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,137989,137990],{},"主页：",[1451,137992],{"style":126390,"src":137993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,137995,137996],{},"列表页：",[1451,137998],{"style":126390,"src":137999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138001,138002],{},"注册页：",[1451,138004],{"style":126390,"src":138005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138007,138009],{"id":138008},"_153-项目搭建工作","15.3 项目搭建工作",[73,138011,138013],{"id":138012},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1451,138015],{"style":126390,"src":138016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138018,138019],{},"经常更换的图片要放到upload文件夹中",[19,138021,138022],{},"不经常换的放到images文件夹中",[73,138024,138026],{"id":138025},"_1532-创建文件如下","15.3.2 创建文件如下",[1451,138028],{"style":126390,"src":138029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1451,138031],{"style":126390,"src":138032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138034,138035],{},[262,138036,138037],{},"初始化样式：",[19,138039,138040],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138042,138043],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138045,138046],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[73,138048,138050],{"id":138049},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138052,138053],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138055,138056,138057,138062],{},"这里最典型的应用就是 ",[262,138058,138059],{},[99,138060,138061],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1451,138064],{"style":126390,"src":138065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138067,138068],{},"通过link方法来引入",[73,138070,138072],{"id":138071},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1451,138074],{"style":126390,"src":138075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138077,138078],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[56,138080,138081],{},[59,138082,138083],{},"制作favicon图标",[19,138085,138086,138087,138090],{},"①把品优购图标切成 ",[99,138088,138089],{},"png"," 图片",[19,138092,138093,138094,138096,138097,138100,138101],{},"②把 ",[99,138095,138089],{}," 图片转换为 ",[99,138098,138099],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[351,138102,138103],{"href":138103,"rel":138104},"http:\u002F\u002Fwww.bitbug.net\u002F",[23855],[56,138106,138107,138110],{"start":24},[59,138108,138109],{},"favicon图标放到网站根目录下",[59,138111,138112],{},"HTML页面引入favicon",[19,138114,138115,138116,138119],{},"在html 页面里面的 ",[99,138117,138118],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138121,138122],{},[99,138123,138124],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138126,138127],{},"复制这行代码或者在生成这个的网站进行复制",[1451,138129],{"style":126390,"src":138130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138132,138133],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138135,138136,138137],{},"例如:",[351,138138,138139],{"href":138139,"rel":138140},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23855],[73,138142,138144],{"id":138143},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138146,138147,138150],{},[262,138148,138149],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138152,138153,138156],{},[262,138154,138155],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138158,138159],{},"页面必须有三个标签用来符合 SEO 优化",[1451,138161],{"style":126390,"src":138162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[56,138164,138165],{},[59,138166,138167],{},"title网站标题",[19,138169,138170,138173],{},[262,138171,138172],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138175,68781],{},[1120,138177,138178,138181],{},[59,138179,138180],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[59,138182,138183],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[56,138185,138186],{"start":24},[59,138187,138188],{},"description网站描述",[19,138190,138191],{},"简要说明我们网站主要是做什么的",[19,138193,138194,138197],{},[262,138195,138196],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138199,68781],{},[19,138201,138202],{},[99,138203,138204],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[56,138206,138207],{"start":1168},[59,138208,138209],{},"keywords关键词",[19,138211,138212],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138214,68781],{},[19,138216,138217],{},[99,138218,138219],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138221,138222],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138224,138225],{},[262,138226,138227],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[56,138229,138230],{"start":1183},[59,138231,138232],{},"代码总结",[93,138234,138235],{"className":127281,"code":130638,"language":127283,"meta":23,"style":23},[99,138236,138237,138241,138255,138259],{"__ignoreMap":23},[102,138238,138239],{"class":104,"line":105},[102,138240,130645],{"class":171},[102,138242,138243,138245,138247,138249,138251,138253],{"class":104,"line":24},[102,138244,1023],{"class":112},[102,138246,51602],{"class":51291},[102,138248,53477],{"class":1952},[102,138250,158],{"class":112},[102,138252,130658],{"class":217},[102,138254,51298],{"class":112},[102,138256,138257],{"class":104,"line":1168},[102,138258,130665],{"class":112},[102,138260,138261,138263,138265],{"class":104,"line":1183},[102,138262,51776],{"class":112},[102,138264,51602],{"class":51291},[102,138266,51298],{"class":112},[14,138268,138270],{"id":138269},"_154-项目公共部分制作","15.4 项目公共部分制作",[73,138272,138274],{"id":138273},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1451,138276],{"style":126390,"src":138277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[73,138279,138281],{"id":138280},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138283,138284],{},"布局思路：",[1120,138286,138287,138290,138293,138315,138348],{},[59,138288,138289],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[59,138291,138292],{},"里面包含版心的盒子",[59,138294,138295,138296],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1120,138297,138298,138306,138312],{},[59,138299,138300,138301,21490,138303,138305],{},"1 号盒子 里面包含一个",[99,138302,1120],{},[99,138304,1120],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[59,138307,138308,138309,138311],{},"里面的内容是水平排列，所以需要给",[99,138310,59],{},"设置浮动",[59,138313,138314],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[59,138316,138317,138318],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1120,138319,138320,138334,138339],{},[59,138321,138322,138323,21490,138325,138327,138328,138330,138331,138333],{},"2 号盒子 里面包含一个",[99,138324,1120],{},[99,138326,1120],{},"包裹",[99,138329,59],{},"，中间的",[99,138332,1034],{},"可以用样式去设置，也可以用字符 |",[59,138335,138336,138337,138311],{},"里面内容水平排列，给",[99,138338,59],{},[59,138340,138341,138342,138344,138345,138347],{},"找到里面所有偶数的 ",[99,138343,59],{}," 设置样式（偶数的 ",[99,138346,59],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[59,138349,138350,138351],{},"需要用到字体图标",[1120,138352,138353,138359,138362,138365,138368],{},[59,138354,138355,138356],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[99,138357,138358],{},"arrow-icon",[59,138360,138361],{},"先要引入字体图片的资源",[59,138363,138364],{},"在样式里面利用 font-face 来进行声明",[59,138366,138367],{},"在伪元素的 content属性设置 图标的编码",[59,138369,138370],{},"给伪元素设置font-family属性",[19,138372,138373],{},"结构实例代码：",[93,138375,138377],{"className":126534,"code":138376,"language":126536,"meta":23,"style":23},"div::before {\n  content: \"\";\n  display: block;\n}\n",[99,138378,138379,138387,138397,138407],{"__ignoreMap":23},[102,138380,138381,138383,138385],{"class":104,"line":105},[102,138382,51602],{"class":51291},[102,138384,137535],{"class":1952},[102,138386,15562],{"class":112},[102,138388,138389,138391,138393,138395],{"class":104,"line":24},[102,138390,137542],{"class":161},[102,138392,51428],{"class":112},[102,138394,7642],{"class":217},[102,138396,1279],{"class":112},[102,138398,138399,138401,138403,138405],{"class":104,"line":1168},[102,138400,128150],{"class":161},[102,138402,51428],{"class":112},[102,138404,60860],{"class":161},[102,138406,1279],{"class":112},[102,138408,138409],{"class":104,"line":1183},[102,138410,1554],{"class":112},[19,138412,138413],{},"样式实例代码：",[93,138415,138416],{"className":126534,"code":138376,"language":126536,"meta":23,"style":23},[99,138417,138418,138426,138436,138446],{"__ignoreMap":23},[102,138419,138420,138422,138424],{"class":104,"line":105},[102,138421,51602],{"class":51291},[102,138423,137535],{"class":1952},[102,138425,15562],{"class":112},[102,138427,138428,138430,138432,138434],{"class":104,"line":24},[102,138429,137542],{"class":161},[102,138431,51428],{"class":112},[102,138433,7642],{"class":217},[102,138435,1279],{"class":112},[102,138437,138438,138440,138442,138444],{"class":104,"line":1168},[102,138439,128150],{"class":161},[102,138441,51428],{"class":112},[102,138443,60860],{"class":161},[102,138445,1279],{"class":112},[102,138447,138448],{"class":104,"line":1183},[102,138449,1554],{"class":112},[73,138451,138453],{"id":138452},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1120,138455,138456],{},[59,138457,138458],{},"header 盒子必须要有高度",[19,138460,138461,138462,138464,138465],{},"1 号盒子是 ",[99,138463,131546],{}," 标志定位，在正常开发过程中， ",[262,138466,138467,138468,138471],{},"logo的布局其实是有讲究的，需要进行 ",[99,138469,138470],{},"logoSEO","的优化 （★★★）",[1120,138473,138474,138482,138490,138517],{},[59,138475,138476,138478,138479,138481],{},[99,138477,131546],{}," 里面首先放一个 ",[99,138480,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[59,138483,138484,138486,138487,138489],{},[99,138485,10],{}," 里面再放一个链接，可以返回首页的，把 ",[99,138488,131546],{}," 的背景图片给链接即可",[59,138491,138492,138493],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1120,138494,138495,138510],{},[59,138496,138497,138498,138501,138502,138505,138506,138509],{},"方法1：",[99,138499,138500],{},"text-indent"," 移到盒子外面（",[99,138503,138504],{},"text-indent: -9999px",") ，然后 ",[99,138507,138508],{},"overflow:hidden"," ，淘宝的做法",[59,138511,138512,138513,138516],{},"方法2：直接给 ",[99,138514,138515],{},"font-size: 0;"," 就看不到文字了，京东的做法",[59,138518,138519,138520,138522,138523,138525],{},"最后给链接一个 ",[99,138521,51398],{}," 属性，这样鼠标放到 ",[99,138524,131546],{}," 上就可以看到提示文字了",[19,138527,138373],{},[93,138529,138530],{"className":127281,"code":131767,"language":127283,"meta":23,"style":23},[99,138531,138532],{"__ignoreMap":23},[102,138533,138534,138536,138538,138540,138542,138544,138546,138548,138550,138552,138554],{"class":104,"line":105},[102,138535,1023],{"class":112},[102,138537,351],{"class":51291},[102,138539,61048],{"class":1952},[102,138541,158],{"class":112},[102,138543,131782],{"class":217},[102,138545,131785],{"class":1952},[102,138547,158],{"class":112},[102,138549,131790],{"class":217},[102,138551,131793],{"class":112},[102,138553,351],{"class":51291},[102,138555,51298],{"class":112},[19,138557,138413],{},[93,138559,138560],{"className":127281,"code":131767,"language":127283,"meta":23,"style":23},[99,138561,138562],{"__ignoreMap":23},[102,138563,138564,138566,138568,138570,138572,138574,138576,138578,138580,138582,138584],{"class":104,"line":105},[102,138565,1023],{"class":112},[102,138567,351],{"class":51291},[102,138569,61048],{"class":1952},[102,138571,158],{"class":112},[102,138573,131782],{"class":217},[102,138575,131785],{"class":1952},[102,138577,158],{"class":112},[102,138579,131790],{"class":217},[102,138581,131793],{"class":112},[102,138583,351],{"class":51291},[102,138585,51298],{"class":112},[19,138587,138588,138589,138591],{},"2 号盒子是 ",[99,138590,131559],{}," 搜索模块定位",[1120,138593,138594,138597,138600,138603],{},[59,138595,138596],{},"search盒子利用定位的方式放在对应的位置",[59,138598,138599],{},"search盒子设置绝对定位，header盒子设置相对定位",[59,138601,138602],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[59,138604,138605],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138607,138373],{},[93,138609,138610],{"className":126534,"code":131854,"language":126536,"meta":23,"style":23},[99,138611,138612,138634,138638,138648],{"__ignoreMap":23},[102,138613,138614,138616,138618,138620,138622,138624,138626,138628,138630,138632],{"class":104,"line":105},[102,138615,51602],{"class":51291},[102,138617,12425],{"class":112},[102,138619,19],{"class":51291},[102,138621,12425],{"class":112},[102,138623,10],{"class":51291},[102,138625,12425],{"class":112},[102,138627,1120],{"class":51291},[102,138629,12425],{"class":112},[102,138631,59],{"class":51291},[102,138633,15562],{"class":112},[102,138635,138636],{"class":104,"line":24},[102,138637,131883],{"class":171},[102,138639,138640,138642,138644,138646],{"class":104,"line":1168},[102,138641,128150],{"class":161},[102,138643,51428],{"class":112},[102,138645,60860],{"class":161},[102,138647,1279],{"class":112},[102,138649,138650],{"class":104,"line":1183},[102,138651,1554],{"class":112},[19,138653,138413],{},[93,138655,138656],{"className":126534,"code":131854,"language":126536,"meta":23,"style":23},[99,138657,138658,138680,138684,138694],{"__ignoreMap":23},[102,138659,138660,138662,138664,138666,138668,138670,138672,138674,138676,138678],{"class":104,"line":105},[102,138661,51602],{"class":51291},[102,138663,12425],{"class":112},[102,138665,19],{"class":51291},[102,138667,12425],{"class":112},[102,138669,10],{"class":51291},[102,138671,12425],{"class":112},[102,138673,1120],{"class":51291},[102,138675,12425],{"class":112},[102,138677,59],{"class":51291},[102,138679,15562],{"class":112},[102,138681,138682],{"class":104,"line":24},[102,138683,131883],{"class":171},[102,138685,138686,138688,138690,138692],{"class":104,"line":1168},[102,138687,128150],{"class":161},[102,138689,51428],{"class":112},[102,138691,60860],{"class":161},[102,138693,1279],{"class":112},[102,138695,138696],{"class":104,"line":1183},[102,138697,1554],{"class":112},[19,138699,138700],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138702,138703,138704,138707],{},"3 号盒子是 ",[99,138705,138706],{},"hotwords"," 热词模块定位",[1120,138709,138710,138713,138716],{},[59,138711,138712],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[59,138714,138715],{},"给里面所有的a标签设置 左右10px的外边距",[59,138717,138718],{},"给第一个a标签设置文字变红色（#c81623）",[19,138720,138373],{},[93,138722,138724],{"className":126534,"code":138723,"language":126536,"meta":23,"style":23},"div {\n  margin: 0 auto;\n}\n",[99,138725,138726,138732,138744],{"__ignoreMap":23},[102,138727,138728,138730],{"class":104,"line":105},[102,138729,51602],{"class":51291},[102,138731,15562],{"class":112},[102,138733,138734,138736,138738,138740,138742],{"class":104,"line":24},[102,138735,70461],{"class":161},[102,138737,51428],{"class":112},[102,138739,304],{"class":161},[102,138741,51547],{"class":161},[102,138743,1279],{"class":112},[102,138745,138746],{"class":104,"line":1168},[102,138747,1554],{"class":112},[19,138749,138413],{},[93,138751,138752],{"className":126534,"code":138723,"language":126536,"meta":23,"style":23},[99,138753,138754,138760,138772],{"__ignoreMap":23},[102,138755,138756,138758],{"class":104,"line":105},[102,138757,51602],{"class":51291},[102,138759,15562],{"class":112},[102,138761,138762,138764,138766,138768,138770],{"class":104,"line":24},[102,138763,70461],{"class":161},[102,138765,51428],{"class":112},[102,138767,304],{"class":161},[102,138769,51547],{"class":161},[102,138771,1279],{"class":112},[102,138773,138774],{"class":104,"line":1168},[102,138775,1554],{"class":112},[19,138777,138778,138779,138782],{},"4 号盒子是 ",[99,138780,138781],{},"shopcar"," 购物车模块",[1120,138784,138785,138790,138793,138796],{},[59,138786,123326,138787,138789],{},[99,138788,138781],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[59,138791,138792],{},"count 统计部分用绝对定位做",[59,138794,138795],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[59,138797,138798],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,138800,138373],{},[93,138802,138803],{"className":126534,"code":131966,"language":126536,"meta":23,"style":23},[99,138804,138805,138809,138823,138827,138841,138845,138859,138863,138877,138881],{"__ignoreMap":23},[102,138806,138807],{"class":104,"line":105},[102,138808,131973],{"class":171},[102,138810,138811,138813,138815,138817,138819,138821],{"class":104,"line":24},[102,138812,131978],{"class":1952},[102,138814,79798],{"class":112},[102,138816,128894],{"class":161},[102,138818,51428],{"class":112},[102,138820,131987],{"class":161},[102,138822,129464],{"class":112},[102,138824,138825],{"class":104,"line":1168},[102,138826,131994],{"class":171},[102,138828,138829,138831,138833,138835,138837,138839],{"class":104,"line":1183},[102,138830,131999],{"class":1952},[102,138832,79798],{"class":112},[102,138834,128894],{"class":161},[102,138836,51428],{"class":112},[102,138838,54755],{"class":161},[102,138840,129464],{"class":112},[102,138842,138843],{"class":104,"line":1189},[102,138844,132014],{"class":171},[102,138846,138847,138849,138851,138853,138855,138857],{"class":104,"line":1203},[102,138848,132019],{"class":1952},[102,138850,79798],{"class":112},[102,138852,128894],{"class":161},[102,138854,51428],{"class":112},[102,138856,54822],{"class":161},[102,138858,129464],{"class":112},[102,138860,138861],{"class":104,"line":1209},[102,138862,132034],{"class":171},[102,138864,138865,138867,138869,138871,138873,138875],{"class":104,"line":1300},[102,138866,132039],{"class":1952},[102,138868,79798],{"class":112},[102,138870,128894],{"class":161},[102,138872,51428],{"class":112},[102,138874,86224],{"class":161},[102,138876,129464],{"class":112},[102,138878,138879],{"class":104,"line":1306},[102,138880,132054],{"class":171},[102,138882,138883,138885,138887,138889,138891,138893],{"class":104,"line":1318},[102,138884,132059],{"class":1952},[102,138886,79798],{"class":112},[102,138888,128894],{"class":161},[102,138890,51428],{"class":112},[102,138892,132068],{"class":161},[102,138894,129464],{"class":112},[19,138896,138413],{},[93,138898,138899],{"className":126534,"code":131966,"language":126536,"meta":23,"style":23},[99,138900,138901,138905,138919,138923,138937,138941,138955,138959,138973,138977],{"__ignoreMap":23},[102,138902,138903],{"class":104,"line":105},[102,138904,131973],{"class":171},[102,138906,138907,138909,138911,138913,138915,138917],{"class":104,"line":24},[102,138908,131978],{"class":1952},[102,138910,79798],{"class":112},[102,138912,128894],{"class":161},[102,138914,51428],{"class":112},[102,138916,131987],{"class":161},[102,138918,129464],{"class":112},[102,138920,138921],{"class":104,"line":1168},[102,138922,131994],{"class":171},[102,138924,138925,138927,138929,138931,138933,138935],{"class":104,"line":1183},[102,138926,131999],{"class":1952},[102,138928,79798],{"class":112},[102,138930,128894],{"class":161},[102,138932,51428],{"class":112},[102,138934,54755],{"class":161},[102,138936,129464],{"class":112},[102,138938,138939],{"class":104,"line":1189},[102,138940,132014],{"class":171},[102,138942,138943,138945,138947,138949,138951,138953],{"class":104,"line":1203},[102,138944,132019],{"class":1952},[102,138946,79798],{"class":112},[102,138948,128894],{"class":161},[102,138950,51428],{"class":112},[102,138952,54822],{"class":161},[102,138954,129464],{"class":112},[102,138956,138957],{"class":104,"line":1209},[102,138958,132034],{"class":171},[102,138960,138961,138963,138965,138967,138969,138971],{"class":104,"line":1300},[102,138962,132039],{"class":1952},[102,138964,79798],{"class":112},[102,138966,128894],{"class":161},[102,138968,51428],{"class":112},[102,138970,86224],{"class":161},[102,138972,129464],{"class":112},[102,138974,138975],{"class":104,"line":1306},[102,138976,132054],{"class":171},[102,138978,138979,138981,138983,138985,138987,138989],{"class":104,"line":1318},[102,138980,132059],{"class":1952},[102,138982,79798],{"class":112},[102,138984,128894],{"class":161},[102,138986,51428],{"class":112},[102,138988,132068],{"class":161},[102,138990,129464],{"class":112},[73,138992,138994,138995,138997],{"id":138993},"_1544-nav导航模块制作","15.4.4 ",[99,138996,53704],{},"导航模块制作",[1451,138999],{"style":126390,"src":139000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139002,139003,139005],{},[99,139004,53704],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139007,139008,139009],{},"1 号盒子左侧浮动，",[99,139010,139011],{},"dropdown",[1120,139013,139014,139024,139032,139038,139046,139056,139064,139075],{},[59,139015,139016,139017,101009,139020,139023],{},"1号盒子有讲究，根据相关性 里面包含 ",[99,139018,139019],{},".dt",[99,139021,139022],{},".dd"," 两个盒子",[59,139025,139026,139028,139029,139031],{},[99,139027,139019],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[99,139030,139022],{}," 挤到下面去了",[59,139033,139034,139035,139037],{},"给 ",[99,139036,139022],{}," 盒子设置宽度 和 高度，以及背景颜色",[59,139039,139034,139040,139042,139043,120228],{},[99,139041,139022],{}," 盒子里面定义 无序列表 （",[99,139044,139045],{},"ul > li > a",[59,139047,139048,139049,139051,139052,139055],{},"每个 ",[99,139050,59],{}," 都有一个高度（",[99,139053,139054],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[59,139057,139034,139058,139060,139061,120228],{},[99,139059,59],{}," 里面的a设置文字大小（",[99,139062,139063],{},"14px",[59,139065,139034,139066,139068,139069,139071,139072,139074],{},[99,139067,59],{}," 设置 ",[99,139070,127695],{},"，当鼠标移入的时候，让",[99,139073,59],{},"的背景变成白色，让里面的文字变成红色",[59,139076,139077,139079,139080,139082,139083,139085],{},[99,139078,59],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[99,139081,59],{},"的右侧，那么给",[99,139084,59],{},"设置相对定位",[19,139087,139088],{},"一定要注意相关性",[19,139090,138373],{},[93,139092,139093],{"className":126534,"code":138376,"language":126536,"meta":23,"style":23},[99,139094,139095,139103,139113,139123],{"__ignoreMap":23},[102,139096,139097,139099,139101],{"class":104,"line":105},[102,139098,51602],{"class":51291},[102,139100,137535],{"class":1952},[102,139102,15562],{"class":112},[102,139104,139105,139107,139109,139111],{"class":104,"line":24},[102,139106,137542],{"class":161},[102,139108,51428],{"class":112},[102,139110,7642],{"class":217},[102,139112,1279],{"class":112},[102,139114,139115,139117,139119,139121],{"class":104,"line":1168},[102,139116,128150],{"class":161},[102,139118,51428],{"class":112},[102,139120,60860],{"class":161},[102,139122,1279],{"class":112},[102,139124,139125],{"class":104,"line":1183},[102,139126,1554],{"class":112},[19,139128,138413],{},[93,139130,139131],{"className":126534,"code":138376,"language":126536,"meta":23,"style":23},[99,139132,139133,139141,139151,139161],{"__ignoreMap":23},[102,139134,139135,139137,139139],{"class":104,"line":105},[102,139136,51602],{"class":51291},[102,139138,137535],{"class":1952},[102,139140,15562],{"class":112},[102,139142,139143,139145,139147,139149],{"class":104,"line":24},[102,139144,137542],{"class":161},[102,139146,51428],{"class":112},[102,139148,7642],{"class":217},[102,139150,1279],{"class":112},[102,139152,139153,139155,139157,139159],{"class":104,"line":1168},[102,139154,128150],{"class":161},[102,139156,51428],{"class":112},[102,139158,60860],{"class":161},[102,139160,1279],{"class":112},[102,139162,139163],{"class":104,"line":1183},[102,139164,1554],{"class":112},[19,139166,139167],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139169,139170,139171,139174],{},"2 号盒子左侧浮动，",[99,139172,139173],{},"navitems"," 导航栏组",[1120,139176,139177,139182,139191],{},[59,139178,139179,139180],{},"里面结构是 ",[99,139181,139045],{},[59,139183,139184,139185,139187,139188,139190],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[99,139186,351],{},"左右的",[99,139189,30874],{},"把两侧撑开",[59,139192,139193],{},"让文字垂直居中（行高等于高度）",[1451,139195],{"style":126390,"src":139196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139198,139199],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139201,138373],{},[93,139203,139205],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},".box {\n  float: left;\n}\n",[99,139206,139207,139213,139223],{"__ignoreMap":23},[102,139208,139209,139211],{"class":104,"line":105},[102,139210,130382],{"class":1952},[102,139212,15562],{"class":112},[102,139214,139215,139217,139219,139221],{"class":104,"line":24},[102,139216,131014],{"class":161},[102,139218,51428],{"class":112},[102,139220,23726],{"class":161},[102,139222,1279],{"class":112},[102,139224,139225],{"class":104,"line":1168},[102,139226,1554],{"class":112},[19,139228,138413],{},[93,139230,139231],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,139232,139233,139239,139249],{"__ignoreMap":23},[102,139234,139235,139237],{"class":104,"line":105},[102,139236,130382],{"class":1952},[102,139238,15562],{"class":112},[102,139240,139241,139243,139245,139247],{"class":104,"line":24},[102,139242,131014],{"class":161},[102,139244,51428],{"class":112},[102,139246,23726],{"class":161},[102,139248,1279],{"class":112},[102,139250,139251],{"class":104,"line":1168},[102,139252,1554],{"class":112},[19,139254,139255],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1451,139257],{"style":126390,"src":139258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[93,139260,139261],{"className":126534,"code":130691,"language":126536,"meta":23,"style":23},[99,139262,139263,139269,139285],{"__ignoreMap":23},[102,139264,139265,139267],{"class":104,"line":105},[102,139266,51602],{"class":51291},[102,139268,15562],{"class":112},[102,139270,139271,139273,139275,139277,139279,139281,139283],{"class":104,"line":24},[102,139272,70887],{"class":161},[102,139274,51428],{"class":112},[102,139276,330],{"class":161},[102,139278,51483],{"class":108},[102,139280,51512],{"class":161},[102,139282,129926],{"class":161},[102,139284,1279],{"class":112},[102,139286,139287],{"class":104,"line":1168},[102,139288,1554],{"class":112},[73,139290,139292],{"id":139291},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1451,139294],{"style":126390,"src":139295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1120,139297,139298,139303,139308],{},[59,139299,139300,139302],{},[99,139301,131737],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[59,139304,139305,139307],{},[99,139306,131737],{}," 里面有一个大的版心",[59,139309,139310,139311,139314,139315],{},"版心里面包含 1 号盒子，",[99,139312,139313],{},"mod_service"," 是服务模块，mod 是模块的意思",[1120,139316,139317,139322,139335,139351,139356],{},[59,139318,139034,139319,139321],{},[99,139320,139313],{}," 设置高度（80px）和下边框",[59,139323,139324,139325,139328,139329,139331,139332,139334],{},"在里面定义 ",[99,139326,139327],{},"ul > li"," ,每个",[99,139330,59],{}," 宽度是300px 高度是 50px，给每个",[99,139333,59],{},"设置35px的左内边距",[59,139336,139337,139338,139340,139341,139343,139344,139346,139347,18400,139349,120228],{},"在每个",[99,139339,59],{},"里面，放一个 ",[99,139342,22900],{},"（里面放图标），一个",[99,139345,51602],{},"（里面放",[99,139348,51602],{},[99,139350,19],{},[59,139352,139034,139353,139355],{},[99,139354,22900],{},"设置浮动，让h5与这个div左右排列",[59,139357,139358],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139360,138373],{},[93,139362,139364],{"className":126534,"code":139363,"language":126536,"meta":23,"style":23},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[99,139365,139366,139372,139384,139396,139423],{"__ignoreMap":23},[102,139367,139368,139370],{"class":104,"line":105},[102,139369,134291],{"class":1952},[102,139371,15562],{"class":112},[102,139373,139374,139376,139378,139380,139382],{"class":104,"line":24},[102,139375,70559],{"class":161},[102,139377,51428],{"class":112},[102,139379,813],{"class":161},[102,139381,51483],{"class":108},[102,139383,1279],{"class":112},[102,139385,139386,139388,139390,139392,139394],{"class":104,"line":1168},[102,139387,70779],{"class":161},[102,139389,51428],{"class":112},[102,139391,813],{"class":161},[102,139393,51483],{"class":108},[102,139395,1279],{"class":112},[102,139397,139398,139400,139402,139404,139406,139408,139410,139412,139415,139417,139419,139421],{"class":104,"line":1183},[102,139399,70602],{"class":161},[102,139401,51428],{"class":112},[102,139403,61717],{"class":161},[102,139405,113],{"class":112},[102,139407,134330],{"class":5206},[102,139409,13704],{"class":112},[102,139411,61727],{"class":161},[102,139413,139414],{"class":161}," -10",[102,139416,51483],{"class":108},[102,139418,134349],{"class":161},[102,139420,51483],{"class":108},[102,139422,1279],{"class":112},[102,139424,139425],{"class":104,"line":1189},[102,139426,1554],{"class":112},[19,139428,138413],{},[93,139430,139431],{"className":126534,"code":139363,"language":126536,"meta":23,"style":23},[99,139432,139433,139439,139451,139463,139489],{"__ignoreMap":23},[102,139434,139435,139437],{"class":104,"line":105},[102,139436,134291],{"class":1952},[102,139438,15562],{"class":112},[102,139440,139441,139443,139445,139447,139449],{"class":104,"line":24},[102,139442,70559],{"class":161},[102,139444,51428],{"class":112},[102,139446,813],{"class":161},[102,139448,51483],{"class":108},[102,139450,1279],{"class":112},[102,139452,139453,139455,139457,139459,139461],{"class":104,"line":1168},[102,139454,70779],{"class":161},[102,139456,51428],{"class":112},[102,139458,813],{"class":161},[102,139460,51483],{"class":108},[102,139462,1279],{"class":112},[102,139464,139465,139467,139469,139471,139473,139475,139477,139479,139481,139483,139485,139487],{"class":104,"line":1183},[102,139466,70602],{"class":161},[102,139468,51428],{"class":112},[102,139470,61717],{"class":161},[102,139472,113],{"class":112},[102,139474,134330],{"class":5206},[102,139476,13704],{"class":112},[102,139478,61727],{"class":161},[102,139480,139414],{"class":161},[102,139482,51483],{"class":108},[102,139484,134349],{"class":161},[102,139486,51483],{"class":108},[102,139488,1279],{"class":112},[102,139490,139491],{"class":104,"line":1189},[102,139492,1554],{"class":112},[19,139494,139495],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1120,139497,139498,139501,139507,139513,139525],{},[59,139499,139500],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[59,139502,139503,139504,120228],{},"里面的布局利用 自定义列表来实现（",[99,139505,139506],{},"dl > dt + dd",[59,139508,139034,139509,139512],{},[99,139510,139511],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[59,139514,139034,139515,139518,139519,18400,139521,139524],{},[99,139516,139517],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[99,139520,139517],{},[99,139522,139523],{},"dd","之间有些距离",[59,139526,139527],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139529,138373],{},[93,139531,139532],{"className":126534,"code":138723,"language":126536,"meta":23,"style":23},[99,139533,139534,139540,139552],{"__ignoreMap":23},[102,139535,139536,139538],{"class":104,"line":105},[102,139537,51602],{"class":51291},[102,139539,15562],{"class":112},[102,139541,139542,139544,139546,139548,139550],{"class":104,"line":24},[102,139543,70461],{"class":161},[102,139545,51428],{"class":112},[102,139547,304],{"class":161},[102,139549,51547],{"class":161},[102,139551,1279],{"class":112},[102,139553,139554],{"class":104,"line":1168},[102,139555,1554],{"class":112},[19,139557,138413],{},[93,139559,139560],{"className":126534,"code":138723,"language":126536,"meta":23,"style":23},[99,139561,139562,139568,139580],{"__ignoreMap":23},[102,139563,139564,139566],{"class":104,"line":105},[102,139565,51602],{"class":51291},[102,139567,15562],{"class":112},[102,139569,139570,139572,139574,139576,139578],{"class":104,"line":24},[102,139571,70461],{"class":161},[102,139573,51428],{"class":112},[102,139575,304],{"class":161},[102,139577,51547],{"class":161},[102,139579,1279],{"class":112},[102,139581,139582],{"class":104,"line":1168},[102,139583,1554],{"class":112},[19,139585,139586],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1120,139588,139589,139598,139601,139612],{},[59,139590,139591,139592,139594,139595,139597],{},"分为上下两块，上面是 ",[99,139593,131754],{}," 友情链接，下面是 ",[99,139596,131747],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[59,139599,139600],{},"把内容分别复制到相应模块中",[59,139602,139034,139603,139605,139606,139608,139609,139611],{},[99,139604,131754],{}," 设置 15px 的下外边距，给",[99,139607,131754],{}," 里面 的 ",[99,139610,351],{}," 标签设置 左右 3px 的外边距",[59,139613,139614,139615,139617],{},"给",[99,139616,131747],{}," 设置 20px 的行高",[19,139619,138373],{},[93,139621,139622],{"className":126534,"code":138723,"language":126536,"meta":23,"style":23},[99,139623,139624,139630,139642],{"__ignoreMap":23},[102,139625,139626,139628],{"class":104,"line":105},[102,139627,51602],{"class":51291},[102,139629,15562],{"class":112},[102,139631,139632,139634,139636,139638,139640],{"class":104,"line":24},[102,139633,70461],{"class":161},[102,139635,51428],{"class":112},[102,139637,304],{"class":161},[102,139639,51547],{"class":161},[102,139641,1279],{"class":112},[102,139643,139644],{"class":104,"line":1168},[102,139645,1554],{"class":112},[19,139647,138413],{},[93,139649,139650],{"className":126534,"code":138723,"language":126536,"meta":23,"style":23},[99,139651,139652,139658,139670],{"__ignoreMap":23},[102,139653,139654,139656],{"class":104,"line":105},[102,139655,51602],{"class":51291},[102,139657,15562],{"class":112},[102,139659,139660,139662,139664,139666,139668],{"class":104,"line":24},[102,139661,70461],{"class":161},[102,139663,51428],{"class":112},[102,139665,304],{"class":161},[102,139667,51547],{"class":161},[102,139669,1279],{"class":112},[102,139671,139672],{"class":104,"line":1168},[102,139673,1554],{"class":112},[19,139675,139676],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5116,139678,139679],{},"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":23,"searchDepth":24,"depth":24,"links":139681},[139682,139683,139684,139691],{"id":137962,"depth":24,"text":137963},{"id":137981,"depth":24,"text":137982},{"id":138008,"depth":24,"text":138009,"children":139685},[139686,139687,139688,139689,139690],{"id":138012,"depth":1168,"text":138013},{"id":138025,"depth":1168,"text":138026},{"id":138049,"depth":1168,"text":138050},{"id":138071,"depth":1168,"text":138072},{"id":138143,"depth":1168,"text":138144},{"id":138269,"depth":24,"text":138270,"children":139692},[139693,139694,139695,139696,139698],{"id":138273,"depth":1168,"text":138274},{"id":138280,"depth":1168,"text":138281},{"id":138452,"depth":1168,"text":138453},{"id":138993,"depth":1168,"text":139697},"15.4.4 nav导航模块制作",{"id":139291,"depth":1168,"text":139292},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137954,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139705,"title":139706,"body":139707,"description":27,"extension":28,"meta":142109,"navigation":30,"path":142110,"seo":142111,"stem":142112,"__hash__":142113},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139708,"toc":142086},[139709,139712,139716,139720,139732,139735,139738,139741,139752,139754,139778,139780,139804,139809,139812,139814,139850,139852,139888,139891,139896,139899,139902,139905,139935,139942,139945,139955,139957,139991,139994,140028,140034,140051,140053,140089,140091,140127,140132,140157,140159,140185,140187,140211,140218,140221,140285,140287,140329,140331,140371,140378,140383,140385,140415,140417,140447,140451,140454,140461,140473,140475,140501,140503,140527,140530,140532,140556,140562,140572,140574,140604,140606,140636,140643,140684,140686,140722,140724,140760,140764,140767,140770,140773,140779,140784,140787,140810,140813,140837,140840,140864,140869,140872,140875,140878,140881,140884,140958,140960,140990,140992,141022,141025,141028,141060,141064,141068,141082,141091,141094,141099,141101,141195,141197,141291,141314,141316,141340,141342,141366,141373,141376,141386,141388,141412,141417,141425,141427,141457,141462,141502,141504,141530,141532,141558,141562,141565,141570,141573,141577,141585,141592,141600,141602,141632,141634,141664,141672,141675,141678,141680,141710,141712,141742,141745,141750,141752,141776,141778,141802,141805,141890,141892,141916,141918,141942,141946,141948,141972,141974,142008,142012,142026,142029,142034,142037,142042,142045,142075,142083],[10,139710,139706],{"id":139711},"_16-品优购项目下篇-主体与页面开发",[14,139713,139715],{"id":139714},"_161-项目主体模块制作","16.1 项目主体模块制作",[73,139717,139719],{"id":139718},"_1611-首页制作","16.1.1 首页制作",[19,139721,139722,139724,139725,139727,139728,139731],{},[262,139723,102049],{}," 主体模块是 ",[262,139726,74049],{}," 里面专有的，注意需要新的样式文件 ",[262,139729,139730],{},"index.css，"," 就不要写在common.css中了",[1451,139733],{"style":126390,"src":139734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1451,139736],{"style":126390,"src":139737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139739,139740],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1120,139742,139743,139746,139749],{},[59,139744,139745],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[59,139747,139748],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[59,139750,139751],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139753,138373],{},[93,139755,139756],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,139757,139758,139764,139774],{"__ignoreMap":23},[102,139759,139760,139762],{"class":104,"line":105},[102,139761,130382],{"class":1952},[102,139763,15562],{"class":112},[102,139765,139766,139768,139770,139772],{"class":104,"line":24},[102,139767,131014],{"class":161},[102,139769,51428],{"class":112},[102,139771,23726],{"class":161},[102,139773,1279],{"class":112},[102,139775,139776],{"class":104,"line":1168},[102,139777,1554],{"class":112},[19,139779,138413],{},[93,139781,139782],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,139783,139784,139790,139800],{"__ignoreMap":23},[102,139785,139786,139788],{"class":104,"line":105},[102,139787,130382],{"class":1952},[102,139789,15562],{"class":112},[102,139791,139792,139794,139796,139798],{"class":104,"line":24},[102,139793,131014],{"class":161},[102,139795,51428],{"class":112},[102,139797,23726],{"class":161},[102,139799,1279],{"class":112},[102,139801,139802],{"class":104,"line":1168},[102,139803,1554],{"class":112},[56,139805,139806],{},[59,139807,139808],{},"左侧focus模块制作",[1451,139810],{"style":126390,"src":139811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,139813,138373],{},[93,139815,139816],{"className":126534,"code":127857,"language":126536,"meta":23,"style":23},[99,139817,139818,139826,139836,139846],{"__ignoreMap":23},[102,139819,139820,139822,139824],{"class":104,"line":105},[102,139821,53812],{"class":51291},[102,139823,61891],{"class":1952},[102,139825,15562],{"class":112},[102,139827,139828,139830,139832,139834],{"class":104,"line":24},[102,139829,127872],{"class":161},[102,139831,51428],{"class":112},[102,139833,54880],{"class":161},[102,139835,1279],{"class":112},[102,139837,139838,139840,139842,139844],{"class":104,"line":1168},[102,139839,70789],{"class":161},[102,139841,51428],{"class":112},[102,139843,54728],{"class":161},[102,139845,1279],{"class":112},[102,139847,139848],{"class":104,"line":1183},[102,139849,1554],{"class":112},[19,139851,138413],{},[93,139853,139854],{"className":126534,"code":127857,"language":126536,"meta":23,"style":23},[99,139855,139856,139864,139874,139884],{"__ignoreMap":23},[102,139857,139858,139860,139862],{"class":104,"line":105},[102,139859,53812],{"class":51291},[102,139861,61891],{"class":1952},[102,139863,15562],{"class":112},[102,139865,139866,139868,139870,139872],{"class":104,"line":24},[102,139867,127872],{"class":161},[102,139869,51428],{"class":112},[102,139871,54880],{"class":161},[102,139873,1279],{"class":112},[102,139875,139876,139878,139880,139882],{"class":104,"line":1168},[102,139877,70789],{"class":161},[102,139879,51428],{"class":112},[102,139881,54728],{"class":161},[102,139883,1279],{"class":112},[102,139885,139886],{"class":104,"line":1183},[102,139887,1554],{"class":112},[19,139889,139890],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[56,139892,139893],{"start":24},[59,139894,139895],{},"右侧newsflash模块制作",[1451,139897],{"style":126390,"src":139898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,139900,139901],{},"右侧的模块 分为上中下三个盒子",[19,139903,139904],{},"结构代码：",[93,139906,139907],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,139908,139909],{"__ignoreMap":23},[102,139910,139911,139913,139915,139917,139919,139921,139923,139925,139927,139929,139931,139933],{"class":104,"line":105},[102,139912,1023],{"class":112},[102,139914,1451],{"class":51291},[102,139916,55230],{"class":1952},[102,139918,158],{"class":112},[102,139920,134051],{"class":217},[102,139922,55238],{"class":1952},[102,139924,158],{"class":112},[102,139926,134058],{"class":217},[102,139928,134061],{"class":1952},[102,139930,158],{"class":112},[102,139932,134066],{"class":217},[102,139934,51298],{"class":112},[19,139936,139937,139938,139941],{},"1 号盒子为 ",[99,139939,139940],{},"news"," 新闻模块 高度为 165px",[1451,139943],{"style":126390,"src":139944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,139946,139947,139948,139951,139952],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[99,139949,139950],{},"news-hd","，下面是 ",[99,139953,139954],{},"news-bd",[19,139956,139904],{},[93,139958,139959],{"className":127281,"code":130638,"language":127283,"meta":23,"style":23},[99,139960,139961,139965,139979,139983],{"__ignoreMap":23},[102,139962,139963],{"class":104,"line":105},[102,139964,130645],{"class":171},[102,139966,139967,139969,139971,139973,139975,139977],{"class":104,"line":24},[102,139968,1023],{"class":112},[102,139970,51602],{"class":51291},[102,139972,53477],{"class":1952},[102,139974,158],{"class":112},[102,139976,130658],{"class":217},[102,139978,51298],{"class":112},[102,139980,139981],{"class":104,"line":1168},[102,139982,130665],{"class":112},[102,139984,139985,139987,139989],{"class":104,"line":1183},[102,139986,51776],{"class":112},[102,139988,51602],{"class":51291},[102,139990,51298],{"class":112},[19,139992,139993],{},"样式代码：",[93,139995,139996],{"className":127281,"code":130638,"language":127283,"meta":23,"style":23},[99,139997,139998,140002,140016,140020],{"__ignoreMap":23},[102,139999,140000],{"class":104,"line":105},[102,140001,130645],{"class":171},[102,140003,140004,140006,140008,140010,140012,140014],{"class":104,"line":24},[102,140005,1023],{"class":112},[102,140007,51602],{"class":51291},[102,140009,53477],{"class":1952},[102,140011,158],{"class":112},[102,140013,130658],{"class":217},[102,140015,51298],{"class":112},[102,140017,140018],{"class":104,"line":1168},[102,140019,130665],{"class":112},[102,140021,140022,140024,140026],{"class":104,"line":1183},[102,140023,51776],{"class":112},[102,140025,51602],{"class":51291},[102,140027,51298],{"class":112},[19,140029,140030,140031,140033],{},"上面是",[99,140032,139950],{},"，设置高度是 33px，设置下边框",[1120,140035,140036,140042],{},[59,140037,140038,140039,140041],{},"里面放一个",[99,140040,22900],{}," 标题",[59,140043,140044,140045,140047,140048,140050],{},"放一个a",[99,140046,102684],{},"，内容是 更多，然后让 ",[99,140049,351],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140052,139904],{},[93,140054,140055],{"className":126534,"code":138376,"language":126536,"meta":23,"style":23},[99,140056,140057,140065,140075,140085],{"__ignoreMap":23},[102,140058,140059,140061,140063],{"class":104,"line":105},[102,140060,51602],{"class":51291},[102,140062,137535],{"class":1952},[102,140064,15562],{"class":112},[102,140066,140067,140069,140071,140073],{"class":104,"line":24},[102,140068,137542],{"class":161},[102,140070,51428],{"class":112},[102,140072,7642],{"class":217},[102,140074,1279],{"class":112},[102,140076,140077,140079,140081,140083],{"class":104,"line":1168},[102,140078,128150],{"class":161},[102,140080,51428],{"class":112},[102,140082,60860],{"class":161},[102,140084,1279],{"class":112},[102,140086,140087],{"class":104,"line":1183},[102,140088,1554],{"class":112},[19,140090,139993],{},[93,140092,140093],{"className":126534,"code":138376,"language":126536,"meta":23,"style":23},[99,140094,140095,140103,140113,140123],{"__ignoreMap":23},[102,140096,140097,140099,140101],{"class":104,"line":105},[102,140098,51602],{"class":51291},[102,140100,137535],{"class":1952},[102,140102,15562],{"class":112},[102,140104,140105,140107,140109,140111],{"class":104,"line":24},[102,140106,137542],{"class":161},[102,140108,51428],{"class":112},[102,140110,7642],{"class":217},[102,140112,1279],{"class":112},[102,140114,140115,140117,140119,140121],{"class":104,"line":1168},[102,140116,128150],{"class":161},[102,140118,51428],{"class":112},[102,140120,60860],{"class":161},[102,140122,1279],{"class":112},[102,140124,140125],{"class":104,"line":1183},[102,140126,1554],{"class":112},[19,140128,140129,140130],{},"下面是",[99,140131,139954],{},[1120,140133,140134,140142],{},[59,140135,140136,140137,101009,140139,140141],{},"里面包含 ",[99,140138,1120],{},[99,140140,59],{}," 还有链接",[59,140143,139614,140144,140146,140147,140149,140150,140153,140154],{},[99,140145,59],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[99,140148,131200],{}," 2.设置 ",[99,140151,140152],{},"white-space: nowrap;"," 3. 设置 ",[99,140155,140156],{},"text-overflow: ellipsis;",[19,140158,139904],{},[93,140160,140162],{"className":126534,"code":140161,"language":126536,"meta":23,"style":23},"div {\n  overflow: hidden;\n}\n",[99,140163,140164,140170,140181],{"__ignoreMap":23},[102,140165,140166,140168],{"class":104,"line":105},[102,140167,51602],{"class":51291},[102,140169,15562],{"class":112},[102,140171,140172,140175,140177,140179],{"class":104,"line":24},[102,140173,140174],{"class":161},"  overflow",[102,140176,51428],{"class":112},[102,140178,61705],{"class":161},[102,140180,1279],{"class":112},[102,140182,140183],{"class":104,"line":1168},[102,140184,1554],{"class":112},[19,140186,139993],{},[93,140188,140189],{"className":126534,"code":140161,"language":126536,"meta":23,"style":23},[99,140190,140191,140197,140207],{"__ignoreMap":23},[102,140192,140193,140195],{"class":104,"line":105},[102,140194,51602],{"class":51291},[102,140196,15562],{"class":112},[102,140198,140199,140201,140203,140205],{"class":104,"line":24},[102,140200,140174],{"class":161},[102,140202,51428],{"class":112},[102,140204,61705],{"class":161},[102,140206,1279],{"class":112},[102,140208,140209],{"class":104,"line":1168},[102,140210,1554],{"class":112},[19,140212,140213,140214,140217],{},"2 号盒子为 ",[99,140215,140216],{},"lifeservice"," 生活服务模块 高度为 209px",[1451,140219],{"style":126390,"src":140220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1120,140222,140223,140226,140236,140260,140271],{},[59,140224,140225],{},"设置边框（左右下边框）",[59,140227,140228,140229,140232,140233,140235],{},"里面的内容 是 ",[99,140230,140231],{},"ul > 12*li","，给",[99,140234,59],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[59,140237,140238,140239],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1120,140240,140241,140246,140255],{},[59,140242,140243,140245],{},[99,140244,140216],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[59,140247,140248,140249,140251,140252,140254],{},"可以让 ",[99,140250,140216],{}," 里面的 ",[99,140253,1120],{}," 宽度为 252，就可以装的下 4 个 小 li",[59,140256,140257,140259],{},[99,140258,140216],{}," 盒子 overflow 隐藏多余的部分就可以了",[59,140261,116458,140262,140264,140265,140267,140268,140270],{},[99,140263,59],{}," 里面放一个 ",[99,140266,554],{},"（里面放图标），下面的文本用 ",[99,140269,19],{}," 标签包裹",[59,140272,139034,140273,140275,140276,140278,140279,139068,140281,140284],{},[99,140274,554],{}," 设置 24px宽和28px的高（注意 ",[99,140277,554],{}," 是行内元素， 转成行内块），给 ",[99,140280,59],{},[99,140282,140283],{},"text-align:center"," 让里面内容居中显示",[19,140286,139904],{},[93,140288,140290],{"className":126534,"code":140289,"language":126536,"meta":23,"style":23},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[99,140291,140292,140310,140315,140325],{"__ignoreMap":23},[102,140293,140294,140296,140298,140300,140302,140304,140306,140308],{"class":104,"line":105},[102,140295,102],{"class":51291},[102,140297,12425],{"class":112},[102,140299,351],{"class":51291},[102,140301,12425],{"class":112},[102,140303,23543],{"class":51291},[102,140305,12425],{"class":112},[102,140307,262],{"class":51291},[102,140309,15562],{"class":112},[102,140311,140312],{"class":104,"line":24},[102,140313,140314],{"class":171},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[102,140316,140317,140319,140321,140323],{"class":104,"line":1168},[102,140318,128150],{"class":161},[102,140320,51428],{"class":112},[102,140322,128212],{"class":161},[102,140324,1279],{"class":112},[102,140326,140327],{"class":104,"line":1183},[102,140328,1554],{"class":112},[19,140330,139993],{},[93,140332,140333],{"className":126534,"code":140289,"language":126536,"meta":23,"style":23},[99,140334,140335,140353,140357,140367],{"__ignoreMap":23},[102,140336,140337,140339,140341,140343,140345,140347,140349,140351],{"class":104,"line":105},[102,140338,102],{"class":51291},[102,140340,12425],{"class":112},[102,140342,351],{"class":51291},[102,140344,12425],{"class":112},[102,140346,23543],{"class":51291},[102,140348,12425],{"class":112},[102,140350,262],{"class":51291},[102,140352,15562],{"class":112},[102,140354,140355],{"class":104,"line":24},[102,140356,140314],{"class":171},[102,140358,140359,140361,140363,140365],{"class":104,"line":1168},[102,140360,128150],{"class":161},[102,140362,51428],{"class":112},[102,140364,128212],{"class":161},[102,140366,1279],{"class":112},[102,140368,140369],{"class":104,"line":1183},[102,140370,1554],{"class":112},[19,140372,140373,140374,140377],{},"3 号盒子为 ",[99,140375,140376],{},"bargain"," 特价商品",[1120,140379,140380],{},[59,140381,140382],{},"这个比较简单，直接插入一张图片即可",[19,140384,139904],{},[93,140386,140387],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,140388,140389],{"__ignoreMap":23},[102,140390,140391,140393,140395,140397,140399,140401,140403,140405,140407,140409,140411,140413],{"class":104,"line":105},[102,140392,1023],{"class":112},[102,140394,1451],{"class":51291},[102,140396,55230],{"class":1952},[102,140398,158],{"class":112},[102,140400,134051],{"class":217},[102,140402,55238],{"class":1952},[102,140404,158],{"class":112},[102,140406,134058],{"class":217},[102,140408,134061],{"class":1952},[102,140410,158],{"class":112},[102,140412,134066],{"class":217},[102,140414,51298],{"class":112},[19,140416,139993],{},[93,140418,140419],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,140420,140421],{"__ignoreMap":23},[102,140422,140423,140425,140427,140429,140431,140433,140435,140437,140439,140441,140443,140445],{"class":104,"line":105},[102,140424,1023],{"class":112},[102,140426,1451],{"class":51291},[102,140428,55230],{"class":1952},[102,140430,158],{"class":112},[102,140432,134051],{"class":217},[102,140434,55238],{"class":1952},[102,140436,158],{"class":112},[102,140438,134058],{"class":217},[102,140440,134061],{"class":1952},[102,140442,158],{"class":112},[102,140444,134066],{"class":217},[102,140446,51298],{"class":112},[73,140448,140450],{"id":140449},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1451,140452],{"style":126390,"src":140453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140455,140456,140457,140460],{},"大盒子 ",[99,140458,140459],{},"recom"," 推荐模块 recommend",[1120,140462,140463],{},[59,140464,140465,140466,140468,140469,140472],{},"给这个 ",[99,140467,140459],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[99,140470,140471],{},"#ebebeb","），设置距离上边 12px",[19,140474,139904],{},[93,140476,140478],{"className":126534,"code":140477,"language":126536,"meta":23,"style":23},"div {\n  background-color: #f0f0f0;\n}\n",[99,140479,140480,140486,140497],{"__ignoreMap":23},[102,140481,140482,140484],{"class":104,"line":105},[102,140483,51602],{"class":51291},[102,140485,15562],{"class":112},[102,140487,140488,140490,140492,140495],{"class":104,"line":24},[102,140489,70869],{"class":161},[102,140491,51428],{"class":112},[102,140493,140494],{"class":161},"#f0f0f0",[102,140496,1279],{"class":112},[102,140498,140499],{"class":104,"line":1168},[102,140500,1554],{"class":112},[19,140502,139993],{},[93,140504,140505],{"className":126534,"code":140477,"language":126536,"meta":23,"style":23},[99,140506,140507,140513,140523],{"__ignoreMap":23},[102,140508,140509,140511],{"class":104,"line":105},[102,140510,51602],{"class":51291},[102,140512,15562],{"class":112},[102,140514,140515,140517,140519,140521],{"class":104,"line":24},[102,140516,70869],{"class":161},[102,140518,51428],{"class":112},[102,140520,140494],{"class":161},[102,140522,1279],{"class":112},[102,140524,140525],{"class":104,"line":1168},[102,140526,1554],{"class":112},[19,140528,140529],{},"里面包含 2 个盒子， 浮动即可",[19,140531,139904],{},[93,140533,140534],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,140535,140536,140542,140552],{"__ignoreMap":23},[102,140537,140538,140540],{"class":104,"line":105},[102,140539,130382],{"class":1952},[102,140541,15562],{"class":112},[102,140543,140544,140546,140548,140550],{"class":104,"line":24},[102,140545,131014],{"class":161},[102,140547,51428],{"class":112},[102,140549,23726],{"class":161},[102,140551,1279],{"class":112},[102,140553,140554],{"class":104,"line":1168},[102,140555,1554],{"class":112},[19,140557,140558,140559],{},"1 号盒子 ",[99,140560,140561],{},"recom_hd",[1120,140563,140564,140567],{},[59,140565,140566],{},"设置宽度205px，高度163px",[59,140568,140038,140569,140571],{},[99,140570,1451],{},"标签，插入图片即可",[19,140573,139904],{},[93,140575,140576],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,140577,140578],{"__ignoreMap":23},[102,140579,140580,140582,140584,140586,140588,140590,140592,140594,140596,140598,140600,140602],{"class":104,"line":105},[102,140581,1023],{"class":112},[102,140583,1451],{"class":51291},[102,140585,55230],{"class":1952},[102,140587,158],{"class":112},[102,140589,134051],{"class":217},[102,140591,55238],{"class":1952},[102,140593,158],{"class":112},[102,140595,134058],{"class":217},[102,140597,134061],{"class":1952},[102,140599,158],{"class":112},[102,140601,134066],{"class":217},[102,140603,51298],{"class":112},[19,140605,139993],{},[93,140607,140608],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,140609,140610],{"__ignoreMap":23},[102,140611,140612,140614,140616,140618,140620,140622,140624,140626,140628,140630,140632,140634],{"class":104,"line":105},[102,140613,1023],{"class":112},[102,140615,1451],{"class":51291},[102,140617,55230],{"class":1952},[102,140619,158],{"class":112},[102,140621,134051],{"class":217},[102,140623,55238],{"class":1952},[102,140625,158],{"class":112},[102,140627,134058],{"class":217},[102,140629,134061],{"class":1952},[102,140631,158],{"class":112},[102,140633,134066],{"class":217},[102,140635,51298],{"class":112},[19,140637,140638,140639,140642],{},"2 号盒子 ",[99,140640,140641],{},"recom_bd"," ，注意里面的小竖线",[1120,140644,140645,140656,140659,140664,140669],{},[59,140646,140647,140648,140650,140651,140653,140654],{},"右侧结构里面放 ",[99,140649,1120],{}," 包含 4个 ",[99,140652,59],{},"，每个li里面包含一个",[99,140655,1451],{},[59,140657,140658],{},"直接利用切片工具把里面的内容当成一张图片",[59,140660,139034,140661,140663],{},[99,140662,59],{}," 设置浮动",[59,140665,139034,140666,140668],{},[99,140667,1451],{}," 设置宽高，宽度 248px，高度 163px",[59,140670,140671,140672,140232,140675,140677,140678,140680,140681],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[99,140673,140674],{},"top 10px",[99,140676,59],{},"设置相对定位（注意，最后一个",[99,140679,59],{},"不用设置伪元素），可以利用 ",[99,140682,140683],{},"nth-child(-n+3){...}",[19,140685,139904],{},[93,140687,140688],{"className":126534,"code":138376,"language":126536,"meta":23,"style":23},[99,140689,140690,140698,140708,140718],{"__ignoreMap":23},[102,140691,140692,140694,140696],{"class":104,"line":105},[102,140693,51602],{"class":51291},[102,140695,137535],{"class":1952},[102,140697,15562],{"class":112},[102,140699,140700,140702,140704,140706],{"class":104,"line":24},[102,140701,137542],{"class":161},[102,140703,51428],{"class":112},[102,140705,7642],{"class":217},[102,140707,1279],{"class":112},[102,140709,140710,140712,140714,140716],{"class":104,"line":1168},[102,140711,128150],{"class":161},[102,140713,51428],{"class":112},[102,140715,60860],{"class":161},[102,140717,1279],{"class":112},[102,140719,140720],{"class":104,"line":1183},[102,140721,1554],{"class":112},[19,140723,139993],{},[93,140725,140726],{"className":126534,"code":138376,"language":126536,"meta":23,"style":23},[99,140727,140728,140736,140746,140756],{"__ignoreMap":23},[102,140729,140730,140732,140734],{"class":104,"line":105},[102,140731,51602],{"class":51291},[102,140733,137535],{"class":1952},[102,140735,15562],{"class":112},[102,140737,140738,140740,140742,140744],{"class":104,"line":24},[102,140739,137542],{"class":161},[102,140741,51428],{"class":112},[102,140743,7642],{"class":217},[102,140745,1279],{"class":112},[102,140747,140748,140750,140752,140754],{"class":104,"line":1168},[102,140749,128150],{"class":161},[102,140751,51428],{"class":112},[102,140753,60860],{"class":161},[102,140755,1279],{"class":112},[102,140757,140758],{"class":104,"line":1183},[102,140759,1554],{"class":112},[73,140761,140763],{"id":140762},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1451,140765],{"style":126390,"src":140766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140768,140769],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140771,140772],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140774,140775,140778],{},[99,140776,140777],{},"box_hd"," 制作",[19,140780,140558,140781,140783],{},[99,140782,140777],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1451,140785],{"style":126390,"src":140786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1120,140788,140789,140794,140799,140802],{},[59,140790,140791,140793],{},[99,140792,140777],{}," 给 30px 的高度，2个像素的下边框",[59,140795,140796,140797],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[99,140798,139045],{},[59,140800,140801],{},"左侧盒左浮动，右侧盒子右浮动",[59,140803,140804,140806,140807,140809],{},[99,140805,351],{},"标签之间的距离用左右的",[99,140808,30874],{},"撑开即可",[19,140811,140812],{},"结构代码",[93,140814,140815],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,140816,140817,140823,140833],{"__ignoreMap":23},[102,140818,140819,140821],{"class":104,"line":105},[102,140820,130382],{"class":1952},[102,140822,15562],{"class":112},[102,140824,140825,140827,140829,140831],{"class":104,"line":24},[102,140826,131014],{"class":161},[102,140828,51428],{"class":112},[102,140830,23726],{"class":161},[102,140832,1279],{"class":112},[102,140834,140835],{"class":104,"line":1168},[102,140836,1554],{"class":112},[19,140838,140839],{},"样式代码",[93,140841,140842],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,140843,140844,140850,140860],{"__ignoreMap":23},[102,140845,140846,140848],{"class":104,"line":105},[102,140847,130382],{"class":1952},[102,140849,15562],{"class":112},[102,140851,140852,140854,140856,140858],{"class":104,"line":24},[102,140853,131014],{"class":161},[102,140855,51428],{"class":112},[102,140857,23726],{"class":161},[102,140859,1279],{"class":112},[102,140861,140862],{"class":104,"line":1168},[102,140863,1554],{"class":112},[19,140865,140866,140778],{},[99,140867,140868],{},"box_bd",[19,140870,140871],{},"2 号盒子 box_bd，不要给高度",[1451,140873],{"style":126390,"src":140874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,140876,140877],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,140879,140880],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,140882,140883],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1120,140885,140886,140898,140914],{},[59,140887,140888,140890,140891,140894,140895,140897],{},[99,140889,140868],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[99,140892,140893],{},"tab_content","，在",[99,140896,140893],{}," 里面包裹tab选项卡对应的内容",[59,140899,140900,140901,140904,140905,140907,140908,140910,140911,140913],{},"内容被一个大盒子包裹（",[99,140902,140903],{},"tab_list_item","），里面是 ",[99,140906,1120],{}," 包裹 5个 ",[99,140909,59],{},"，每个",[99,140912,59],{},"设置对应的宽度，然后设置浮动",[59,140915,140916,140917,140919,140920,140922,140923],{},"而这5个",[99,140918,59],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[99,140921,59],{},"设置",[1120,140924,140925,140943,140946],{},[59,140926,140927,140928,140930,140931,140933,140934,140936,140937,140939,140940,140942],{},"第一个小 ",[99,140929,59],{}," 分为上下结构，上面是 ",[99,140932,1120],{}," 包裹 ",[99,140935,59],{}," ，",[99,140938,59],{},"里面包裹 ",[99,140941,351],{},"，下面插入一张图片",[59,140944,140945],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[59,140947,140948,140949,140951,140952,140954,140955,140957],{},"后面的小 ",[99,140950,59],{}," 里面先放一个",[99,140953,351],{},"标签，然后在",[99,140956,351],{},"标签里面插入图片即可",[19,140959,140812],{},[93,140961,140962],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,140963,140964],{"__ignoreMap":23},[102,140965,140966,140968,140970,140972,140974,140976,140978,140980,140982,140984,140986,140988],{"class":104,"line":105},[102,140967,1023],{"class":112},[102,140969,1451],{"class":51291},[102,140971,55230],{"class":1952},[102,140973,158],{"class":112},[102,140975,134051],{"class":217},[102,140977,55238],{"class":1952},[102,140979,158],{"class":112},[102,140981,134058],{"class":217},[102,140983,134061],{"class":1952},[102,140985,158],{"class":112},[102,140987,134066],{"class":217},[102,140989,51298],{"class":112},[19,140991,140839],{},[93,140993,140994],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,140995,140996],{"__ignoreMap":23},[102,140997,140998,141000,141002,141004,141006,141008,141010,141012,141014,141016,141018,141020],{"class":104,"line":105},[102,140999,1023],{"class":112},[102,141001,1451],{"class":51291},[102,141003,55230],{"class":1952},[102,141005,158],{"class":112},[102,141007,134051],{"class":217},[102,141009,55238],{"class":1952},[102,141011,158],{"class":112},[102,141013,134058],{"class":217},[102,141015,134061],{"class":1952},[102,141017,158],{"class":112},[102,141019,134066],{"class":217},[102,141021,51298],{"class":112},[19,141023,141024],{},"tab栏切换需求！！！！！！介绍：",[1451,141026],{"style":126390,"src":141027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1120,141029,141030,141038,141044,141047],{},[59,141031,141032,141035,141036],{},[99,141033,141034],{},"tab","栏的布局是 ",[99,141037,139045],{},[59,141039,141040,141041,141043],{},"有多少个",[99,141042,141034],{},"选项卡，那么对应就有多少个内容",[59,141045,141046],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[59,141048,141049,141050,141053,141054,141056,141057,141059],{},"等后面我们学习了",[99,141051,141052],{},"js","之后，我们就会配合",[99,141055,141052],{},"来实现，",[99,141058,141034],{},"栏的切换",[14,141061,141063],{"id":141062},"_162-列表制作","16.2 列表制作",[73,141065,141067],{"id":141066},"_1621-准备工作","16.2.1 准备工作",[1120,141069,141070,141073,141076,141079],{},[59,141071,141072],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[59,141074,141075],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[59,141077,141078],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[59,141080,141081],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[73,141083,141085,141086,101009,141088,141090],{"id":141084},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[99,141087,131539],{},[99,141089,53704],{}," 修改",[1451,141092],{"style":126390,"src":141093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1120,141095,141096],{},[59,141097,141098],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141100,139904],{},[93,141102,141103],{"className":126534,"code":131966,"language":126536,"meta":23,"style":23},[99,141104,141105,141109,141123,141127,141141,141145,141159,141163,141177,141181],{"__ignoreMap":23},[102,141106,141107],{"class":104,"line":105},[102,141108,131973],{"class":171},[102,141110,141111,141113,141115,141117,141119,141121],{"class":104,"line":24},[102,141112,131978],{"class":1952},[102,141114,79798],{"class":112},[102,141116,128894],{"class":161},[102,141118,51428],{"class":112},[102,141120,131987],{"class":161},[102,141122,129464],{"class":112},[102,141124,141125],{"class":104,"line":1168},[102,141126,131994],{"class":171},[102,141128,141129,141131,141133,141135,141137,141139],{"class":104,"line":1183},[102,141130,131999],{"class":1952},[102,141132,79798],{"class":112},[102,141134,128894],{"class":161},[102,141136,51428],{"class":112},[102,141138,54755],{"class":161},[102,141140,129464],{"class":112},[102,141142,141143],{"class":104,"line":1189},[102,141144,132014],{"class":171},[102,141146,141147,141149,141151,141153,141155,141157],{"class":104,"line":1203},[102,141148,132019],{"class":1952},[102,141150,79798],{"class":112},[102,141152,128894],{"class":161},[102,141154,51428],{"class":112},[102,141156,54822],{"class":161},[102,141158,129464],{"class":112},[102,141160,141161],{"class":104,"line":1209},[102,141162,132034],{"class":171},[102,141164,141165,141167,141169,141171,141173,141175],{"class":104,"line":1300},[102,141166,132039],{"class":1952},[102,141168,79798],{"class":112},[102,141170,128894],{"class":161},[102,141172,51428],{"class":112},[102,141174,86224],{"class":161},[102,141176,129464],{"class":112},[102,141178,141179],{"class":104,"line":1306},[102,141180,132054],{"class":171},[102,141182,141183,141185,141187,141189,141191,141193],{"class":104,"line":1318},[102,141184,132059],{"class":1952},[102,141186,79798],{"class":112},[102,141188,128894],{"class":161},[102,141190,51428],{"class":112},[102,141192,132068],{"class":161},[102,141194,129464],{"class":112},[19,141196,139993],{},[93,141198,141199],{"className":126534,"code":131966,"language":126536,"meta":23,"style":23},[99,141200,141201,141205,141219,141223,141237,141241,141255,141259,141273,141277],{"__ignoreMap":23},[102,141202,141203],{"class":104,"line":105},[102,141204,131973],{"class":171},[102,141206,141207,141209,141211,141213,141215,141217],{"class":104,"line":24},[102,141208,131978],{"class":1952},[102,141210,79798],{"class":112},[102,141212,128894],{"class":161},[102,141214,51428],{"class":112},[102,141216,131987],{"class":161},[102,141218,129464],{"class":112},[102,141220,141221],{"class":104,"line":1168},[102,141222,131994],{"class":171},[102,141224,141225,141227,141229,141231,141233,141235],{"class":104,"line":1183},[102,141226,131999],{"class":1952},[102,141228,79798],{"class":112},[102,141230,128894],{"class":161},[102,141232,51428],{"class":112},[102,141234,54755],{"class":161},[102,141236,129464],{"class":112},[102,141238,141239],{"class":104,"line":1189},[102,141240,132014],{"class":171},[102,141242,141243,141245,141247,141249,141251,141253],{"class":104,"line":1203},[102,141244,132019],{"class":1952},[102,141246,79798],{"class":112},[102,141248,128894],{"class":161},[102,141250,51428],{"class":112},[102,141252,54822],{"class":161},[102,141254,129464],{"class":112},[102,141256,141257],{"class":104,"line":1209},[102,141258,132034],{"class":171},[102,141260,141261,141263,141265,141267,141269,141271],{"class":104,"line":1300},[102,141262,132039],{"class":1952},[102,141264,79798],{"class":112},[102,141266,128894],{"class":161},[102,141268,51428],{"class":112},[102,141270,86224],{"class":161},[102,141272,129464],{"class":112},[102,141274,141275],{"class":104,"line":1306},[102,141276,132054],{"class":171},[102,141278,141279,141281,141283,141285,141287,141289],{"class":104,"line":1318},[102,141280,132059],{"class":1952},[102,141282,79798],{"class":112},[102,141284,128894],{"class":161},[102,141286,51428],{"class":112},[102,141288,132068],{"class":161},[102,141290,129464],{"class":112},[1120,141292,141293,141304],{},[59,141294,141295,141296,141299,141300,101009,141302],{},"1 号盒子左侧浮动 ",[99,141297,141298],{},"sk_list"," 里面包含 ",[99,141301,1120],{},[99,141303,59],{},[59,141305,141306,141307,141299,141310,101009,141312],{},"2 号盒子左侧浮动 ",[99,141308,141309],{},"sk_con",[99,141311,1120],{},[99,141313,59],{},[19,141315,139904],{},[93,141317,141318],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,141319,141320,141326,141336],{"__ignoreMap":23},[102,141321,141322,141324],{"class":104,"line":105},[102,141323,130382],{"class":1952},[102,141325,15562],{"class":112},[102,141327,141328,141330,141332,141334],{"class":104,"line":24},[102,141329,131014],{"class":161},[102,141331,51428],{"class":112},[102,141333,23726],{"class":161},[102,141335,1279],{"class":112},[102,141337,141338],{"class":104,"line":1168},[102,141339,1554],{"class":112},[19,141341,139993],{},[93,141343,141344],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,141345,141346,141352,141362],{"__ignoreMap":23},[102,141347,141348,141350],{"class":104,"line":105},[102,141349,130382],{"class":1952},[102,141351,15562],{"class":112},[102,141353,141354,141356,141358,141360],{"class":104,"line":24},[102,141355,131014],{"class":161},[102,141357,51428],{"class":112},[102,141359,23726],{"class":161},[102,141361,1279],{"class":112},[102,141363,141364],{"class":104,"line":1168},[102,141365,1554],{"class":112},[73,141367,141369,141370],{"id":141368},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[99,141371,141372],{},"sk_container",[1451,141374],{"style":126390,"src":141375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1120,141377,141378,141383],{},[59,141379,140558,141380,141382],{},[99,141381,141372],{}," 给宽度 1200，不要给高度",[59,141384,141385],{},"一定不要忘记清除浮动",[19,141387,139904],{},[93,141389,141390],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,141391,141392,141398,141408],{"__ignoreMap":23},[102,141393,141394,141396],{"class":104,"line":105},[102,141395,130382],{"class":1952},[102,141397,15562],{"class":112},[102,141399,141400,141402,141404,141406],{"class":104,"line":24},[102,141401,131014],{"class":161},[102,141403,51428],{"class":112},[102,141405,23726],{"class":161},[102,141407,1279],{"class":112},[102,141409,141410],{"class":104,"line":1168},[102,141411,1554],{"class":112},[56,141413,141414],{},[59,141415,141416],{},"sk_hd制作",[1120,141418,141419],{},[59,141420,140638,141421,141424],{},[99,141422,141423],{},"sk_hd"," ，插入图片即可",[19,141426,139904],{},[93,141428,141429],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,141430,141431],{"__ignoreMap":23},[102,141432,141433,141435,141437,141439,141441,141443,141445,141447,141449,141451,141453,141455],{"class":104,"line":105},[102,141434,1023],{"class":112},[102,141436,1451],{"class":51291},[102,141438,55230],{"class":1952},[102,141440,158],{"class":112},[102,141442,134051],{"class":217},[102,141444,55238],{"class":1952},[102,141446,158],{"class":112},[102,141448,134058],{"class":217},[102,141450,134061],{"class":1952},[102,141452,158],{"class":112},[102,141454,134066],{"class":217},[102,141456,51298],{"class":112},[56,141458,141459],{"start":24},[59,141460,141461],{},"sk_bd制作",[1120,141463,141464],{},[59,141465,141466,141467,141470,141471,101009,141473,141475],{},"3 号盒子 ",[99,141468,141469],{},"sk_bd"," ，里面包含很多的 ",[99,141472,1120],{},[99,141474,59],{},[1120,141476,141477,141486],{},[59,141478,141479,141480,141482,141483,141485],{},"当鼠标移入到 ",[99,141481,59],{}," 上面的时候显示红色的边框，在这里先给 ",[99,141484,59],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[59,141487,141488,141489,141491,141492,141494,141495,141498,141499,141501],{},"由于给每个 ",[99,141490,59],{}," 都设置了外边距，导致一行的最后一个 ",[99,141493,59],{}," 掉了下来，在这里我们利用 ",[99,141496,141497],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[99,141500,59],{},"，去掉外边距就好了",[19,141503,139904],{},[93,141505,141506],{"className":126534,"code":138723,"language":126536,"meta":23,"style":23},[99,141507,141508,141514,141526],{"__ignoreMap":23},[102,141509,141510,141512],{"class":104,"line":105},[102,141511,51602],{"class":51291},[102,141513,15562],{"class":112},[102,141515,141516,141518,141520,141522,141524],{"class":104,"line":24},[102,141517,70461],{"class":161},[102,141519,51428],{"class":112},[102,141521,304],{"class":161},[102,141523,51547],{"class":161},[102,141525,1279],{"class":112},[102,141527,141528],{"class":104,"line":1168},[102,141529,1554],{"class":112},[19,141531,139993],{},[93,141533,141534],{"className":126534,"code":138723,"language":126536,"meta":23,"style":23},[99,141535,141536,141542,141554],{"__ignoreMap":23},[102,141537,141538,141540],{"class":104,"line":105},[102,141539,51602],{"class":51291},[102,141541,15562],{"class":112},[102,141543,141544,141546,141548,141550,141552],{"class":104,"line":24},[102,141545,70461],{"class":161},[102,141547,51428],{"class":112},[102,141549,304],{"class":161},[102,141551,51547],{"class":161},[102,141553,1279],{"class":112},[102,141555,141556],{"class":104,"line":1168},[102,141557,1554],{"class":112},[14,141559,141561],{"id":141560},"_163-注册页面制作","16.3 注册页面制作",[1451,141563],{"style":126390,"src":141564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141566,141567,141569],{},[262,141568,9015],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1451,141571],{"style":126390,"src":141572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[73,141574,141576],{"id":141575},"_1631-准备工作","16.3.1 准备工作",[1120,141578,141579,141582],{},[59,141580,141581],{},"创建register.html，引入 base.css，引入favicon图标",[59,141583,141584],{},"创建register.css ，在html页面进行引入",[73,141586,141588,141589,141591],{"id":141587},"_1632-header-头部实现","16.3.2 ",[99,141590,131539],{}," 头部实现",[1120,141593,141594,141597],{},[59,141595,141596],{},"整个内容用 版心 进行包裹",[59,141598,141599],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141601,139904],{},[93,141603,141604],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,141605,141606],{"__ignoreMap":23},[102,141607,141608,141610,141612,141614,141616,141618,141620,141622,141624,141626,141628,141630],{"class":104,"line":105},[102,141609,1023],{"class":112},[102,141611,1451],{"class":51291},[102,141613,55230],{"class":1952},[102,141615,158],{"class":112},[102,141617,134051],{"class":217},[102,141619,55238],{"class":1952},[102,141621,158],{"class":112},[102,141623,134058],{"class":217},[102,141625,134061],{"class":1952},[102,141627,158],{"class":112},[102,141629,134066],{"class":217},[102,141631,51298],{"class":112},[19,141633,139993],{},[93,141635,141636],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,141637,141638],{"__ignoreMap":23},[102,141639,141640,141642,141644,141646,141648,141650,141652,141654,141656,141658,141660,141662],{"class":104,"line":105},[102,141641,1023],{"class":112},[102,141643,1451],{"class":51291},[102,141645,55230],{"class":1952},[102,141647,158],{"class":112},[102,141649,134051],{"class":217},[102,141651,55238],{"class":1952},[102,141653,158],{"class":112},[102,141655,134058],{"class":217},[102,141657,134061],{"class":1952},[102,141659,158],{"class":112},[102,141661,134066],{"class":217},[102,141663,51298],{"class":112},[73,141665,141667,141668,141671],{"id":141666},"_1633-registerarea-主体模块实现","16.3.3 ",[99,141669,141670],{},"registerarea"," 主体模块实现",[1451,141673],{"style":126390,"src":141674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141676,141677],{},"整个大盒子 高度为 522px，设置4个边框",[19,141679,139904],{},[93,141681,141682],{"className":126534,"code":130691,"language":126536,"meta":23,"style":23},[99,141683,141684,141690,141706],{"__ignoreMap":23},[102,141685,141686,141688],{"class":104,"line":105},[102,141687,51602],{"class":51291},[102,141689,15562],{"class":112},[102,141691,141692,141694,141696,141698,141700,141702,141704],{"class":104,"line":24},[102,141693,70887],{"class":161},[102,141695,51428],{"class":112},[102,141697,330],{"class":161},[102,141699,51483],{"class":108},[102,141701,51512],{"class":161},[102,141703,129926],{"class":161},[102,141705,1279],{"class":112},[102,141707,141708],{"class":104,"line":1168},[102,141709,1554],{"class":112},[19,141711,139993],{},[93,141713,141714],{"className":126534,"code":130691,"language":126536,"meta":23,"style":23},[99,141715,141716,141722,141738],{"__ignoreMap":23},[102,141717,141718,141720],{"class":104,"line":105},[102,141719,51602],{"class":51291},[102,141721,15562],{"class":112},[102,141723,141724,141726,141728,141730,141732,141734,141736],{"class":104,"line":24},[102,141725,70887],{"class":161},[102,141727,51428],{"class":112},[102,141729,330],{"class":161},[102,141731,51483],{"class":108},[102,141733,51512],{"class":161},[102,141735,129926],{"class":161},[102,141737,1279],{"class":112},[102,141739,141740],{"class":104,"line":1168},[102,141741,1554],{"class":112},[19,141743,141744],{},"1号盒子 是一个 h3 标签，放标题",[1120,141746,141747],{},[59,141748,141749],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141751,139904],{},[93,141753,141754],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,141755,141756,141762,141772],{"__ignoreMap":23},[102,141757,141758,141760],{"class":104,"line":105},[102,141759,130382],{"class":1952},[102,141761,15562],{"class":112},[102,141763,141764,141766,141768,141770],{"class":104,"line":24},[102,141765,131014],{"class":161},[102,141767,51428],{"class":112},[102,141769,23726],{"class":161},[102,141771,1279],{"class":112},[102,141773,141774],{"class":104,"line":1168},[102,141775,1554],{"class":112},[19,141777,139993],{},[93,141779,141780],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,141781,141782,141788,141798],{"__ignoreMap":23},[102,141783,141784,141786],{"class":104,"line":105},[102,141785,130382],{"class":1952},[102,141787,15562],{"class":112},[102,141789,141790,141792,141794,141796],{"class":104,"line":24},[102,141791,131014],{"class":161},[102,141793,51428],{"class":112},[102,141795,23726],{"class":161},[102,141797,1279],{"class":112},[102,141799,141800],{"class":104,"line":1168},[102,141801,1554],{"class":112},[19,141803,141804],{},"2号盒子 里面放注册的内容",[1120,141806,141807,141810,141819,141833,141846,141849,141852,141870,141884],{},[59,141808,141809],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[59,141811,141812,141813,141815,141816,141818],{},"里面的内容利用 ",[99,141814,1120],{}," 包含 ",[99,141817,59],{}," 来实现的（不需要用表格）",[59,141820,139048,141821,141823,141824,141826,141827,141829,141830,141832],{},[99,141822,59],{}," 里面，左侧放 ",[99,141825,33599],{}," 标签， 中间放",[99,141828,53812],{}," 标签， 右侧放 ",[99,141831,102],{}," 提示信息",[59,141834,141835,141836,141838,141839,141841,141842,141845],{},"左侧 ",[99,141837,33599],{},"里面的文字都是右对齐，我们可以给",[99,141840,33599],{},"设置一个宽度（88px），然后利用",[99,141843,141844],{},"text-align"," 来设置右对齐",[59,141847,141848],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[59,141850,141851],{},"右侧 span修饰一下文字颜色",[59,141853,141854,141855],{},"提示信息的样式优化",[1120,141856,141857,141860,141863],{},[59,141858,141859],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[59,141861,141862],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[59,141864,141865,141866,141869],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[99,141867,141868],{},"vertical-algin"," 来设置 图片与文字对齐方式",[59,141871,141872,141873],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1120,141874,141875,141881],{},[59,141876,141877,141878,141880],{},"设置 ",[99,141879,23543],{}," 的 左右 12px 的内边距，设置一下文字颜色",[59,141882,141883],{},"分别设置 背景颜色",[59,141885,141886,141887,141889],{},"同意协议 和 完成注册 都是用 ",[99,141888,59],{}," 进行包裹",[19,141891,139904],{},[93,141893,141894],{"className":126534,"code":140477,"language":126536,"meta":23,"style":23},[99,141895,141896,141902,141912],{"__ignoreMap":23},[102,141897,141898,141900],{"class":104,"line":105},[102,141899,51602],{"class":51291},[102,141901,15562],{"class":112},[102,141903,141904,141906,141908,141910],{"class":104,"line":24},[102,141905,70869],{"class":161},[102,141907,51428],{"class":112},[102,141909,140494],{"class":161},[102,141911,1279],{"class":112},[102,141913,141914],{"class":104,"line":1168},[102,141915,1554],{"class":112},[19,141917,139993],{},[93,141919,141920],{"className":126534,"code":140477,"language":126536,"meta":23,"style":23},[99,141921,141922,141928,141938],{"__ignoreMap":23},[102,141923,141924,141926],{"class":104,"line":105},[102,141925,51602],{"class":51291},[102,141927,15562],{"class":112},[102,141929,141930,141932,141934,141936],{"class":104,"line":24},[102,141931,70869],{"class":161},[102,141933,51428],{"class":112},[102,141935,140494],{"class":161},[102,141937,1279],{"class":112},[102,141939,141940],{"class":104,"line":1168},[102,141941,1554],{"class":112},[73,141943,141945],{"id":141944},"_1634-底部实现","16.3.4 底部实现",[19,141947,139904],{},[93,141949,141950],{"className":126534,"code":140477,"language":126536,"meta":23,"style":23},[99,141951,141952,141958,141968],{"__ignoreMap":23},[102,141953,141954,141956],{"class":104,"line":105},[102,141955,51602],{"class":51291},[102,141957,15562],{"class":112},[102,141959,141960,141962,141964,141966],{"class":104,"line":24},[102,141961,70869],{"class":161},[102,141963,51428],{"class":112},[102,141965,140494],{"class":161},[102,141967,1279],{"class":112},[102,141969,141970],{"class":104,"line":1168},[102,141971,1554],{"class":112},[19,141973,139993],{},[93,141975,141976],{"className":127281,"code":130638,"language":127283,"meta":23,"style":23},[99,141977,141978,141982,141996,142000],{"__ignoreMap":23},[102,141979,141980],{"class":104,"line":105},[102,141981,130645],{"class":171},[102,141983,141984,141986,141988,141990,141992,141994],{"class":104,"line":24},[102,141985,1023],{"class":112},[102,141987,51602],{"class":51291},[102,141989,53477],{"class":1952},[102,141991,158],{"class":112},[102,141993,130658],{"class":217},[102,141995,51298],{"class":112},[102,141997,141998],{"class":104,"line":1168},[102,141999,130665],{"class":112},[102,142001,142002,142004,142006],{"class":104,"line":1183},[102,142003,51776],{"class":112},[102,142005,51602],{"class":51291},[102,142007,51298],{"class":112},[14,142009,142011],{"id":142010},"_164-项目总结","16.4 项目总结",[56,142013,142014,142017,142020,142023],{},[59,142015,142016],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[59,142018,142019],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[59,142021,142022],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[59,142024,142025],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1451,142027],{"style":126390,"src":142028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[56,142030,142031],{"start":1189},[59,142032,142033],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1451,142035],{"style":126390,"src":142036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[56,142038,142039],{"start":1203},[59,142040,142041],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1451,142043],{"style":126390,"src":142044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[93,142046,142047],{"className":127281,"code":136691,"language":127283,"meta":23,"style":23},[99,142048,142049],{"__ignoreMap":23},[102,142050,142051,142053,142055,142057,142059,142061,142063,142065,142067,142069,142071,142073],{"class":104,"line":105},[102,142052,1023],{"class":112},[102,142054,53812],{"class":51291},[102,142056,53815],{"class":1952},[102,142058,158],{"class":112},[102,142060,62690],{"class":217},[102,142062,14910],{"class":1952},[102,142064,158],{"class":112},[102,142066,136712],{"class":217},[102,142068,61011],{"class":1952},[102,142070,158],{"class":112},[102,142072,136719],{"class":217},[102,142074,51298],{"class":112},[56,142076,142077,142080],{"start":1209},[59,142078,142079],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[59,142081,142082],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5116,142084,142085],{},"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":23,"searchDepth":24,"depth":24,"links":142087},[142088,142093,142100,142108],{"id":139714,"depth":24,"text":139715,"children":142089},[142090,142091,142092],{"id":139718,"depth":1168,"text":139719},{"id":140449,"depth":1168,"text":140450},{"id":140762,"depth":1168,"text":140763},{"id":141062,"depth":24,"text":141063,"children":142094},[142095,142096,142098],{"id":141066,"depth":1168,"text":141067},{"id":141084,"depth":1168,"text":142097},"16.2.2 列表页 header 和 nav 修改",{"id":141368,"depth":1168,"text":142099},"16.2.3 列表页主体 sk_container",{"id":141560,"depth":24,"text":141561,"children":142101},[142102,142103,142105,142107],{"id":141575,"depth":1168,"text":141576},{"id":141587,"depth":1168,"text":142104},"16.3.2 header 头部实现",{"id":141666,"depth":1168,"text":142106},"16.3.3 registerarea 主体模块实现",{"id":141944,"depth":1168,"text":141945},{"id":142010,"depth":24,"text":142011},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139706,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142115,"title":142116,"body":142117,"description":27,"extension":28,"meta":142225,"navigation":30,"path":142226,"seo":142227,"stem":142228,"__hash__":142229},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142118,"toc":142220},[142119,142122,142126,142129,142132,142141,142150,142154,142159,142166,142184,142187,142190,142193,142196,142199,142202,142205,142208,142211,142214,142217],[10,142120,142116],{"id":142121},"_17-web服务器与网站发布",[14,142123,142125],{"id":142124},"_171-web服务器","17.1 Web服务器",[19,142127,142128],{},"把自己网站上传到服务器上，可以让其他人访问",[1451,142130],{"style":126390,"src":142131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142133,142134,142137,142138],{},[262,142135,142136],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[262,142139,142140],{},"Web 服务器等",[19,142142,142143,142144,101009,142147,25731],{},"根据服务器在网络中所在的位置不同，又可分为 ",[262,142145,142146],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[262,142148,142149],{},"远程服务器",[73,142151,142153],{"id":142152},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142155,142156],{},[262,142157,142158],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142160,142161,142162],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[351,142163,142164],{"href":142164,"rel":142165},"http:\u002F\u002Ffree.3v.do\u002F",[23855],[1120,142167,142168,142171,142174,142181],{},[59,142169,142170],{},"去免费空间网站注册账号。",[59,142172,142173],{},"记录下主机名、用户名、密码、域名。",[59,142175,142176,142177,142180],{},"利用 ",[99,142178,142179],{},"utftp"," 软件 上传网站到远程服务器",[59,142182,142183],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142185,142186],{},"使用软件上传，对上传软件文件进行解压",[1451,142188],{"style":126390,"src":142189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1451,142191],{"style":126390,"src":142192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142194,142195],{},"输入刚刚申请的服务器账号信息：",[1451,142197],{"style":126390,"src":142198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1451,142200],{"style":126390,"src":142201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1451,142203],{"style":126390,"src":142204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1451,142206],{"style":126390,"src":142207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142209,142210],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1451,142212],{"style":126390,"src":142213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142215,142216],{},"浏览器输入域名即可访问",[19,142218,142219],{},"首页一定必须是index",{"title":23,"searchDepth":24,"depth":24,"links":142221},[142222],{"id":142124,"depth":24,"text":142125,"children":142223},[142224],{"id":142152,"depth":1168,"text":142153},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142116,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142231,"title":142232,"body":142233,"description":27,"extension":28,"meta":143160,"navigation":30,"path":143161,"seo":143162,"stem":143163,"__hash__":143164},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142234,"toc":143143},[142235,142238,142242,142245,142248,142259,142262,142266,142270,142275,142278,142281,142284,142287,142291,142317,142321,142325,142328,142331,142335,142368,142372,142375,142378,142442,142446,142450,142453,142456,142459,142463,142508,142512,142515,142545,142549,142553,142556,142559,142563,142566,142635,142638,142746,142748,142754,142758,142761,142764,142860,142863,142867,142891,142895,142898,142902,142905,142909,142912,142915,142918,142921,142925,142928,142931,142935,142939,142942,142945,142948,142951,142955,142958,142962,142965,142968,143013,143017,143021,143024,143027,143030,143062,143066,143069,143103,143107,143110,143140],[10,142236,142232],{"id":142237},"_18-2d动画与3d转换",[14,142239,142241],{"id":142240},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142243,142244],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142246,142247],{},"转换（transform）你可以简单理解为变形",[1120,142249,142250,142253,142256],{},[59,142251,142252],{},"移动：translate",[59,142254,142255],{},"旋转：rotate",[59,142257,142258],{},"缩放：scale",[1451,142260],{"style":126390,"src":142261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[73,142263,142265],{"id":142264},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21988,142267,142269],{"id":142268},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142271,142272,142273],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[262,142274,133193],{},[1451,142276],{"style":126390,"src":142277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142279,142280],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142282,142283],{},"对于行内元素无效",[19,142285,142286],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21988,142288,142290],{"id":142289},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[93,142292,142293],{"className":126534,"code":138723,"language":126536,"meta":23,"style":23},[99,142294,142295,142301,142313],{"__ignoreMap":23},[102,142296,142297,142299],{"class":104,"line":105},[102,142298,51602],{"class":51291},[102,142300,15562],{"class":112},[102,142302,142303,142305,142307,142309,142311],{"class":104,"line":24},[102,142304,70461],{"class":161},[102,142306,51428],{"class":112},[102,142308,304],{"class":161},[102,142310,51547],{"class":161},[102,142312,1279],{"class":112},[102,142314,142315],{"class":104,"line":1168},[102,142316,1554],{"class":112},[73,142318,142320],{"id":142319},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21988,142322,142324],{"id":142323},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142326,142327],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1451,142329],{"style":126390,"src":142330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21988,142332,142334],{"id":142333},"_18122-旋转效果","18.1.2.2 旋转效果",[93,142336,142338],{"className":126534,"code":142337,"language":126536,"meta":23,"style":23},"div {\n  transform: rotate(45deg);\n}\n",[99,142339,142340,142346,142364],{"__ignoreMap":23},[102,142341,142342,142344],{"class":104,"line":105},[102,142343,51602],{"class":51291},[102,142345,15562],{"class":112},[102,142347,142348,142350,142352,142355,142357,142359,142362],{"class":104,"line":24},[102,142349,136518],{"class":161},[102,142351,51428],{"class":112},[102,142353,142354],{"class":161},"rotate",[102,142356,113],{"class":112},[102,142358,642],{"class":161},[102,142360,142361],{"class":108},"deg",[102,142363,2708],{"class":112},[102,142365,142366],{"class":104,"line":1168},[102,142367,1554],{"class":112},[21988,142369,142371],{"id":142370},"_18123-三角做法","18.1.2.3 三角做法",[19,142373,142374],{},"该下标当经过最外层大盒子时会实现向上反转",[1451,142376],{"style":126390,"src":142377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[93,142379,142380],{"className":126534,"code":135054,"language":126536,"meta":23,"style":23},[99,142381,142382,142386,142392,142402,142412,142428,142438],{"__ignoreMap":23},[102,142383,142384],{"class":104,"line":105},[102,142385,135061],{"class":171},[102,142387,142388,142390],{"class":104,"line":24},[102,142389,135066],{"class":1952},[102,142391,15562],{"class":112},[102,142393,142394,142396,142398,142400],{"class":104,"line":1168},[102,142395,70559],{"class":161},[102,142397,51428],{"class":112},[102,142399,304],{"class":161},[102,142401,1279],{"class":112},[102,142403,142404,142406,142408,142410],{"class":104,"line":1183},[102,142405,70779],{"class":161},[102,142407,51428],{"class":112},[102,142409,304],{"class":161},[102,142411,1279],{"class":112},[102,142413,142414,142416,142418,142420,142422,142424,142426],{"class":104,"line":1189},[102,142415,70887],{"class":161},[102,142417,51428],{"class":112},[102,142419,559],{"class":161},[102,142421,51483],{"class":108},[102,142423,51512],{"class":161},[102,142425,63982],{"class":161},[102,142427,1279],{"class":112},[102,142429,142430,142432,142434,142436],{"class":104,"line":1203},[102,142431,135109],{"class":161},[102,142433,51428],{"class":112},[102,142435,62360],{"class":161},[102,142437,1279],{"class":112},[102,142439,142440],{"class":104,"line":1209},[102,142441,1554],{"class":112},[73,142443,142445],{"id":142444},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21988,142447,142449],{"id":142448},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142451,142452],{},"设置中心点",[1451,142454],{"style":126390,"src":142455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142457,142458],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21988,142460,142462],{"id":142461},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[93,142464,142466],{"className":126534,"code":142465,"language":126536,"meta":23,"style":23},"\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",[99,142467,142468,142473,142479,142494,142499,142504],{"__ignoreMap":23},[102,142469,142470],{"class":104,"line":105},[102,142471,142472],{"class":171},"\u002F* 转换中心点 *\u002F\n",[102,142474,142475,142477],{"class":104,"line":24},[102,142476,51602],{"class":51291},[102,142478,15562],{"class":112},[102,142480,142481,142484,142486,142488,142490,142492],{"class":104,"line":1168},[102,142482,142483],{"class":161},"  transform-origin",[102,142485,51428],{"class":112},[102,142487,51583],{"class":161},[102,142489,17134],{"class":161},[102,142491,130397],{"class":112},[102,142493,135207],{"class":171},[102,142495,142496],{"class":104,"line":1183},[102,142497,142498],{"class":171},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[102,142500,142501],{"class":104,"line":1189},[102,142502,142503],{"class":171},"  \u002F* transform-origin: left top; *\u002F\n",[102,142505,142506],{"class":104,"line":1203},[102,142507,1554],{"class":112},[21988,142509,142511],{"id":142510},"_18133-旋转案例","18.1.3.3 旋转案例",[1451,142513],{"style":126390,"src":142514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[93,142516,142517],{"className":126534,"code":142337,"language":126536,"meta":23,"style":23},[99,142518,142519,142525,142541],{"__ignoreMap":23},[102,142520,142521,142523],{"class":104,"line":105},[102,142522,51602],{"class":51291},[102,142524,15562],{"class":112},[102,142526,142527,142529,142531,142533,142535,142537,142539],{"class":104,"line":24},[102,142528,136518],{"class":161},[102,142530,51428],{"class":112},[102,142532,142354],{"class":161},[102,142534,113],{"class":112},[102,142536,642],{"class":161},[102,142538,142361],{"class":108},[102,142540,2708],{"class":112},[102,142542,142543],{"class":104,"line":1168},[102,142544,1554],{"class":112},[73,142546,142548],{"id":142547},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21988,142550,142552],{"id":142551},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142554,142555],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1451,142557],{"style":126390,"src":142558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21988,142560,142562],{"id":142561},"_18142-分页按钮","18.1.4.2 分页按钮",[1451,142564],{"style":126390,"src":142565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[93,142567,142569],{"className":126534,"code":142568,"language":126536,"meta":23,"style":23},"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",[99,142570,142571,142577,142593,142597,142601,142606,142612,142626,142631],{"__ignoreMap":23},[102,142572,142573,142575],{"class":104,"line":105},[102,142574,51602],{"class":51291},[102,142576,15562],{"class":112},[102,142578,142579,142581,142583,142586,142588,142591],{"class":104,"line":24},[102,142580,136518],{"class":161},[102,142582,51428],{"class":112},[102,142584,142585],{"class":161},"scale",[102,142587,113],{"class":112},[102,142589,142590],{"class":161},"1.2",[102,142592,2708],{"class":112},[102,142594,142595],{"class":104,"line":1168},[102,142596,1554],{"class":112},[102,142598,142599],{"class":104,"line":1183},[102,142600,135995],{"class":112},[102,142602,142603],{"class":104,"line":1189},[102,142604,142605],{"class":171},"\u002F* 2D 缩放 *\u002F\n",[102,142607,142608,142610],{"class":104,"line":1203},[102,142609,51602],{"class":51291},[102,142611,15562],{"class":112},[102,142613,142614,142616,142618,142620,142622,142624],{"class":104,"line":1209},[102,142615,136518],{"class":161},[102,142617,51428],{"class":112},[102,142619,142585],{"class":161},[102,142621,113],{"class":112},[102,142623,142590],{"class":161},[102,142625,2708],{"class":112},[102,142627,142628],{"class":104,"line":1300},[102,142629,142630],{"class":171},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[102,142632,142633],{"class":104,"line":1306},[102,142634,1554],{"class":112},[19,142636,142637],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[93,142639,142641],{"className":126534,"code":142640,"language":126536,"meta":23,"style":23},"\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",[99,142642,142643,142648,142658,142679,142700,142704,142709,142715,142742],{"__ignoreMap":23},[102,142644,142645],{"class":104,"line":105},[102,142646,142647],{"class":171},"\u002F* 定义动画 *\u002F\n",[102,142649,142650,142653,142656],{"class":104,"line":24},[102,142651,142652],{"class":108},"@keyframes",[102,142654,142655],{"class":5206}," move",[102,142657,15562],{"class":112},[102,142659,142660,142663,142665,142667,142669,142672,142674,142676],{"class":104,"line":1168},[102,142661,142662],{"class":1952},"  0%",[102,142664,79798],{"class":112},[102,142666,48125],{"class":161},[102,142668,51428],{"class":112},[102,142670,142671],{"class":161},"translateX",[102,142673,113],{"class":112},[102,142675,304],{"class":161},[102,142677,142678],{"class":112},"); }\n",[102,142680,142681,142684,142686,142688,142690,142692,142694,142696,142698],{"class":104,"line":1183},[102,142682,142683],{"class":1952},"  100%",[102,142685,79798],{"class":112},[102,142687,48125],{"class":161},[102,142689,51428],{"class":112},[102,142691,142671],{"class":161},[102,142693,113],{"class":112},[102,142695,424],{"class":161},[102,142697,51483],{"class":108},[102,142699,142678],{"class":112},[102,142701,142702],{"class":104,"line":1189},[102,142703,1554],{"class":112},[102,142705,142706],{"class":104,"line":1203},[102,142707,142708],{"class":171},"\u002F* 调用动画 *\u002F\n",[102,142710,142711,142713],{"class":104,"line":1209},[102,142712,51602],{"class":51291},[102,142714,15562],{"class":112},[102,142716,142717,142720,142722,142724,142726,142728,142730,142732,142734,142737,142740],{"class":104,"line":1300},[102,142718,142719],{"class":161},"  animation",[102,142721,51428],{"class":112},[102,142723,135220],{"class":161},[102,142725,25109],{"class":161},[102,142727,808],{"class":108},[102,142729,78671],{"class":161},[102,142731,4082],{"class":161},[102,142733,808],{"class":108},[102,142735,142736],{"class":161}," infinite",[102,142738,142739],{"class":161}," alternate",[102,142741,1279],{"class":112},[102,142743,142744],{"class":104,"line":1306},[102,142745,1554],{"class":112},[19,142747,142637],{},[93,142749,142752],{"className":142750,"code":142751,"language":5177},[5175],"\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",[99,142753,142751],{"__ignoreMap":23},[21988,142755,142757],{"id":142756},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142759,142760],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1451,142762],{"style":126390,"src":142763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[93,142765,142766],{"className":126534,"code":142640,"language":126536,"meta":23,"style":23},[99,142767,142768,142772,142780,142798,142818,142822,142826,142832,142856],{"__ignoreMap":23},[102,142769,142770],{"class":104,"line":105},[102,142771,142647],{"class":171},[102,142773,142774,142776,142778],{"class":104,"line":24},[102,142775,142652],{"class":108},[102,142777,142655],{"class":5206},[102,142779,15562],{"class":112},[102,142781,142782,142784,142786,142788,142790,142792,142794,142796],{"class":104,"line":1168},[102,142783,142662],{"class":1952},[102,142785,79798],{"class":112},[102,142787,48125],{"class":161},[102,142789,51428],{"class":112},[102,142791,142671],{"class":161},[102,142793,113],{"class":112},[102,142795,304],{"class":161},[102,142797,142678],{"class":112},[102,142799,142800,142802,142804,142806,142808,142810,142812,142814,142816],{"class":104,"line":1183},[102,142801,142683],{"class":1952},[102,142803,79798],{"class":112},[102,142805,48125],{"class":161},[102,142807,51428],{"class":112},[102,142809,142671],{"class":161},[102,142811,113],{"class":112},[102,142813,424],{"class":161},[102,142815,51483],{"class":108},[102,142817,142678],{"class":112},[102,142819,142820],{"class":104,"line":1189},[102,142821,1554],{"class":112},[102,142823,142824],{"class":104,"line":1203},[102,142825,142708],{"class":171},[102,142827,142828,142830],{"class":104,"line":1209},[102,142829,51602],{"class":51291},[102,142831,15562],{"class":112},[102,142833,142834,142836,142838,142840,142842,142844,142846,142848,142850,142852,142854],{"class":104,"line":1300},[102,142835,142719],{"class":161},[102,142837,51428],{"class":112},[102,142839,135220],{"class":161},[102,142841,25109],{"class":161},[102,142843,808],{"class":108},[102,142845,78671],{"class":161},[102,142847,4082],{"class":161},[102,142849,808],{"class":108},[102,142851,142736],{"class":161},[102,142853,142739],{"class":161},[102,142855,1279],{"class":112},[102,142857,142858],{"class":104,"line":1306},[102,142859,1554],{"class":112},[19,142861,142862],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[73,142864,142866],{"id":142865},"_1823-知识点回顾","18.2.3 知识点回顾",[93,142868,142869],{"className":126534,"code":128703,"language":126536,"meta":23,"style":23},[99,142870,142871,142877,142887],{"__ignoreMap":23},[102,142872,142873,142875],{"class":104,"line":105},[102,142874,51602],{"class":51291},[102,142876,15562],{"class":112},[102,142878,142879,142881,142883,142885],{"class":104,"line":24},[102,142880,128716],{"class":161},[102,142882,51428],{"class":112},[102,142884,61727],{"class":161},[102,142886,1279],{"class":112},[102,142888,142889],{"class":104,"line":1168},[102,142890,1554],{"class":112},[14,142892,142894],{"id":142893},"_183-3d-转换","18.3 3D 转换",[19,142896,142897],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[73,142899,142901],{"id":142900},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1451,142903],{"style":126390,"src":142904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[73,142906,142908],{"id":142907},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1451,142910],{"style":126390,"src":142911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,142913,142914],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,142916,142917],{},"translate3d的效果需要搭配透视perspective来使用",[1451,142919],{"style":126390,"src":142920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[73,142922,142924],{"id":142923},"_1833-透视-perspective","18.3.3 透视 perspective",[1451,142926],{"style":126390,"src":142927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,142929,142930],{},"透视写在父盒子上，单位为像素",[73,142932,142934],{"id":142933},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21988,142936,142938],{"id":142937},"_18341-分开解释","18.3.4.1 分开解释",[1451,142940],{"style":126390,"src":142941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1451,142943],{"style":126390,"src":142944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1451,142946],{"style":126390,"src":142947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,142949,142950],{},"总结来说就是左手原则",[21988,142952,142954],{"id":142953},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1451,142956],{"style":126390,"src":142957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[73,142959,142961],{"id":142960},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1451,142963],{"style":126390,"src":142964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1451,142966],{"style":126390,"src":142967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[93,142969,142971],{"className":126534,"code":142970,"language":126536,"meta":23,"style":23},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[99,142972,142973,142979,142992,143009],{"__ignoreMap":23},[102,142974,142975,142977],{"class":104,"line":105},[102,142976,51602],{"class":51291},[102,142978,15562],{"class":112},[102,142980,142981,142984,142986,142988,142990],{"class":104,"line":24},[102,142982,142983],{"class":161},"  perspective",[102,142985,51428],{"class":112},[102,142987,65065],{"class":161},[102,142989,51483],{"class":108},[102,142991,1279],{"class":112},[102,142993,142994,142996,142998,143001,143003,143005,143007],{"class":104,"line":1168},[102,142995,136518],{"class":161},[102,142997,51428],{"class":112},[102,142999,143000],{"class":161},"rotateX",[102,143002,113],{"class":112},[102,143004,642],{"class":161},[102,143006,142361],{"class":108},[102,143008,2708],{"class":112},[102,143010,143011],{"class":104,"line":1183},[102,143012,1554],{"class":112},[73,143014,143016],{"id":143015},"_1836-案例","18.3.6 案例",[21988,143018,143020],{"id":143019},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1451,143022],{"style":126390,"src":143023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1451,143025],{"style":126390,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1451,143028],{"style":126390,"src":143029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[93,143031,143033],{"className":126534,"code":143032,"language":126536,"meta":23,"style":23},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[99,143034,143035,143040,143046,143058],{"__ignoreMap":23},[102,143036,143037],{"class":104,"line":105},[102,143038,143039],{"class":171},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[102,143041,143042,143044],{"class":104,"line":24},[102,143043,133531],{"class":1952},[102,143045,15562],{"class":112},[102,143047,143048,143050,143052,143054,143056],{"class":104,"line":1168},[102,143049,142983],{"class":161},[102,143051,51428],{"class":112},[102,143053,65065],{"class":161},[102,143055,51483],{"class":108},[102,143057,1279],{"class":112},[102,143059,143060],{"class":104,"line":1183},[102,143061,1554],{"class":112},[21988,143063,143065],{"id":143064},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1451,143067],{"style":126390,"src":143068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[93,143070,143071],{"className":127281,"code":130638,"language":127283,"meta":23,"style":23},[99,143072,143073,143077,143091,143095],{"__ignoreMap":23},[102,143074,143075],{"class":104,"line":105},[102,143076,130645],{"class":171},[102,143078,143079,143081,143083,143085,143087,143089],{"class":104,"line":24},[102,143080,1023],{"class":112},[102,143082,51602],{"class":51291},[102,143084,53477],{"class":1952},[102,143086,158],{"class":112},[102,143088,130658],{"class":217},[102,143090,51298],{"class":112},[102,143092,143093],{"class":104,"line":1168},[102,143094,130665],{"class":112},[102,143096,143097,143099,143101],{"class":104,"line":1183},[102,143098,51776],{"class":112},[102,143100,51602],{"class":51291},[102,143102,51298],{"class":112},[21988,143104,143106],{"id":143105},"_18363-旋转木马","18.3.6.3 旋转木马",[1451,143108],{"style":126390,"src":143109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[93,143111,143112],{"className":126534,"code":142337,"language":126536,"meta":23,"style":23},[99,143113,143114,143120,143136],{"__ignoreMap":23},[102,143115,143116,143118],{"class":104,"line":105},[102,143117,51602],{"class":51291},[102,143119,15562],{"class":112},[102,143121,143122,143124,143126,143128,143130,143132,143134],{"class":104,"line":24},[102,143123,136518],{"class":161},[102,143125,51428],{"class":112},[102,143127,142354],{"class":161},[102,143129,113],{"class":112},[102,143131,642],{"class":161},[102,143133,142361],{"class":108},[102,143135,2708],{"class":112},[102,143137,143138],{"class":104,"line":1168},[102,143139,1554],{"class":112},[5116,143141,143142],{},"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":23,"searchDepth":24,"depth":24,"links":143144},[143145,143152],{"id":142240,"depth":24,"text":142241,"children":143146},[143147,143148,143149,143150,143151],{"id":142264,"depth":1168,"text":142265},{"id":142319,"depth":1168,"text":142320},{"id":142444,"depth":1168,"text":142445},{"id":142547,"depth":1168,"text":142548},{"id":142865,"depth":1168,"text":142866},{"id":142893,"depth":24,"text":142894,"children":143153},[143154,143155,143156,143157,143158,143159],{"id":142900,"depth":1168,"text":142901},{"id":142907,"depth":1168,"text":142908},{"id":142923,"depth":1168,"text":142924},{"id":142933,"depth":1168,"text":142934},{"id":142960,"depth":1168,"text":142961},{"id":143015,"depth":1168,"text":143016},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142232,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143166,"title":143167,"body":143168,"description":27,"extension":28,"meta":143371,"navigation":30,"path":143372,"seo":143373,"stem":143374,"__hash__":143375},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143169,"toc":143360},[143170,143173,143177,143180,143183,143187,143190,143193,143196,143200,143203,143207,143210,143214,143217,143221,143235,143239,143264,143267,143270,143287,143291,143295,143298,143301,143305,143308,143311,143329,143333,143336,143350,143354,143357],[10,143171,143167],{"id":143172},"_19-移动端基础-前缀现状与视口",[14,143174,143176],{"id":143175},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1451,143178],{"style":126390,"src":143179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143181,143182],{},"意思就是加个前缀，增加兼容性",[14,143184,143186],{"id":143185},"_192-移动端现状认识","19.2 移动端现状认识",[1451,143188],{"style":126390,"src":143189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143191,143192],{},"调试方法：",[1451,143194],{"style":126390,"src":143195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143197,143199],{"id":143198},"_193-视口","19.3 视口",[19,143201,143202],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[73,143204,143206],{"id":143205},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1451,143208],{"style":126390,"src":143209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[73,143211,143213],{"id":143212},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1451,143215],{"style":126390,"src":143216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[73,143218,143220],{"id":143219},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1120,143222,143223,143226,143229,143232],{},[59,143224,143225],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[59,143227,143228],{},"理想视口，对设备来讲，是最理想的视口尺寸",[59,143230,143231],{},"需要手动添写meta视口标签通知浏览器操作",[59,143233,143234],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[73,143236,143238],{"id":143237},"_1934-meta视口标签","19.3.4 meta视口标签",[93,143240,143242],{"className":127281,"code":143241,"language":127283,"meta":23,"style":23},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[99,143243,143244],{"__ignoreMap":23},[102,143245,143246,143248,143250,143252,143254,143256,143258,143260,143262],{"class":104,"line":105},[102,143247,1023],{"class":112},[102,143249,51335],{"class":51291},[102,143251,14910],{"class":1952},[102,143253,158],{"class":112},[102,143255,51382],{"class":217},[102,143257,51362],{"class":1952},[102,143259,158],{"class":112},[102,143261,51389],{"class":217},[102,143263,51298],{"class":112},[1451,143265],{"style":126390,"src":143266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143268,143269],{},"标准视口设置：",[56,143271,143272,143275,143278,143281,143284],{},[59,143273,143274],{},"视口宽度和设备保持一致",[59,143276,143277],{},"视口的默认缩放比例1.0",[59,143279,143280],{},"不允许用户自行缩放",[59,143282,143283],{},"最大允许的缩放比例1.0",[59,143285,143286],{},"最小允许的缩放比例1.0",[73,143288,143290],{"id":143289},"_1935-二倍图","19.3.5 二倍图",[21988,143292,143294],{"id":143293},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1451,143296],{"style":126390,"src":143297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1451,143299],{"style":126390,"src":143300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21988,143302,143304],{"id":143303},"_19352-多倍图","19.3.5.2 多倍图",[1451,143306],{"style":126390,"src":143307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143309,143310],{},"二倍图法，代码如下：",[93,143312,143314],{"className":126534,"code":143313,"language":126536,"meta":23,"style":23},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[99,143315,143316,143321],{"__ignoreMap":23},[102,143317,143318],{"class":104,"line":105},[102,143319,143320],{"class":171},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[102,143322,143323,143326],{"class":104,"line":24},[102,143324,143325],{"class":51291},"background-size",[102,143327,143328],{"class":112},": 50% 50%;\n",[21988,143330,143332],{"id":143331},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1451,143334],{"style":126390,"src":143335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[56,143337,143338,143341,143344,143347],{},[59,143339,143340],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[59,143342,143343],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[59,143345,143346],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[59,143348,143349],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21988,143351,143353],{"id":143352},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1451,143355],{"style":126390,"src":143356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5116,143358,143359],{},"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":23,"searchDepth":24,"depth":24,"links":143361},[143362,143363,143364],{"id":143175,"depth":24,"text":143176},{"id":143185,"depth":24,"text":143186},{"id":143198,"depth":24,"text":143199,"children":143365},[143366,143367,143368,143369,143370],{"id":143205,"depth":1168,"text":143206},{"id":143212,"depth":1168,"text":143213},{"id":143219,"depth":1168,"text":143220},{"id":143237,"depth":1168,"text":143238},{"id":143289,"depth":1168,"text":143290},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143167,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143377,"title":143378,"body":143379,"description":27,"extension":28,"meta":144256,"navigation":30,"path":144257,"seo":144258,"stem":144259,"__hash__":144260},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143380,"toc":144240},[143381,143384,143388,143395,143398,143405,143408,143413,143416,143420,143424,143431,143434,143437,143441,143444,143447,143450,143453,143456,143460,143463,143467,143469,143472,143475,143478,143481,143483,143486,143488,143518,143520,143550,143554,143557,143561,143564,143581,143584,143587,143663,143665,143668,143671,143674,143677,143679,143682,143685,143689,143711,143714,143717,143721,143724,143730,143733,143737,143740,143743,143747,143750,143753,143756,143760,143763,143766,143769,143772,143776,143779,143783,143790,143793,143796,143799,143802,143812,143815,143818,143825,143828,143832,143835,143838,143842,143845,143848,143851,143896,143899,143902,143905,143907,144036,144038,144076,144079,144082,144084,144202,144204,144238],[10,143382,143378],{"id":143383},"_20-移动端布局实战上篇",[14,143385,143387],{"id":143386},"_201-移动端主流方案","20.1 移动端主流方案",[56,143389,143390],{},[59,143391,143392],{},[262,143393,143394],{},"单独移动端页面（主流）",[1451,143396],{"style":126390,"src":143397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[56,143399,143400],{"start":24},[59,143401,143402],{},[262,143403,143404],{},"响应式兼容PC移动端",[1451,143406],{"style":126390,"src":143407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[56,143409,143410],{"start":1168},[59,143411,143412],{},"两种页面选型布局方式",[1451,143414],{"style":126390,"src":143415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143417,143419],{"id":143418},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[73,143421,143423],{"id":143422},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143425,143426,143427],{},"官网地址： ",[351,143428,143429],{"href":143429,"rel":143430},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23855],[1451,143432],{"style":126390,"src":143433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1451,143435],{"style":126390,"src":143436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[73,143438,143440],{"id":143439},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1451,143442],{"style":126390,"src":143443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1451,143445],{"style":126390,"src":143446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143448,143449],{},"去除高亮：",[19,143451,143452],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143454,143455],{},"-webkit- tap-highlight-color: transparent;",[14,143457,143459],{"id":143458},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1451,143461],{"style":126390,"src":143462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143464,143466],{"id":143465},"_204-流式布局案例","20.4 流式布局案例",[19,143468,142],{},[19,143470,143471],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143473,143474],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143476,143477],{},"图片格式：",[1451,143479],{"style":126390,"src":143480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143482,135577],{},[1451,143484],{"style":126390,"src":143485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143487,139904],{},[93,143489,143490],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,143491,143492],{"__ignoreMap":23},[102,143493,143494,143496,143498,143500,143502,143504,143506,143508,143510,143512,143514,143516],{"class":104,"line":105},[102,143495,1023],{"class":112},[102,143497,1451],{"class":51291},[102,143499,55230],{"class":1952},[102,143501,158],{"class":112},[102,143503,134051],{"class":217},[102,143505,55238],{"class":1952},[102,143507,158],{"class":112},[102,143509,134058],{"class":217},[102,143511,134061],{"class":1952},[102,143513,158],{"class":112},[102,143515,134066],{"class":217},[102,143517,51298],{"class":112},[19,143519,139993],{},[93,143521,143522],{"className":127281,"code":134036,"language":127283,"meta":23,"style":23},[99,143523,143524],{"__ignoreMap":23},[102,143525,143526,143528,143530,143532,143534,143536,143538,143540,143542,143544,143546,143548],{"class":104,"line":105},[102,143527,1023],{"class":112},[102,143529,1451],{"class":51291},[102,143531,55230],{"class":1952},[102,143533,158],{"class":112},[102,143535,134051],{"class":217},[102,143537,55238],{"class":1952},[102,143539,158],{"class":112},[102,143541,134058],{"class":217},[102,143543,134061],{"class":1952},[102,143545,158],{"class":112},[102,143547,134066],{"class":217},[102,143549,51298],{"class":112},[14,143551,143553],{"id":143552},"_205-flex布局","20.5 flex布局",[1451,143555],{"style":126390,"src":143556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[73,143558,143560],{"id":143559},"_2051-布局原理","20.5.1 布局原理",[19,143562,143563],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1120,143565,143566,143569,143572,143575,143578],{},[59,143567,143568],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[59,143570,143571],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[59,143573,143574],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[59,143576,143577],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[59,143579,143580],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143582,143583],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143585,143586],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[93,143588,143590],{"className":126534,"code":143589,"language":126536,"meta":23,"style":23},"\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",[99,143591,143592,143597,143604,143614,143626,143637,143648,143659],{"__ignoreMap":23},[102,143593,143594],{"class":104,"line":105},[102,143595,143596],{"class":171},"\u002F* Flex 弹性布局 *\u002F\n",[102,143598,143599,143602],{"class":104,"line":24},[102,143600,143601],{"class":1952},".container",[102,143603,15562],{"class":112},[102,143605,143606,143608,143610,143612],{"class":104,"line":1168},[102,143607,128150],{"class":161},[102,143609,51428],{"class":112},[102,143611,51468],{"class":161},[102,143613,1279],{"class":112},[102,143615,143616,143619,143621,143624],{"class":104,"line":1183},[102,143617,143618],{"class":161},"  flex-direction",[102,143620,51428],{"class":112},[102,143622,143623],{"class":161},"row",[102,143625,1279],{"class":112},[102,143627,143628,143631,143633,143635],{"class":104,"line":1189},[102,143629,143630],{"class":161},"  justify-content",[102,143632,51428],{"class":112},[102,143634,51659],{"class":161},[102,143636,1279],{"class":112},[102,143638,143639,143642,143644,143646],{"class":104,"line":1203},[102,143640,143641],{"class":161},"  align-items",[102,143643,51428],{"class":112},[102,143645,51583],{"class":161},[102,143647,1279],{"class":112},[102,143649,143650,143653,143655,143657],{"class":104,"line":1209},[102,143651,143652],{"class":161},"  flex-wrap",[102,143654,51428],{"class":112},[102,143656,78601],{"class":161},[102,143658,1279],{"class":112},[102,143660,143661],{"class":104,"line":1300},[102,143662,1554],{"class":112},[19,143664,70444],{},[19,143666,143667],{},".form-item .male-label {",[19,143669,143670],{},"   margin-right: 20px;",[19,143672,143673],{},"   display: inline-flex;",[19,143675,143676],{},"   align-items: center;",[19,143678,1059],{},[1451,143680],{"style":126390,"src":143681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1451,143683],{"style":126390,"src":143684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[73,143686,143688],{"id":143687},"_2052-常见父项属性","20.5.2 常见父项属性",[56,143690,143691,143694,143697,143700,143703,143706,143709],{},[59,143692,143693],{},"flex-direction：设置主轴的方向",[59,143695,143696],{},"justify-content：设置主轴上的子元素排列方式",[59,143698,143699],{},"flex-wrap：设置子元素是否换行",[59,143701,143702],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[59,143704,143705],{},"align-items：设置侧轴上的子元素排列方式（单行）",[59,143707,143708],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[59,143710,143693],{},[1451,143712],{"style":126390,"src":143713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1451,143715],{"style":126390,"src":143716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[56,143718,143719],{"start":24},[59,143720,143696],{},[1451,143722],{"style":126390,"src":143723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143725,143726,143729],{},[99,143727,143728],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143731,143732],{},"跟着主轴走",[56,143734,143735],{"start":1168},[59,143736,143699],{},[1451,143738],{"style":126390,"src":143739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143741,143742],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[56,143744,143745],{"start":1183},[59,143746,143702],{},[1451,143748],{"style":126390,"src":143749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143751,143752],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143754,143755],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[56,143757,143758],{"start":1189},[59,143759,143705],{},[1451,143761],{"style":126390,"src":143762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143764,143765],{},"align-items与align-content之间的区别：",[19,143767,143768],{},"单找items，多找content",[1451,143770],{"style":126390,"src":143771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[56,143773,143774],{"start":1203},[59,143775,143708],{},[1451,143777],{"style":126390,"src":143778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[73,143780,143782],{"id":143781},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[56,143784,143785],{},[59,143786,143787],{},[262,143788,143789],{},"flex 属性",[19,143791,143792],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1451,143794],{"style":126390,"src":143795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,143797,143798],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,143800,143801],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[56,143803,143804],{"start":24},[59,143805,143806,13785,143809],{},[262,143807,143808],{},"align-self",[262,143810,143811],{},"控制子项自己在侧轴上的排列方式",[1451,143813],{"style":126390,"src":143814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,143816,143817],{},"单个子盒子在父盒子侧轴上的排列方式",[56,143819,143820],{"start":1168},[59,143821,143822,143824],{},[262,143823,95288],{}," 属性定义项目的排列顺序",[1451,143826],{"style":126390,"src":143827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[73,143829,143831],{"id":143830},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1451,143833],{"style":126390,"src":143834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,143836,143837],{},"必须要添加浏览器的私有前缀",[73,143839,143841],{"id":143840},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,143843,143844],{},"学到最重要的知识：",[19,143846,143847],{},"flex处理这样的布局思路",[1451,143849],{"style":126390,"src":143850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[93,143852,143854],{"className":126534,"code":143853,"language":126536,"meta":23,"style":23},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[99,143855,143856,143862,143872,143882,143892],{"__ignoreMap":23},[102,143857,143858,143860],{"class":104,"line":105},[102,143859,143601],{"class":1952},[102,143861,15562],{"class":112},[102,143863,143864,143866,143868,143870],{"class":104,"line":24},[102,143865,128150],{"class":161},[102,143867,51428],{"class":112},[102,143869,51468],{"class":161},[102,143871,1279],{"class":112},[102,143873,143874,143876,143878,143880],{"class":104,"line":1168},[102,143875,143630],{"class":161},[102,143877,51428],{"class":112},[102,143879,51583],{"class":161},[102,143881,1279],{"class":112},[102,143883,143884,143886,143888,143890],{"class":104,"line":1183},[102,143885,143641],{"class":161},[102,143887,51428],{"class":112},[102,143889,51583],{"class":161},[102,143891,1279],{"class":112},[102,143893,143894],{"class":104,"line":1189},[102,143895,1554],{"class":112},[19,143897,143898],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,143900,143901],{},"使用属性选择器",[1451,143903],{"style":126390,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,143906,68880],{},[93,143908,143910],{"className":127281,"code":143909,"language":127283,"meta":23,"style":23},"\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",[99,143911,143912,143917,143931,143936,143956,143961,143980,143985,144004,144009,144028],{"__ignoreMap":23},[102,143913,143914],{"class":104,"line":105},[102,143915,143916],{"class":171},"\u003C!-- 携程网移动端案例结构 -->\n",[102,143918,143919,143921,143923,143925,143927,143929],{"class":104,"line":24},[102,143920,1023],{"class":112},[102,143922,51602],{"class":51291},[102,143924,53477],{"class":1952},[102,143926,158],{"class":112},[102,143928,92314],{"class":217},[102,143930,51298],{"class":112},[102,143932,143933],{"class":104,"line":1168},[102,143934,143935],{"class":171},"  \u003C!-- 搜索栏 -->\n",[102,143937,143938,143940,143942,143944,143946,143949,143952,143954],{"class":104,"line":1183},[102,143939,52135],{"class":112},[102,143941,51602],{"class":51291},[102,143943,53477],{"class":1952},[102,143945,158],{"class":112},[102,143947,143948],{"class":217},"\"search-index\"",[102,143950,143951],{"class":112},">...\u003C\u002F",[102,143953,51602],{"class":51291},[102,143955,51298],{"class":112},[102,143957,143958],{"class":104,"line":1189},[102,143959,143960],{"class":171},"  \u003C!-- 焦点图 -->\n",[102,143962,143963,143965,143967,143969,143971,143974,143976,143978],{"class":104,"line":1203},[102,143964,52135],{"class":112},[102,143966,51602],{"class":51291},[102,143968,53477],{"class":1952},[102,143970,158],{"class":112},[102,143972,143973],{"class":217},"\"focus\"",[102,143975,143951],{"class":112},[102,143977,51602],{"class":51291},[102,143979,51298],{"class":112},[102,143981,143982],{"class":104,"line":1209},[102,143983,143984],{"class":171},"  \u003C!-- 主导航 -->\n",[102,143986,143987,143989,143991,143993,143995,143998,144000,144002],{"class":104,"line":1300},[102,143988,52135],{"class":112},[102,143990,51602],{"class":51291},[102,143992,53477],{"class":1952},[102,143994,158],{"class":112},[102,143996,143997],{"class":217},"\"local-nav\"",[102,143999,143951],{"class":112},[102,144001,51602],{"class":51291},[102,144003,51298],{"class":112},[102,144005,144006],{"class":104,"line":1306},[102,144007,144008],{"class":171},"  \u003C!-- 子导航 -->\n",[102,144010,144011,144013,144015,144017,144019,144022,144024,144026],{"class":104,"line":1318},[102,144012,52135],{"class":112},[102,144014,51602],{"class":51291},[102,144016,53477],{"class":1952},[102,144018,158],{"class":112},[102,144020,144021],{"class":217},"\"nav-common\"",[102,144023,143951],{"class":112},[102,144025,51602],{"class":51291},[102,144027,51298],{"class":112},[102,144029,144030,144032,144034],{"class":104,"line":1601},[102,144031,51776],{"class":112},[102,144033,51602],{"class":51291},[102,144035,51298],{"class":112},[19,144037,70444],{},[93,144039,144040],{"className":126534,"code":136986,"language":126536,"meta":23,"style":23},[99,144041,144042,144056,144072],{"__ignoreMap":23},[102,144043,144044,144046,144048,144050,144052,144054],{"class":104,"line":105},[102,144045,53812],{"class":51291},[102,144047,1003],{"class":112},[102,144049,103098],{"class":1952},[102,144051,158],{"class":108},[102,144053,62690],{"class":217},[102,144055,137003],{"class":112},[102,144057,144058,144060,144062,144064,144066,144068,144070],{"class":104,"line":24},[102,144059,70887],{"class":161},[102,144061,51428],{"class":112},[102,144063,330],{"class":161},[102,144065,51483],{"class":108},[102,144067,51512],{"class":161},[102,144069,130114],{"class":161},[102,144071,1279],{"class":112},[102,144073,144074],{"class":104,"line":1168},[102,144075,1554],{"class":112},[19,144077,144078],{},"总代码和效果展示：",[1451,144080],{"style":126390,"src":144081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144083,68880],{},[93,144085,144086],{"className":127281,"code":143909,"language":127283,"meta":23,"style":23},[99,144087,144088,144092,144106,144110,144128,144132,144150,144154,144172,144176,144194],{"__ignoreMap":23},[102,144089,144090],{"class":104,"line":105},[102,144091,143916],{"class":171},[102,144093,144094,144096,144098,144100,144102,144104],{"class":104,"line":24},[102,144095,1023],{"class":112},[102,144097,51602],{"class":51291},[102,144099,53477],{"class":1952},[102,144101,158],{"class":112},[102,144103,92314],{"class":217},[102,144105,51298],{"class":112},[102,144107,144108],{"class":104,"line":1168},[102,144109,143935],{"class":171},[102,144111,144112,144114,144116,144118,144120,144122,144124,144126],{"class":104,"line":1183},[102,144113,52135],{"class":112},[102,144115,51602],{"class":51291},[102,144117,53477],{"class":1952},[102,144119,158],{"class":112},[102,144121,143948],{"class":217},[102,144123,143951],{"class":112},[102,144125,51602],{"class":51291},[102,144127,51298],{"class":112},[102,144129,144130],{"class":104,"line":1189},[102,144131,143960],{"class":171},[102,144133,144134,144136,144138,144140,144142,144144,144146,144148],{"class":104,"line":1203},[102,144135,52135],{"class":112},[102,144137,51602],{"class":51291},[102,144139,53477],{"class":1952},[102,144141,158],{"class":112},[102,144143,143973],{"class":217},[102,144145,143951],{"class":112},[102,144147,51602],{"class":51291},[102,144149,51298],{"class":112},[102,144151,144152],{"class":104,"line":1209},[102,144153,143984],{"class":171},[102,144155,144156,144158,144160,144162,144164,144166,144168,144170],{"class":104,"line":1300},[102,144157,52135],{"class":112},[102,144159,51602],{"class":51291},[102,144161,53477],{"class":1952},[102,144163,158],{"class":112},[102,144165,143997],{"class":217},[102,144167,143951],{"class":112},[102,144169,51602],{"class":51291},[102,144171,51298],{"class":112},[102,144173,144174],{"class":104,"line":1306},[102,144175,144008],{"class":171},[102,144177,144178,144180,144182,144184,144186,144188,144190,144192],{"class":104,"line":1318},[102,144179,52135],{"class":112},[102,144181,51602],{"class":51291},[102,144183,53477],{"class":1952},[102,144185,158],{"class":112},[102,144187,144021],{"class":217},[102,144189,143951],{"class":112},[102,144191,51602],{"class":51291},[102,144193,51298],{"class":112},[102,144195,144196,144198,144200],{"class":104,"line":1601},[102,144197,51776],{"class":112},[102,144199,51602],{"class":51291},[102,144201,51298],{"class":112},[19,144203,70444],{},[93,144205,144206],{"className":127281,"code":130638,"language":127283,"meta":23,"style":23},[99,144207,144208,144212,144226,144230],{"__ignoreMap":23},[102,144209,144210],{"class":104,"line":105},[102,144211,130645],{"class":171},[102,144213,144214,144216,144218,144220,144222,144224],{"class":104,"line":24},[102,144215,1023],{"class":112},[102,144217,51602],{"class":51291},[102,144219,53477],{"class":1952},[102,144221,158],{"class":112},[102,144223,130658],{"class":217},[102,144225,51298],{"class":112},[102,144227,144228],{"class":104,"line":1168},[102,144229,130665],{"class":112},[102,144231,144232,144234,144236],{"class":104,"line":1183},[102,144233,51776],{"class":112},[102,144235,51602],{"class":51291},[102,144237,51298],{"class":112},[5116,144239,137935],{},{"title":23,"searchDepth":24,"depth":24,"links":144241},[144242,144243,144247,144248,144249],{"id":143386,"depth":24,"text":143387},{"id":143418,"depth":24,"text":143419,"children":144244},[144245,144246],{"id":143422,"depth":1168,"text":143423},{"id":143439,"depth":1168,"text":143440},{"id":143458,"depth":24,"text":143459},{"id":143465,"depth":24,"text":143466},{"id":143552,"depth":24,"text":143553,"children":144250},[144251,144252,144253,144254,144255],{"id":143559,"depth":1168,"text":143560},{"id":143687,"depth":1168,"text":143688},{"id":143781,"depth":1168,"text":143782},{"id":143830,"depth":1168,"text":143831},{"id":143840,"depth":1168,"text":143841},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143378,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144262,"title":144263,"body":144264,"description":27,"extension":28,"meta":145491,"navigation":30,"path":145492,"seo":145493,"stem":145494,"__hash__":145495},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144265,"toc":145469},[144266,144269,144273,144277,144280,144283,144287,144292,144295,144298,144301,144304,144307,144364,144367,144372,144375,144378,144382,144393,144397,144400,144403,144410,144415,144419,144422,144428,144431,144435,144438,144445,144448,144451,144458,144461,144468,144471,144474,144481,144484,144487,144489,144506,144510,144513,144516,144519,144523,144526,144529,144532,144535,144538,144541,144543,144546,144549,144611,144614,144724,144731,144737,144740,144743,144747,144750,144754,144759,144762,144769,144772,144778,144783,144786,144789,144792,144795,144798,144801,144804,144807,144863,144865,144891,144895,144898,144901,144904,144912,144915,144918,144922,144978,144981,144985,144991,145002,145005,145010,145013,145016,145022,145025,145028,145031,145034,145037,145040,145043,145046,145071,145077,145080,145083,145086,145089,145092,145095,145100,145103,145106,145109,145117,145120,145127,145130,145133,145135,145159,145161,145164,145167,145170,145173,145176,145179,145182,145216,145219,145222,145256,145263,145266,145269,145272,145275,145278,145281,145288,145291,145294,145297,145300,145307,145310,145313,145320,145323,145326,145330,145333,145336,145339,145342,145345,145348,145351,145354,145356,145380,145382,145406,145410,145421,145424,145427,145430,145433,145436,145439,145442,145445,145448,145451,145454,145457,145460,145463,145466],[10,144267,144263],{"id":144268},"_21-移动端布局实战下篇",[14,144270,144272],{"id":144271},"_211-rem适配布局","21.1 rem适配布局",[73,144274,144276],{"id":144275},"_2111-rem单位","21.1.1 rem单位",[1451,144278],{"style":126390,"src":144279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144281,144282],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[73,144284,144286],{"id":144285},"_2112-媒体查询","21.1.2 媒体查询",[56,144288,144289],{},[59,144290,144291],{},"参数介绍",[1451,144293],{"style":126390,"src":144294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1451,144296],{"style":126390,"src":144297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1451,144299],{"style":126390,"src":144300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1451,144302],{"style":126390,"src":144303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1451,144305],{"style":126390,"src":144306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[93,144308,144310],{"className":126534,"code":144309,"language":126536,"meta":23,"style":23},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[99,144311,144312,144317,144336,144343,144356,144360],{"__ignoreMap":23},[102,144313,144314],{"class":104,"line":105},[102,144315,144316],{"class":171},"\u002F* 媒体查询 *\u002F\n",[102,144318,144319,144322,144324,144327,144329,144332,144334],{"class":104,"line":24},[102,144320,144321],{"class":108},"@media",[102,144323,1647],{"class":112},[102,144325,144326],{"class":161},"max-width",[102,144328,51428],{"class":112},[102,144330,144331],{"class":161},"768",[102,144333,51483],{"class":108},[102,144335,12432],{"class":112},[102,144337,144338,144341],{"class":104,"line":1168},[102,144339,144340],{"class":1952},"  .container",[102,144342,15562],{"class":112},[102,144344,144345,144348,144350,144352,144354],{"class":104,"line":1183},[102,144346,144347],{"class":161},"    width",[102,144349,51428],{"class":112},[102,144351,424],{"class":161},[102,144353,441],{"class":108},[102,144355,1279],{"class":112},[102,144357,144358],{"class":104,"line":1189},[102,144359,127330],{"class":112},[102,144361,144362],{"class":104,"line":1203},[102,144363,1554],{"class":112},[19,144365,144366],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[56,144368,144369],{"start":24},[59,144370,144371],{},"引入资源",[1451,144373],{"style":126390,"src":144374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144376,144377],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[73,144379,144381],{"id":144380},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1120,144383,144384,144387,144390],{},[59,144385,144386],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[59,144388,144389],{},"媒体查询可以根据不同设备宽度来修改样式",[59,144391,144392],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144394,144396],{"id":144395},"_212-less基础","21.2 Less基础",[19,144398,144399],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144401,144402],{},"Less可以解决该问题，它是css的扩展语言",[19,144404,144405,144406],{},"Less中文网址： ",[351,144407,144408],{"href":144408,"rel":144409},"http:\u002F\u002Flesscss.cn\u002F",[23855],[19,144411,144412],{},[262,144413,144414],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[73,144416,144418],{"id":144417},"_2121-less安装","21.2.1 less安装",[19,144420,144421],{},"如果使用vscode，则无需进行下方安装步骤",[19,144423,144424],{},[351,144425,144426],{"href":144426,"rel":144427},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23855],[1451,144429],{"style":126390,"src":144430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[73,144432,144434],{"id":144433},"_2122-less使用","21.2.2 less使用",[19,144436,144437],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[56,144439,144440],{},[59,144441,144442],{},[262,144443,144444],{},"Less 变量",[1451,144446],{"style":126390,"src":144447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1451,144449],{"style":126390,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[56,144452,144453],{"start":24},[59,144454,144455],{},[262,144456,144457],{},"Less 编译",[1451,144459],{"style":126390,"src":144460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[56,144462,144463],{"start":1168},[59,144464,144465],{},[262,144466,144467],{},"Less 嵌套",[1451,144469],{"style":126390,"src":144470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1451,144472],{"style":126390,"src":144473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[56,144475,144476],{"start":1183},[59,144477,144478],{},[262,144479,144480],{},"Less 运算",[1451,144482],{"style":126390,"src":144483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144485,144486],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144488,142],{},[1120,144490,144491,144494,144497,144500,144503],{},[59,144492,144493],{},"乘号（*）和除号（\u002F）的写法",[59,144495,144496],{},"运算符中间左右有个空格隔开 1px + 5",[59,144498,144499],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[59,144501,144502],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[59,144504,144505],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144507,144509],{"id":144508},"_213-rem-适配方案","21.3 rem 适配方案",[19,144511,144512],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144514,144515],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1451,144517],{"style":126390,"src":144518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[73,144520,144522],{"id":144521},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144524,144525],{},"rem + 媒体查询 + less 技术",[1451,144527],{"style":126390,"src":144528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144530,144531],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144533,144534],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1451,144536],{"style":126390,"src":144537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144539,144540],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144542,14623],{},[1451,144544],{"style":126390,"src":144545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144547,144548],{},"index.html:",[93,144550,144552],{"className":126534,"code":144551,"language":126536,"meta":23,"style":23},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[99,144553,144554,144559,144565,144581,144585,144591,144607],{"__ignoreMap":23},[102,144555,144556],{"class":104,"line":105},[102,144557,144558],{"class":171},"\u002F* rem 适配方案 *\u002F\n",[102,144560,144561,144563],{"class":104,"line":24},[102,144562,50626],{"class":51291},[102,144564,15562],{"class":112},[102,144566,144567,144569,144571,144574,144576,144578],{"class":104,"line":1168},[102,144568,70617],{"class":161},[102,144570,51428],{"class":112},[102,144572,144573],{"class":161},"62.5",[102,144575,441],{"class":108},[102,144577,130397],{"class":112},[102,144579,144580],{"class":171},"\u002F* 1rem = 10px *\u002F\n",[102,144582,144583],{"class":104,"line":1183},[102,144584,1554],{"class":112},[102,144586,144587,144589],{"class":104,"line":1189},[102,144588,130382],{"class":1952},[102,144590,15562],{"class":112},[102,144592,144593,144595,144597,144599,144602,144604],{"class":104,"line":1203},[102,144594,70559],{"class":161},[102,144596,51428],{"class":112},[102,144598,559],{"class":161},[102,144600,144601],{"class":108},"rem",[102,144603,130397],{"class":112},[102,144605,144606],{"class":171},"\u002F* 100px *\u002F\n",[102,144608,144609],{"class":104,"line":1209},[102,144610,1554],{"class":112},[19,144612,144613],{},"common.less",[93,144615,144617],{"className":126534,"code":144616,"language":126536,"meta":23,"style":23},"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",[99,144618,144619,144625,144640,144644,144650,144664,144668,144672,144676,144682,144696,144700,144706,144720],{"__ignoreMap":23},[102,144620,144621,144623],{"class":104,"line":105},[102,144622,50626],{"class":51291},[102,144624,15562],{"class":112},[102,144626,144627,144629,144631,144633,144635,144637],{"class":104,"line":24},[102,144628,70617],{"class":161},[102,144630,51428],{"class":112},[102,144632,144573],{"class":161},[102,144634,441],{"class":108},[102,144636,26058],{"class":112},[102,144638,144639],{"class":171},"\u002F* 10px *\u002F\n",[102,144641,144642],{"class":104,"line":1168},[102,144643,1554],{"class":112},[102,144645,144646,144648],{"class":104,"line":1183},[102,144647,51602],{"class":51291},[102,144649,15562],{"class":112},[102,144651,144652,144654,144656,144658,144660,144662],{"class":104,"line":1189},[102,144653,70559],{"class":161},[102,144655,51428],{"class":112},[102,144657,559],{"class":161},[102,144659,144601],{"class":108},[102,144661,26058],{"class":112},[102,144663,144606],{"class":171},[102,144665,144666],{"class":104,"line":1203},[102,144667,1554],{"class":112},[102,144669,144670],{"class":104,"line":1209},[102,144671,135995],{"class":112},[102,144673,144674],{"class":104,"line":1300},[102,144675,144558],{"class":171},[102,144677,144678,144680],{"class":104,"line":1306},[102,144679,50626],{"class":51291},[102,144681,15562],{"class":112},[102,144683,144684,144686,144688,144690,144692,144694],{"class":104,"line":1318},[102,144685,70617],{"class":161},[102,144687,51428],{"class":112},[102,144689,144573],{"class":161},[102,144691,441],{"class":108},[102,144693,130397],{"class":112},[102,144695,144580],{"class":171},[102,144697,144698],{"class":104,"line":1601},[102,144699,1554],{"class":112},[102,144701,144702,144704],{"class":104,"line":1606},[102,144703,130382],{"class":1952},[102,144705,15562],{"class":112},[102,144707,144708,144710,144712,144714,144716,144718],{"class":104,"line":1612},[102,144709,70559],{"class":161},[102,144711,51428],{"class":112},[102,144713,559],{"class":161},[102,144715,144601],{"class":108},[102,144717,130397],{"class":112},[102,144719,144606],{"class":171},[102,144721,144722],{"class":104,"line":1617},[102,144723,1554],{"class":112},[19,144725,144726,144727,144730],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23543,144728,144729],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[93,144732,144735],{"className":144733,"code":144734,"language":5177},[5175],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[99,144736,144734],{"__ignoreMap":23},[19,144738,144739],{},"less保存时会自动变成.css文件",[19,144741,144742],{},"好好搞懂上述代码写法",[73,144744,144746],{"id":144745},"_2132-样式导入样式","21.3.2 样式导入样式",[1451,144748],{"style":126390,"src":144749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[73,144751,144753],{"id":144752},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[56,144755,144756],{},[59,144757,144758],{},"准备工作",[1451,144760],{"style":126390,"src":144761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144763,144764,144765],{},"github地址：",[351,144766,144767],{"href":144767,"rel":144768},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23855],[19,144770,144771],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144773,144774,144775],{},"js文件引入到index.html中使用的是",[99,144776,144777],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[56,144779,144780],{"start":24},[59,144781,144782],{},"vscode插件",[1451,144784],{"style":126390,"src":144785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,144787,144788],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,144790,144791],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1451,144793],{"style":126390,"src":144794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,144796,144797],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1451,144799],{"style":126390,"src":144800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,144802,144803],{},"修改成75就可以，alt+z为快捷键",[19,144805,144806],{},"index.css：",[93,144808,144809],{"className":126534,"code":144551,"language":126536,"meta":23,"style":23},[99,144810,144811,144815,144821,144835,144839,144845,144859],{"__ignoreMap":23},[102,144812,144813],{"class":104,"line":105},[102,144814,144558],{"class":171},[102,144816,144817,144819],{"class":104,"line":24},[102,144818,50626],{"class":51291},[102,144820,15562],{"class":112},[102,144822,144823,144825,144827,144829,144831,144833],{"class":104,"line":1168},[102,144824,70617],{"class":161},[102,144826,51428],{"class":112},[102,144828,144573],{"class":161},[102,144830,441],{"class":108},[102,144832,130397],{"class":112},[102,144834,144580],{"class":171},[102,144836,144837],{"class":104,"line":1183},[102,144838,1554],{"class":112},[102,144840,144841,144843],{"class":104,"line":1189},[102,144842,130382],{"class":1952},[102,144844,15562],{"class":112},[102,144846,144847,144849,144851,144853,144855,144857],{"class":104,"line":1203},[102,144848,70559],{"class":161},[102,144850,51428],{"class":112},[102,144852,559],{"class":161},[102,144854,144601],{"class":108},[102,144856,130397],{"class":112},[102,144858,144606],{"class":171},[102,144860,144861],{"class":104,"line":1209},[102,144862,1554],{"class":112},[19,144864,144548],{},[93,144866,144867],{"className":126534,"code":126938,"language":126536,"meta":23,"style":23},[99,144868,144869,144875,144887],{"__ignoreMap":23},[102,144870,144871,144873],{"class":104,"line":105},[102,144872,51791],{"class":51291},[102,144874,15562],{"class":112},[102,144876,144877,144879,144881,144883,144885],{"class":104,"line":24},[102,144878,70617],{"class":161},[102,144880,51428],{"class":112},[102,144882,714],{"class":161},[102,144884,51483],{"class":108},[102,144886,1279],{"class":112},[102,144888,144889],{"class":104,"line":1168},[102,144890,1554],{"class":112},[14,144892,144894],{"id":144893},"_214-响应式开发","21.4 响应式开发",[19,144896,144897],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1451,144899],{"style":126390,"src":144900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,144902,144903],{},"做法：",[1120,144905,144906,144909],{},[59,144907,144908],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[59,144910,144911],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1451,144913],{"style":126390,"src":144914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,144916,144917],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[73,144919,144921],{"id":144920},"_2141-简单代码示范","21.4.1 简单代码示范",[93,144923,144924],{"className":126534,"code":144551,"language":126536,"meta":23,"style":23},[99,144925,144926,144930,144936,144950,144954,144960,144974],{"__ignoreMap":23},[102,144927,144928],{"class":104,"line":105},[102,144929,144558],{"class":171},[102,144931,144932,144934],{"class":104,"line":24},[102,144933,50626],{"class":51291},[102,144935,15562],{"class":112},[102,144937,144938,144940,144942,144944,144946,144948],{"class":104,"line":1168},[102,144939,70617],{"class":161},[102,144941,51428],{"class":112},[102,144943,144573],{"class":161},[102,144945,441],{"class":108},[102,144947,130397],{"class":112},[102,144949,144580],{"class":171},[102,144951,144952],{"class":104,"line":1183},[102,144953,1554],{"class":112},[102,144955,144956,144958],{"class":104,"line":1189},[102,144957,130382],{"class":1952},[102,144959,15562],{"class":112},[102,144961,144962,144964,144966,144968,144970,144972],{"class":104,"line":1203},[102,144963,70559],{"class":161},[102,144965,51428],{"class":112},[102,144967,559],{"class":161},[102,144969,144601],{"class":108},[102,144971,130397],{"class":112},[102,144973,144606],{"class":171},[102,144975,144976],{"class":104,"line":1209},[102,144977,1554],{"class":112},[19,144979,144980],{},"父盒子一般命名为container",[73,144982,144984],{"id":144983},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,144986,144987,144988],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[262,144989,144990],{},"使得 Web 开发更加快捷",[1120,144992,144993],{},[59,144994,144995,144996],{},"官网：",[262,144997,144998],{},[351,144999,145000],{"href":145000,"rel":145001},"http:\u002F\u002Fgetbootstrap.com\u002F",[23855],[19,145003,145004],{},"可以直接去官网拿现成的东西",[56,145006,145007],{},[59,145008,145009],{},"Bootstrap的使用",[19,145011,145012],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145014,145015],{},"Bootstrap 使用四步曲：",[19,145017,145018,145021],{},[262,145019,145020],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1451,145023],{"style":126390,"src":145024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145026,145027],{},"打开Bootstrap官网，然后下载",[1451,145029],{"style":126390,"src":145030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1451,145032],{"style":126390,"src":145033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145035,145036],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145038,145039],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145041,145042],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1451,145044],{"style":126390,"src":145045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[93,145047,145049],{"className":126534,"code":145048,"language":126536,"meta":23,"style":23},".center {\n  color: red;\n}\n",[99,145050,145051,145057,145067],{"__ignoreMap":23},[102,145052,145053,145055],{"class":104,"line":105},[102,145054,126825],{"class":1952},[102,145056,15562],{"class":112},[102,145058,145059,145061,145063,145065],{"class":104,"line":24},[102,145060,70896],{"class":161},[102,145062,51428],{"class":112},[102,145064,57412],{"class":161},[102,145066,1279],{"class":112},[102,145068,145069],{"class":104,"line":1168},[102,145070,1554],{"class":112},[19,145072,145073,145076],{},[99,145074,145075],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1451,145078],{"style":126390,"src":145079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1451,145081],{"style":126390,"src":145082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1451,145084],{"style":126390,"src":145085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145087,145088],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1451,145090],{"style":126390,"src":145091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145093,145094],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[56,145096,145097],{"start":24},[59,145098,145099],{},"布局容器",[1451,145101],{"style":126390,"src":145102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145104,145105],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145107,145108],{},"container-fluid用于移动式布局比较方便",[56,145110,145111],{"start":1168},[59,145112,145113,145114],{},"bootstrap ",[262,145115,145116],{},"栅格系统原理",[1451,145118],{"style":126390,"src":145119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[56,145121,145122],{"start":1183},[59,145123,145124],{},[262,145125,145126],{},"栅格选项参数",[1451,145128],{"style":126390,"src":145129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145131,145132],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145134,14623],{},[93,145136,145137],{"className":126534,"code":145048,"language":126536,"meta":23,"style":23},[99,145138,145139,145145,145155],{"__ignoreMap":23},[102,145140,145141,145143],{"class":104,"line":105},[102,145142,126825],{"class":1952},[102,145144,15562],{"class":112},[102,145146,145147,145149,145151,145153],{"class":104,"line":24},[102,145148,70896],{"class":161},[102,145150,51428],{"class":112},[102,145152,57412],{"class":161},[102,145154,1279],{"class":112},[102,145156,145157],{"class":104,"line":1168},[102,145158,1554],{"class":112},[19,145160,135577],{},[1451,145162],{"style":126390,"src":145163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145165,145166],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145168,145169],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145171,145172],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145174,145175],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145177,145178],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145180,145181],{},"汇总展示说明：",[93,145183,145184],{"className":127281,"code":130638,"language":127283,"meta":23,"style":23},[99,145185,145186,145190,145204,145208],{"__ignoreMap":23},[102,145187,145188],{"class":104,"line":105},[102,145189,130645],{"class":171},[102,145191,145192,145194,145196,145198,145200,145202],{"class":104,"line":24},[102,145193,1023],{"class":112},[102,145195,51602],{"class":51291},[102,145197,53477],{"class":1952},[102,145199,158],{"class":112},[102,145201,130658],{"class":217},[102,145203,51298],{"class":112},[102,145205,145206],{"class":104,"line":1168},[102,145207,130665],{"class":112},[102,145209,145210,145212,145214],{"class":104,"line":1183},[102,145211,51776],{"class":112},[102,145213,51602],{"class":51291},[102,145215,51298],{"class":112},[1451,145217],{"style":126390,"src":145218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145220,145221],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[93,145223,145224],{"className":127281,"code":130638,"language":127283,"meta":23,"style":23},[99,145225,145226,145230,145244,145248],{"__ignoreMap":23},[102,145227,145228],{"class":104,"line":105},[102,145229,130645],{"class":171},[102,145231,145232,145234,145236,145238,145240,145242],{"class":104,"line":24},[102,145233,1023],{"class":112},[102,145235,51602],{"class":51291},[102,145237,53477],{"class":1952},[102,145239,158],{"class":112},[102,145241,130658],{"class":217},[102,145243,51298],{"class":112},[102,145245,145246],{"class":104,"line":1168},[102,145247,130665],{"class":112},[102,145249,145250,145252,145254],{"class":104,"line":1183},[102,145251,51776],{"class":112},[102,145253,51602],{"class":51291},[102,145255,51298],{"class":112},[56,145257,145258],{"start":1189},[59,145259,145260],{},[262,145261,145262],{},"列嵌套",[1451,145264],{"style":126390,"src":145265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145267,145268],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145270,145271],{},"没加row内部这样：",[1451,145273],{"style":126390,"src":145274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145276,145277],{},"加上row之后内部为：",[1451,145279],{"style":126390,"src":145280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[56,145282,145283],{"start":1203},[59,145284,145285],{},[262,145286,145287],{},"列偏移",[1451,145289],{"style":126390,"src":145290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145292,145293],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145295,145296],{},"要加偏移量，即偏移份数",[19,145298,145299],{},"偏移的份数=12-两个盒子的份数",[56,145301,145302],{"start":1209},[59,145303,145304],{},[262,145305,145306],{},"列排序",[1451,145308],{"style":126390,"src":145309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145311,145312],{},"pull拉左；push推右",[56,145314,145315],{"start":1300},[59,145316,145317],{},[262,145318,145319],{},"响应式工具",[1451,145321],{"style":126390,"src":145322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145324,145325],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[73,145327,145329],{"id":145328},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145331,145332],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145334,145335],{},"ul {",[19,145337,145338],{},"list-style: none;",[19,145340,145341],{},"margin:0;",[19,145343,145344],{},"padding:0; }",[1451,145346],{"style":126390,"src":145347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1451,145349],{"style":126390,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145352,145353],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145355,68880],{},[93,145357,145358],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,145359,145360,145366,145376],{"__ignoreMap":23},[102,145361,145362,145364],{"class":104,"line":105},[102,145363,130382],{"class":1952},[102,145365,15562],{"class":112},[102,145367,145368,145370,145372,145374],{"class":104,"line":24},[102,145369,131014],{"class":161},[102,145371,51428],{"class":112},[102,145373,23726],{"class":161},[102,145375,1279],{"class":112},[102,145377,145378],{"class":104,"line":1168},[102,145379,1554],{"class":112},[19,145381,70444],{},[93,145383,145384],{"className":126534,"code":139204,"language":126536,"meta":23,"style":23},[99,145385,145386,145392,145402],{"__ignoreMap":23},[102,145387,145388,145390],{"class":104,"line":105},[102,145389,130382],{"class":1952},[102,145391,15562],{"class":112},[102,145393,145394,145396,145398,145400],{"class":104,"line":24},[102,145395,131014],{"class":161},[102,145397,51428],{"class":112},[102,145399,23726],{"class":161},[102,145401,1279],{"class":112},[102,145403,145404],{"class":104,"line":1168},[102,145405,1554],{"class":112},[14,145407,145409],{"id":145408},"_215-swiper-插件使用","21.5 swiper 插件使用",[1120,145411,145412,145415,145418],{},[59,145413,145414],{},"下载需要的css和js文件html页面中 引入相关文件",[59,145416,145417],{},"官网找到类似案例，复制html结构，css样式 js 语法",[59,145419,145420],{},"根据需求定制修改模块",[1451,145422],{"style":126390,"src":145423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145425,145426],{},"解压后将这两部分放到项目中",[1451,145428],{"style":126390,"src":145429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145431,145432],{},"这个插件可以帮助我们实现轮播图效果",[19,145434,145435],{},"用法：",[1451,145437],{"style":126390,"src":145438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145440,145441],{},"找到自己喜欢的",[1451,145443],{"style":126390,"src":145444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145446,145447],{},"右键，查看网页源代码",[1451,145449],{"style":126390,"src":145450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145452,145453],{},"复制人家的结构内容",[19,145455,145456],{},"然后去看API文档：",[1451,145458],{"style":126390,"src":145459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145461,145462],{},"可以看看如何修改样式",[19,145464,145465],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5116,145467,145468],{},"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":23,"searchDepth":24,"depth":24,"links":145470},[145471,145476,145480,145485,145490],{"id":144271,"depth":24,"text":144272,"children":145472},[145473,145474,145475],{"id":144275,"depth":1168,"text":144276},{"id":144285,"depth":1168,"text":144286},{"id":144380,"depth":1168,"text":144381},{"id":144395,"depth":24,"text":144396,"children":145477},[145478,145479],{"id":144417,"depth":1168,"text":144418},{"id":144433,"depth":1168,"text":144434},{"id":144508,"depth":24,"text":144509,"children":145481},[145482,145483,145484],{"id":144521,"depth":1168,"text":144522},{"id":144745,"depth":1168,"text":144746},{"id":144752,"depth":1168,"text":144753},{"id":144893,"depth":24,"text":144894,"children":145486},[145487,145488,145489],{"id":144920,"depth":1168,"text":144921},{"id":144983,"depth":1168,"text":144984},{"id":145328,"depth":1168,"text":145329},{"id":145408,"depth":24,"text":145409},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144263,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145497,"title":145498,"body":145499,"description":27,"extension":28,"meta":145719,"navigation":30,"path":145720,"seo":145721,"stem":145722,"__hash__":145723},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145500,"toc":145715},[145501,145504,145508,145511,145526,145531,145534,145539,145574,145579,145591,145596,145609,145614,145631,145636,145656,145661,145679,145682,145685,145688,145691,145695,145698,145701,145704,145707,145710,145713],[10,145502,145498],{"id":145503},"_22-代码提交与新型相对单位",[14,145505,145507],{"id":145506},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145509,145510],{},"法1：",[56,145512,145513,145520,145523],{},[59,145514,145515,145516],{},"登录网站注册：",[351,145517,145518],{"href":145518,"rel":145519},"https:\u002F\u002Fgitee.com\u002F",[23855],[59,145521,145522],{},"码云创建新的仓库",[59,145524,145525],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1120,145527,145528],{},[59,145529,145530],{},"在网站根目录右键-- Git Bash Here",[1451,145532],{"style":126390,"src":145533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1120,145535,145536],{},[59,145537,145538],{},"如果是第一次利用git提交，请配置好全局选项",[93,145540,145542],{"className":117287,"code":145541,"language":117289,"meta":23,"style":23},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[99,145543,145544,145560],{"__ignoreMap":23},[102,145545,145546,145549,145551,145554,145557],{"class":104,"line":105},[102,145547,145548],{"class":1952},"git",[102,145550,119710],{"class":217},[102,145552,145553],{"class":161}," --global",[102,145555,145556],{"class":217}," user.name",[102,145558,145559],{"class":217}," \"你的名字\"\n",[102,145561,145562,145564,145566,145568,145571],{"class":104,"line":24},[102,145563,145548],{"class":1952},[102,145565,119710],{"class":217},[102,145567,145553],{"class":161},[102,145569,145570],{"class":217}," user.email",[102,145572,145573],{"class":217}," \"你的邮箱\"\n",[1120,145575,145576],{},[59,145577,145578],{},"初始化仓库",[93,145580,145582],{"className":117287,"code":145581,"language":117289,"meta":23,"style":23},"git init\n",[99,145583,145584],{"__ignoreMap":23},[102,145585,145586,145588],{"class":104,"line":105},[102,145587,145548],{"class":1952},[102,145589,145590],{"class":217}," init\n",[1120,145592,145593],{},[59,145594,145595],{},"把本地文件放到暂存区",[93,145597,145599],{"className":117287,"code":145598,"language":117289,"meta":23,"style":23},"git add .\n",[99,145600,145601],{"__ignoreMap":23},[102,145602,145603,145605,145607],{"class":104,"line":105},[102,145604,145548],{"class":1952},[102,145606,5199],{"class":217},[102,145608,28732],{"class":217},[1120,145610,145611],{},[59,145612,145613],{},"把本地文件放到本地仓库里面",[93,145615,145617],{"className":117287,"code":145616,"language":117289,"meta":23,"style":23},"git commit -m \"first commit\"\n",[99,145618,145619],{"__ignoreMap":23},[102,145620,145621,145623,145626,145628],{"class":104,"line":105},[102,145622,145548],{"class":1952},[102,145624,145625],{"class":217}," commit",[102,145627,100873],{"class":161},[102,145629,145630],{"class":217}," \"first commit\"\n",[1120,145632,145633],{},[59,145634,145635],{},"链接远程仓库",[93,145637,145639],{"className":117287,"code":145638,"language":117289,"meta":23,"style":23},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[99,145640,145641],{"__ignoreMap":23},[102,145642,145643,145645,145648,145650,145653],{"class":104,"line":105},[102,145644,145548],{"class":1952},[102,145646,145647],{"class":217}," remote",[102,145649,5199],{"class":217},[102,145651,145652],{"class":217}," origin",[102,145654,145655],{"class":217}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1120,145657,145658],{},[59,145659,145660],{},"把本地仓库的文件推送到远程仓库 push",[93,145662,145664],{"className":117287,"code":145663,"language":117289,"meta":23,"style":23},"git push -u origin master\n",[99,145665,145666],{"__ignoreMap":23},[102,145667,145668,145670,145672,145674,145676],{"class":104,"line":105},[102,145669,145548],{"class":1952},[102,145671,29007],{"class":217},[102,145673,28281],{"class":161},[102,145675,145652],{"class":217},[102,145677,145678],{"class":217}," master\n",[1451,145680],{"style":126390,"src":145681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,145683,145684],{},"上方方法暂未实现，后边学完git后在整",[19,145686,145687],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1451,145689],{"style":126390,"src":145690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145692,145694],{"id":145693},"_222-新型相对单位","22.2 新型相对单位",[1451,145696],{"style":126390,"src":145697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1451,145699],{"style":126390,"src":145700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,145702,145703],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,145705,145706],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1451,145708],{"style":126390,"src":145709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,145711,145712],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5116,145714,23948],{},{"title":23,"searchDepth":24,"depth":24,"links":145716},[145717,145718],{"id":145506,"depth":24,"text":145507},{"id":145693,"depth":24,"text":145694},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145498,"description":27},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145725,"title":145726,"body":145727,"description":145731,"extension":28,"meta":145732,"navigation":30,"path":145733,"seo":145734,"stem":145735,"__hash__":145736},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145728,"toc":145729},[],{"title":23,"searchDepth":24,"depth":24,"links":145730},[],"自己正经开始学编程的第一门语言！",{"category":92830},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145726,"description":145731},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145738,"title":145739,"body":145740,"description":27,"extension":28,"meta":146887,"navigation":30,"path":146888,"seo":146889,"stem":146890,"__hash__":146891},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145741,"toc":146863},[145742,145745,145749,145752,145755,145780,145783,145789,145793,145796,145823,145826,145866,145869,145881,145884,145890,145894,145898,145925,145942,145949,145953,145956,145982,145985,145989,145992,146032,146035,146052,146058,146062,146067,146111,146114,146132,146135,146203,146207,146214,146217,146232,146235,146244,146247,146258,146261,146270,146273,146290,146293,146308,146312,146316,146319,146321,146341,146345,146348,146351,146362,146365,146371,146375,146381,146408,146411,146423,146426,146437,146440,146446,146450,146456,146506,146509,146551,146554,146587,146590,146624,146628,146631,146651,146654,146690,146693,146706,146710,146714,146720,146723,146736,146740,146743,146749,146752,146756,146759,146762,146811,146815,146831,146837,146844,146850,146860],[10,145743,145739],{"id":145744},"_1-python环境与第一个程序",[14,145746,145748],{"id":145747},"_11-什么是python","1.1 什么是Python",[19,145750,145751],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145753,145754],{},"理解 Python 时抓住三个关键词：",[56,145756,145757,145760,145763],{},[59,145758,145759],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[59,145761,145762],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[59,145764,145765,145766,325,145769,325,145772,325,145775,325,145777,28376],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[99,145767,145768],{},"os",[99,145770,145771],{},"sys",[99,145773,145774],{},"json",[99,145776,57851],{},[99,145778,145779],{},"datetime",[19,145781,145782],{},"Python 程序的运行链路：",[93,145784,145787],{"className":145785,"code":145786,"language":5177,"meta":23},[5175],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[99,145788,145786],{"__ignoreMap":23},[14,145790,145792],{"id":145791},"_12-python解释器","1.2 Python解释器",[19,145794,145795],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[93,145797,145799],{"className":23812,"code":145798,"language":23814,"meta":23,"style":23},"python --version\npython3 --version\npython\npython3\n",[99,145800,145801,145807,145813,145818],{"__ignoreMap":23},[102,145802,145803,145805],{"class":104,"line":105},[102,145804,30371],{"class":1952},[102,145806,26284],{"class":161},[102,145808,145809,145811],{"class":104,"line":24},[102,145810,100870],{"class":1952},[102,145812,26284],{"class":161},[102,145814,145815],{"class":104,"line":1168},[102,145816,145817],{"class":1952},"python\n",[102,145819,145820],{"class":104,"line":1183},[102,145821,145822],{"class":1952},"python3\n",[19,145824,145825],{},"进入交互模式后，可以直接输入表达式：",[93,145827,145829],{"className":30369,"code":145828,"language":30371,"meta":23,"style":23},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[99,145830,145831,145842,145847,145861],{"__ignoreMap":23},[102,145832,145833,145836,145838,145840],{"class":104,"line":105},[102,145834,145835],{"class":108},">>>",[102,145837,25109],{"class":161},[102,145839,45557],{"class":108},[102,145841,47714],{"class":161},[102,145843,145844],{"class":104,"line":24},[102,145845,145846],{"class":161},"3\n",[102,145848,145849,145851,145854,145856,145859],{"class":104,"line":1168},[102,145850,145835],{"class":108},[102,145852,145853],{"class":161}," print",[102,145855,113],{"class":112},[102,145857,145858],{"class":217},"\"hello python\"",[102,145860,119],{"class":112},[102,145862,145863],{"class":104,"line":1183},[102,145864,145865],{"class":112},"hello python\n",[19,145867,145868],{},"退出交互模式：",[93,145870,145872],{"className":30369,"code":145871,"language":30371,"meta":23,"style":23},"exit()\n",[99,145873,145874],{"__ignoreMap":23},[102,145875,145876,145879],{"class":104,"line":105},[102,145877,145878],{"class":161},"exit",[102,145880,1965],{"class":112},[19,145882,145883],{},"或使用快捷键：",[93,145885,145888],{"className":145886,"code":145887,"language":5177,"meta":23},[5175],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[99,145889,145887],{"__ignoreMap":23},[14,145891,145893],{"id":145892},"_13-安装python","1.3 安装Python",[73,145895,145897],{"id":145896},"_131-windows安装","1.3.1 Windows安装",[56,145899,145900,145907,145910,145916,145922],{},[59,145901,145902,145903],{},"打开 Python 官网：",[351,145904,145905],{"href":145905,"rel":145906},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23855],[59,145908,145909],{},"下载 Windows Installer。",[59,145911,145912,145913,28376],{},"安装时勾选 ",[99,145914,145915],{},"Add Python to PATH",[59,145917,145918,145919,28376],{},"点击 ",[99,145920,145921],{},"Install Now",[59,145923,145924],{},"安装完成后打开命令提示符验证：",[93,145926,145928],{"className":23812,"code":145927,"language":23814,"meta":23,"style":23},"python --version\npip --version\n",[99,145929,145930,145936],{"__ignoreMap":23},[102,145931,145932,145934],{"class":104,"line":105},[102,145933,30371],{"class":1952},[102,145935,26284],{"class":161},[102,145937,145938,145940],{"class":104,"line":24},[102,145939,23821],{"class":1952},[102,145941,26284],{"class":161},[19,145943,145944,145945,145948],{},"如果提示 ",[99,145946,145947],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[73,145950,145952],{"id":145951},"_132-macos安装","1.3.2 macOS安装",[19,145954,145955],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[93,145957,145959],{"className":23812,"code":145958,"language":23814,"meta":23,"style":23},"brew install python\npython3 --version\npip3 --version\n",[99,145960,145961,145970,145976],{"__ignoreMap":23},[102,145962,145963,145966,145968],{"class":104,"line":105},[102,145964,145965],{"class":1952},"brew",[102,145967,23824],{"class":217},[102,145969,124309],{"class":217},[102,145971,145972,145974],{"class":104,"line":24},[102,145973,100870],{"class":1952},[102,145975,26284],{"class":161},[102,145977,145978,145980],{"class":104,"line":1168},[102,145979,119691],{"class":1952},[102,145981,26284],{"class":161},[19,145983,145984],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[73,145986,145988],{"id":145987},"_133-linux安装","1.3.3 Linux安装",[19,145990,145991],{},"Ubuntu\u002FDebian：",[93,145993,145995],{"className":23812,"code":145994,"language":23814,"meta":23,"style":23},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[99,145996,145997,146005,146020,146026],{"__ignoreMap":23},[102,145998,145999,146001,146003],{"class":104,"line":105},[102,146000,24567],{"class":1952},[102,146002,117308],{"class":217},[102,146004,26233],{"class":217},[102,146006,146007,146009,146011,146013,146015,146017],{"class":104,"line":24},[102,146008,24567],{"class":1952},[102,146010,117308],{"class":217},[102,146012,23824],{"class":217},[102,146014,104394],{"class":217},[102,146016,100789],{"class":217},[102,146018,146019],{"class":217}," python3-venv\n",[102,146021,146022,146024],{"class":104,"line":1168},[102,146023,100870],{"class":1952},[102,146025,26284],{"class":161},[102,146027,146028,146030],{"class":104,"line":1183},[102,146029,119691],{"class":1952},[102,146031,26284],{"class":161},[19,146033,146034],{},"Fedora：",[93,146036,146038],{"className":23812,"code":146037,"language":23814,"meta":23,"style":23},"sudo dnf install python3 python3-pip\n",[99,146039,146040],{"__ignoreMap":23},[102,146041,146042,146044,146046,146048,146050],{"class":104,"line":105},[102,146043,24567],{"class":1952},[102,146045,26306],{"class":217},[102,146047,23824],{"class":217},[102,146049,104394],{"class":217},[102,146051,119756],{"class":217},[19,146053,146054,146055,146057],{},"Linux 上通常使用 ",[99,146056,100870],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146059,146061],{"id":146060},"_14-pip包管理器","1.4 pip包管理器",[19,146063,146064,146066],{},[99,146065,23821],{}," 用来安装第三方库。",[93,146068,146070],{"className":23812,"code":146069,"language":23814,"meta":23,"style":23},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[99,146071,146072,146081,146090,146098,146104],{"__ignoreMap":23},[102,146073,146074,146076,146078],{"class":104,"line":105},[102,146075,23821],{"class":1952},[102,146077,23824],{"class":217},[102,146079,146080],{"class":217}," requests\n",[102,146082,146083,146085,146088],{"class":104,"line":24},[102,146084,23821],{"class":1952},[102,146086,146087],{"class":217}," uninstall",[102,146089,146080],{"class":217},[102,146091,146092,146094,146096],{"class":104,"line":1168},[102,146093,23821],{"class":1952},[102,146095,117565],{"class":217},[102,146097,146080],{"class":217},[102,146099,146100,146102],{"class":104,"line":1183},[102,146101,23821],{"class":1952},[102,146103,118946],{"class":217},[102,146105,146106,146108],{"class":104,"line":1189},[102,146107,23821],{"class":1952},[102,146109,146110],{"class":217}," freeze\n",[19,146112,146113],{},"国内网络较慢时可以临时使用镜像：",[93,146115,146117],{"className":23812,"code":146116,"language":23814,"meta":23,"style":23},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[99,146118,146119],{"__ignoreMap":23},[102,146120,146121,146123,146125,146128,146130],{"class":104,"line":105},[102,146122,23821],{"class":1952},[102,146124,23824],{"class":217},[102,146126,146127],{"class":217}," requests",[102,146129,26421],{"class":161},[102,146131,119719],{"class":217},[19,146133,146134],{},"常见第三方库：",[250,146136,146137,146146],{},[253,146138,146139],{},[256,146140,146141,146144],{},[259,146142,146143],{},"库",[259,146145,102687],{},[297,146147,146148,146156,146163,146171,146179,146187,146195],{},[256,146149,146150,146153],{},[302,146151,146152],{},"requests",[302,146154,146155],{},"网络请求",[256,146157,146158,146160],{},[302,146159,100617],{},[302,146161,146162],{},"数值计算",[256,146164,146165,146168],{},[302,146166,146167],{},"pandas",[302,146169,146170],{},"表格数据处理",[256,146172,146173,146176],{},[302,146174,146175],{},"matplotlib",[302,146177,146178],{},"绘图",[256,146180,146181,146184],{},[302,146182,146183],{},"pyecharts",[302,146185,146186],{},"ECharts 图表",[256,146188,146189,146192],{},[302,146190,146191],{},"flask",[302,146193,146194],{},"Web 后端",[256,146196,146197,146200],{},[302,146198,146199],{},"pytest",[302,146201,146202],{},"自动化测试",[14,146204,146206],{"id":146205},"_15-虚拟环境","1.5 虚拟环境",[19,146208,146209,146210,146213],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[99,146211,146212],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146215,146216],{},"创建虚拟环境：",[93,146218,146220],{"className":23812,"code":146219,"language":23814,"meta":23,"style":23},"python -m venv .venv\n",[99,146221,146222],{"__ignoreMap":23},[102,146223,146224,146226,146228,146230],{"class":104,"line":105},[102,146225,30371],{"class":1952},[102,146227,100873],{"class":161},[102,146229,100876],{"class":217},[102,146231,100879],{"class":217},[19,146233,146234],{},"Windows 激活：",[93,146236,146238],{"className":23812,"code":146237,"language":23814,"meta":23,"style":23},".venv\\Scripts\\activate\n",[99,146239,146240],{"__ignoreMap":23},[102,146241,146242],{"class":104,"line":105},[102,146243,146237],{"class":1952},[19,146245,146246],{},"macOS\u002FLinux 激活：",[93,146248,146250],{"className":23812,"code":146249,"language":23814,"meta":23,"style":23},"source .venv\u002Fbin\u002Factivate\n",[99,146251,146252],{"__ignoreMap":23},[102,146253,146254,146256],{"class":104,"line":105},[102,146255,100884],{"class":161},[102,146257,100887],{"class":217},[19,146259,146260],{},"退出虚拟环境：",[93,146262,146264],{"className":23812,"code":146263,"language":23814,"meta":23,"style":23},"deactivate\n",[99,146265,146266],{"__ignoreMap":23},[102,146267,146268],{"class":104,"line":105},[102,146269,146263],{"class":1952},[19,146271,146272],{},"保存依赖：",[93,146274,146276],{"className":23812,"code":146275,"language":23814,"meta":23,"style":23},"pip freeze > requirements.txt\n",[99,146277,146278],{"__ignoreMap":23},[102,146279,146280,146282,146285,146287],{"class":104,"line":105},[102,146281,23821],{"class":1952},[102,146283,146284],{"class":217}," freeze",[102,146286,26213],{"class":108},[102,146288,146289],{"class":217}," requirements.txt\n",[19,146291,146292],{},"安装依赖：",[93,146294,146296],{"className":23812,"code":146295,"language":23814,"meta":23,"style":23},"pip install -r requirements.txt\n",[99,146297,146298],{"__ignoreMap":23},[102,146299,146300,146302,146304,146306],{"class":104,"line":105},[102,146301,23821],{"class":1952},[102,146303,23824],{"class":217},[102,146305,119630],{"class":161},[102,146307,146289],{"class":217},[14,146309,146311],{"id":146310},"_16-开发工具","1.6 开发工具",[73,146313,146315],{"id":146314},"_161-pycharm","1.6.1 PyCharm",[19,146317,146318],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146320,122053],{},[56,146322,146323,146326,146329,146335,146338],{},[59,146324,146325],{},"New Project：创建项目。",[59,146327,146328],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[59,146330,146331,146332,125965],{},"New Python File：创建 ",[99,146333,146334],{},".py",[59,146336,146337],{},"Run：运行当前文件。",[59,146339,146340],{},"Debug：断点调试。",[73,146342,146344],{"id":146343},"_162-vs-code","1.6.2 VS Code",[19,146346,146347],{},"VS Code 轻量，适合后续多语言开发。",[19,146349,146350],{},"建议安装插件：",[56,146352,146353,146356,146359],{},[59,146354,146355],{},"Python。",[59,146357,146358],{},"Pylance。",[59,146360,146361],{},"Jupyter。",[19,146363,146364],{},"选择解释器：",[93,146366,146369],{"className":146367,"code":146368,"language":5177,"meta":23},[5175],"Ctrl + Shift + P -> Python: Select Interpreter\n",[99,146370,146368],{"__ignoreMap":23},[14,146372,146374],{"id":146373},"_17-第一个python程序","1.7 第一个Python程序",[19,146376,146377,146378,24609],{},"创建文件 ",[99,146379,146380],{},"hello.py",[93,146382,146384],{"className":30369,"code":146383,"language":30371,"meta":23,"style":23},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[99,146385,146386,146397],{"__ignoreMap":23},[102,146387,146388,146390,146392,146395],{"class":104,"line":105},[102,146389,30406],{"class":161},[102,146391,113],{"class":112},[102,146393,146394],{"class":217},"\"Hello World\"",[102,146396,119],{"class":112},[102,146398,146399,146401,146403,146406],{"class":104,"line":24},[102,146400,30406],{"class":161},[102,146402,113],{"class":112},[102,146404,146405],{"class":217},"\"你好，Python\"",[102,146407,119],{"class":112},[19,146409,146410],{},"在终端运行：",[93,146412,146414],{"className":23812,"code":146413,"language":23814,"meta":23,"style":23},"python hello.py\n",[99,146415,146416],{"__ignoreMap":23},[102,146417,146418,146420],{"class":104,"line":105},[102,146419,30371],{"class":1952},[102,146421,146422],{"class":217}," hello.py\n",[19,146424,146425],{},"或：",[93,146427,146429],{"className":23812,"code":146428,"language":23814,"meta":23,"style":23},"python3 hello.py\n",[99,146430,146431],{"__ignoreMap":23},[102,146432,146433,146435],{"class":104,"line":105},[102,146434,100870],{"class":1952},[102,146436,146422],{"class":217},[19,146438,146439],{},"输出：",[93,146441,146444],{"className":146442,"code":146443,"language":5177,"meta":23},[5175],"Hello World\n你好，Python\n",[99,146445,146443],{"__ignoreMap":23},[14,146447,146449],{"id":146448},"_18-print函数","1.8 print函数",[19,146451,146452,146455],{},[99,146453,146454],{},"print()"," 用来输出内容。",[93,146457,146459],{"className":30369,"code":146458,"language":30371,"meta":23,"style":23},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[99,146460,146461,146471,146481,146491],{"__ignoreMap":23},[102,146462,146463,146465,146467,146469],{"class":104,"line":105},[102,146464,30406],{"class":161},[102,146466,113],{"class":112},[102,146468,5834],{"class":217},[102,146470,119],{"class":112},[102,146472,146473,146475,146477,146479],{"class":104,"line":24},[102,146474,30406],{"class":161},[102,146476,113],{"class":112},[102,146478,424],{"class":161},[102,146480,119],{"class":112},[102,146482,146483,146485,146487,146489],{"class":104,"line":1168},[102,146484,30406],{"class":161},[102,146486,113],{"class":112},[102,146488,162],{"class":161},[102,146490,119],{"class":112},[102,146492,146493,146495,146497,146500,146502,146504],{"class":104,"line":1183},[102,146494,30406],{"class":161},[102,146496,113],{"class":112},[102,146498,146499],{"class":217},"\"年龄:\"",[102,146501,12425],{"class":112},[102,146503,763],{"class":161},[102,146505,119],{"class":112},[19,146507,146508],{},"多个内容用逗号隔开，默认中间加空格：",[93,146510,146512],{"className":30369,"code":146511,"language":30371,"meta":23,"style":23},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[99,146513,146514,146524,146534],{"__ignoreMap":23},[102,146515,146516,146519,146521],{"class":104,"line":105},[102,146517,146518],{"class":112},"name ",[102,146520,158],{"class":108},[102,146522,146523],{"class":217}," \"张三\"\n",[102,146525,146526,146529,146531],{"class":104,"line":24},[102,146527,146528],{"class":112},"age ",[102,146530,158],{"class":108},[102,146532,146533],{"class":161}," 18\n",[102,146535,146536,146538,146540,146543,146546,146548],{"class":104,"line":1168},[102,146537,30406],{"class":161},[102,146539,113],{"class":112},[102,146541,146542],{"class":217},"\"姓名:\"",[102,146544,146545],{"class":112},", name, ",[102,146547,146499],{"class":217},[102,146549,146550],{"class":112},", age)\n",[19,146552,146553],{},"修改分隔符：",[93,146555,146557],{"className":30369,"code":146556,"language":30371,"meta":23,"style":23},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[99,146558,146559],{"__ignoreMap":23},[102,146560,146561,146563,146565,146568,146570,146572,146574,146576,146578,146581,146583,146585],{"class":104,"line":105},[102,146562,30406],{"class":161},[102,146564,113],{"class":112},[102,146566,146567],{"class":217},"\"2024\"",[102,146569,12425],{"class":112},[102,146571,54307],{"class":217},[102,146573,12425],{"class":112},[102,146575,54307],{"class":217},[102,146577,12425],{"class":112},[102,146579,146580],{"class":5206},"sep",[102,146582,158],{"class":108},[102,146584,32474],{"class":217},[102,146586,119],{"class":112},[19,146588,146589],{},"修改结尾符：",[93,146591,146593],{"className":30369,"code":146592,"language":30371,"meta":23,"style":23},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[99,146594,146595,146613],{"__ignoreMap":23},[102,146596,146597,146599,146601,146603,146605,146607,146609,146611],{"class":104,"line":105},[102,146598,30406],{"class":161},[102,146600,113],{"class":112},[102,146602,5834],{"class":217},[102,146604,12425],{"class":112},[102,146606,45792],{"class":5206},[102,146608,158],{"class":108},[102,146610,4348],{"class":217},[102,146612,119],{"class":112},[102,146614,146615,146617,146619,146622],{"class":104,"line":24},[102,146616,30406],{"class":161},[102,146618,113],{"class":112},[102,146620,146621],{"class":217},"\"python\"",[102,146623,119],{"class":112},[14,146625,146627],{"id":146626},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146629,146630],{},"交互运行适合临时验证：",[93,146632,146634],{"className":30369,"code":146633,"language":30371,"meta":23,"style":23},">>> 10 * 3\n30\n",[99,146635,146636,146646],{"__ignoreMap":23},[102,146637,146638,146640,146642,146644],{"class":104,"line":105},[102,146639,145835],{"class":108},[102,146641,2027],{"class":161},[102,146643,6508],{"class":108},[102,146645,120027],{"class":161},[102,146647,146648],{"class":104,"line":24},[102,146649,146650],{"class":161},"30\n",[19,146652,146653],{},"脚本运行适合保存程序：",[93,146655,146657],{"className":30369,"code":146656,"language":30371,"meta":23,"style":23},"price = 8\ncount = 5\nprint(price * count)\n",[99,146658,146659,146669,146678],{"__ignoreMap":23},[102,146660,146661,146664,146666],{"class":104,"line":105},[102,146662,146663],{"class":112},"price ",[102,146665,158],{"class":108},[102,146667,146668],{"class":161}," 8\n",[102,146670,146671,146674,146676],{"class":104,"line":24},[102,146672,146673],{"class":112},"count ",[102,146675,158],{"class":108},[102,146677,54418],{"class":161},[102,146679,146680,146682,146685,146687],{"class":104,"line":1168},[102,146681,30406],{"class":161},[102,146683,146684],{"class":112},"(price ",[102,146686,568],{"class":108},[102,146688,146689],{"class":112}," count)\n",[19,146691,146692],{},"实际学习中推荐：",[56,146694,146695,146698,146703],{},[59,146696,146697],{},"临时试一个语法，用交互模式。",[59,146699,146700,146701,125965],{},"写完整练习，用 ",[99,146702,146334],{},[59,146704,146705],{},"写项目，用独立目录和虚拟环境。",[14,146707,146709],{"id":146708},"_110-常见错误","1.10 常见错误",[73,146711,146713],{"id":146712},"_1101-命令找不到","1.10.1 命令找不到",[93,146715,146718],{"className":146716,"code":146717,"language":5177,"meta":23},[5175],"python: command not found\n",[99,146719,146717],{"__ignoreMap":23},[19,146721,146722],{},"原因：",[56,146724,146725,146728,146731],{},[59,146726,146727],{},"没安装 Python。",[59,146729,146730],{},"PATH 没配置。",[59,146732,146733,146734,28376],{},"Linux\u002FmacOS 应该使用 ",[99,146735,100870],{},[73,146737,146739],{"id":146738},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146741,146742],{},"不要把文件命名为：",[93,146744,146747],{"className":146745,"code":146746,"language":5177,"meta":23},[5175],"random.py\njson.py\ntime.py\nrequests.py\n",[99,146748,146746],{"__ignoreMap":23},[19,146750,146751],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[73,146753,146755],{"id":146754},"_1103-中文乱码","1.10.3 中文乱码",[19,146757,146758],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146760,146761],{},"如果读写文件出现乱码，要明确指定编码：",[93,146763,146765],{"className":30369,"code":146764,"language":30371,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[99,146766,146767,146801],{"__ignoreMap":23},[102,146768,146769,146771,146774,146776,146779,146781,146784,146786,146789,146791,146794,146796,146798],{"class":104,"line":105},[102,146770,107824],{"class":108},[102,146772,146773],{"class":161}," open",[102,146775,113],{"class":112},[102,146777,146778],{"class":217},"\"data.txt\"",[102,146780,12425],{"class":112},[102,146782,146783],{"class":217},"\"r\"",[102,146785,12425],{"class":112},[102,146787,146788],{"class":5206},"encoding",[102,146790,158],{"class":108},[102,146792,146793],{"class":217},"\"utf-8\"",[102,146795,13704],{"class":112},[102,146797,31374],{"class":108},[102,146799,146800],{"class":112}," f:\n",[102,146802,146803,146806,146808],{"class":104,"line":24},[102,146804,146805],{"class":112},"    content ",[102,146807,158],{"class":108},[102,146809,146810],{"class":112}," f.read()\n",[14,146812,146814],{"id":146813},"_111-本章练习","1.11 本章练习",[56,146816,146817,146820,146826],{},[59,146818,146819],{},"安装 Python，并在终端输出版本号。",[59,146821,146822,146823,146825],{},"新建 ",[99,146824,146380],{},"，输出自己的姓名、年龄、学习目标。",[59,146827,104357,146828,146830],{},[99,146829,146454],{}," 输出下面格式：",[93,146832,146835],{"className":146833,"code":146834,"language":5177,"meta":23},[5175],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[99,146836,146834],{"__ignoreMap":23},[56,146838,146839],{"start":1183},[59,146840,104357,146841,146843],{},[99,146842,146580],{}," 输出日期：",[93,146845,146848],{"className":146846,"code":146847,"language":5177,"meta":23},[5175],"2024-10-10\n",[99,146849,146847],{"__ignoreMap":23},[56,146851,146852],{"start":1189},[59,146853,104357,146854,146856,146857,146859],{},[99,146855,45792],{}," 让两次 ",[99,146858,146454],{}," 输出在同一行。",[5116,146861,146862],{},"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":23,"searchDepth":24,"depth":24,"links":146864},[146865,146866,146867,146872,146873,146874,146878,146879,146880,146881,146886],{"id":145747,"depth":24,"text":145748},{"id":145791,"depth":24,"text":145792},{"id":145892,"depth":24,"text":145893,"children":146868},[146869,146870,146871],{"id":145896,"depth":1168,"text":145897},{"id":145951,"depth":1168,"text":145952},{"id":145987,"depth":1168,"text":145988},{"id":146060,"depth":24,"text":146061},{"id":146205,"depth":24,"text":146206},{"id":146310,"depth":24,"text":146311,"children":146875},[146876,146877],{"id":146314,"depth":1168,"text":146315},{"id":146343,"depth":1168,"text":146344},{"id":146373,"depth":24,"text":146374},{"id":146448,"depth":24,"text":146449},{"id":146626,"depth":24,"text":146627},{"id":146708,"depth":24,"text":146709,"children":146882},[146883,146884,146885],{"id":146712,"depth":1168,"text":146713},{"id":146738,"depth":1168,"text":146739},{"id":146754,"depth":1168,"text":146755},{"id":146813,"depth":24,"text":146814},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145739,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146893,"title":146894,"body":146895,"description":27,"extension":28,"meta":149299,"navigation":30,"path":149300,"seo":149301,"stem":149302,"__hash__":149303},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146896,"toc":149284},[146897,146900,146904,146907,146910,146927,146930,146972,146975,146979,146982,146985,147022,147025,147059,147062,147154,147158,147172,147175,147202,147205,147209,147312,147319,147322,147339,147343,147350,147539,147542,147615,147619,147622,147706,147709,147741,147745,147949,147952,147956,147962,148064,148067,148323,148327,148330,148333,148347,148349,148535,148539,148901,148907,148911,148914,149038,149041,149220,149223,149227,149260,149264,149281],[10,146898,146894],{"id":146899},"_10-json与pyecharts折线图",[14,146901,146903],{"id":146902},"_101-数据可视化","10.1 数据可视化",[19,146905,146906],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,146908,146909],{},"常见图表：",[56,146911,146912,146915,146918,146921,146924],{},[59,146913,146914],{},"折线图：看趋势。",[59,146916,146917],{},"柱状图：看分类对比。",[59,146919,146920],{},"饼图：看占比。",[59,146922,146923],{},"地图：看地域分布。",[59,146925,146926],{},"散点图：看两个变量之间的关系。",[19,146928,146929],{},"Python 可视化常用库：",[250,146931,146932,146940],{},[253,146933,146934],{},[256,146935,146936,146938],{},[259,146937,146143],{},[259,146939,23730],{},[297,146941,146942,146949,146957,146964],{},[256,146943,146944,146946],{},[302,146945,146175],{},[302,146947,146948],{},"基础、经典、可定制",[256,146950,146951,146954],{},[302,146952,146953],{},"seaborn",[302,146955,146956],{},"统计图表更美观",[256,146958,146959,146961],{},[302,146960,146183],{},[302,146962,146963],{},"生成交互式网页图表",[256,146965,146966,146969],{},[302,146967,146968],{},"plotly",[302,146970,146971],{},"交互图表能力强",[19,146973,146974],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,146976,146978],{"id":146977},"_102-json回顾","10.2 JSON回顾",[19,146980,146981],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,146983,146984],{},"Python 字典：",[93,146986,146988],{"className":30369,"code":146987,"language":30371,"meta":23,"style":23},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[99,146989,146990,146998,147009,147018],{"__ignoreMap":23},[102,146991,146992,146994,146996],{"class":104,"line":105},[102,146993,101649],{"class":112},[102,146995,158],{"class":108},[102,146997,15562],{"class":112},[102,146999,147000,147003,147005,147007],{"class":104,"line":24},[102,147001,147002],{"class":217},"    \"name\"",[102,147004,51428],{"class":112},[102,147006,69260],{"class":217},[102,147008,31457],{"class":112},[102,147010,147011,147014,147016],{"class":104,"line":1168},[102,147012,147013],{"class":217},"    \"value\"",[102,147015,51428],{"class":112},[102,147017,97449],{"class":161},[102,147019,147020],{"class":104,"line":1183},[102,147021,1554],{"class":112},[19,147023,147024],{},"JSON 字符串：",[93,147026,147029],{"className":147027,"code":147028,"language":145774,"meta":23,"style":23},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[99,147030,147031,147035,147046,147055],{"__ignoreMap":23},[102,147032,147033],{"class":104,"line":105},[102,147034,1535],{"class":112},[102,147036,147037,147040,147042,147044],{"class":104,"line":24},[102,147038,147039],{"class":161},"  \"name\"",[102,147041,51428],{"class":112},[102,147043,69260],{"class":217},[102,147045,31457],{"class":112},[102,147047,147048,147051,147053],{"class":104,"line":1168},[102,147049,147050],{"class":161},"  \"value\"",[102,147052,51428],{"class":112},[102,147054,97449],{"class":161},[102,147056,147057],{"class":104,"line":1183},[102,147058,1554],{"class":112},[19,147060,147061],{},"Python 与 JSON 的转换：",[93,147063,147065],{"className":30369,"code":147064,"language":30371,"meta":23,"style":23},"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",[99,147066,147067,147074,147078,147103,147107,147126,147133,147137,147147],{"__ignoreMap":23},[102,147068,147069,147071],{"class":104,"line":105},[102,147070,30383],{"class":108},[102,147072,147073],{"class":112}," json\n",[102,147075,147076],{"class":104,"line":24},[102,147077,2389],{"emptyLinePlaceholder":30},[102,147079,147080,147082,147084,147086,147088,147090,147092,147094,147097,147099,147101],{"class":104,"line":1168},[102,147081,101649],{"class":112},[102,147083,158],{"class":108},[102,147085,4437],{"class":112},[102,147087,62670],{"class":217},[102,147089,51428],{"class":112},[102,147091,69260],{"class":217},[102,147093,12425],{"class":112},[102,147095,147096],{"class":217},"\"value\"",[102,147098,51428],{"class":112},[102,147100,424],{"class":161},[102,147102,1554],{"class":112},[102,147104,147105],{"class":104,"line":1183},[102,147106,2389],{"emptyLinePlaceholder":30},[102,147108,147109,147112,147114,147117,147120,147122,147124],{"class":104,"line":1189},[102,147110,147111],{"class":112},"json_text ",[102,147113,158],{"class":108},[102,147115,147116],{"class":112}," json.dumps(data, ",[102,147118,147119],{"class":5206},"ensure_ascii",[102,147121,158],{"class":108},[102,147123,33978],{"class":161},[102,147125,119],{"class":112},[102,147127,147128,147130],{"class":104,"line":1203},[102,147129,30406],{"class":161},[102,147131,147132],{"class":112},"(json_text)\n",[102,147134,147135],{"class":104,"line":1209},[102,147136,2389],{"emptyLinePlaceholder":30},[102,147138,147139,147142,147144],{"class":104,"line":1300},[102,147140,147141],{"class":112},"new_data ",[102,147143,158],{"class":108},[102,147145,147146],{"class":112}," json.loads(json_text)\n",[102,147148,147149,147151],{"class":104,"line":1306},[102,147150,30406],{"class":161},[102,147152,147153],{"class":112},"(new_data)\n",[14,147155,147157],{"id":147156},"_103-安装pyecharts","10.3 安装pyecharts",[93,147159,147161],{"className":23812,"code":147160,"language":23814,"meta":23,"style":23},"pip install pyecharts\n",[99,147162,147163],{"__ignoreMap":23},[102,147164,147165,147167,147169],{"class":104,"line":105},[102,147166,23821],{"class":1952},[102,147168,23824],{"class":217},[102,147170,147171],{"class":217}," pyecharts\n",[19,147173,147174],{},"验证：",[93,147176,147178],{"className":30369,"code":147177,"language":30371,"meta":23,"style":23},"import pyecharts\n\nprint(pyecharts.__version__)\n",[99,147179,147180,147186,147190],{"__ignoreMap":23},[102,147181,147182,147184],{"class":104,"line":105},[102,147183,30383],{"class":108},[102,147185,147171],{"class":112},[102,147187,147188],{"class":104,"line":24},[102,147189,2389],{"emptyLinePlaceholder":30},[102,147191,147192,147194,147197,147200],{"class":104,"line":1168},[102,147193,30406],{"class":161},[102,147195,147196],{"class":112},"(pyecharts.",[102,147198,147199],{"class":161},"__version__",[102,147201,119],{"class":112},[19,147203,147204],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147206,147208],{"id":147207},"_104-第一个折线图","10.4 第一个折线图",[93,147210,147212],{"className":30369,"code":147211,"language":30371,"meta":23,"style":23},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[99,147213,147214,147226,147230,147240,147270,147302],{"__ignoreMap":23},[102,147215,147216,147218,147221,147223],{"class":104,"line":105},[102,147217,30728],{"class":108},[102,147219,147220],{"class":112}," pyecharts.charts ",[102,147222,30383],{"class":108},[102,147224,147225],{"class":112}," Line\n",[102,147227,147228],{"class":104,"line":24},[102,147229,2389],{"emptyLinePlaceholder":30},[102,147231,147232,147235,147237],{"class":104,"line":1168},[102,147233,147234],{"class":112},"line ",[102,147236,158],{"class":108},[102,147238,147239],{"class":112}," Line()\n",[102,147241,147242,147245,147248,147250,147253,147255,147258,147260,147263,147265,147268],{"class":104,"line":1183},[102,147243,147244],{"class":112},"line.add_xaxis([",[102,147246,147247],{"class":217},"\"周一\"",[102,147249,12425],{"class":112},[102,147251,147252],{"class":217},"\"周二\"",[102,147254,12425],{"class":112},[102,147256,147257],{"class":217},"\"周三\"",[102,147259,12425],{"class":112},[102,147261,147262],{"class":217},"\"周四\"",[102,147264,12425],{"class":112},[102,147266,147267],{"class":217},"\"周五\"",[102,147269,4646],{"class":112},[102,147271,147272,147275,147278,147280,147282,147284,147286,147288,147290,147292,147295,147297,147300],{"class":104,"line":1189},[102,147273,147274],{"class":112},"line.add_yaxis(",[102,147276,147277],{"class":217},"\"销售额\"",[102,147279,77509],{"class":112},[102,147281,424],{"class":161},[102,147283,12425],{"class":112},[102,147285,930],{"class":161},[102,147287,12425],{"class":112},[102,147289,975],{"class":161},[102,147291,12425],{"class":112},[102,147293,147294],{"class":161},"150",[102,147296,12425],{"class":112},[102,147298,147299],{"class":161},"180",[102,147301,4646],{"class":112},[102,147303,147304,147307,147310],{"class":104,"line":1203},[102,147305,147306],{"class":112},"line.render(",[102,147308,147309],{"class":217},"\"line.html\"",[102,147311,119],{"class":112},[19,147313,147314,147315,147318],{},"运行后会生成 ",[99,147316,147317],{},"line.html","，用浏览器打开即可看到图表。",[19,147320,147321],{},"核心步骤：",[56,147323,147324,147327,147330,147333,147336],{},[59,147325,147326],{},"导入图表类。",[59,147328,147329],{},"创建图表对象。",[59,147331,147332],{},"添加 x 轴数据。",[59,147334,147335],{},"添加 y 轴数据。",[59,147337,147338],{},"渲染为 HTML。",[14,147340,147342],{"id":147341},"_105-全局配置","10.5 全局配置",[19,147344,147345,147346,147349],{},"常用配置在 ",[99,147347,147348],{},"pyecharts.options"," 中。",[93,147351,147353],{"className":30369,"code":147352,"language":30371,"meta":23,"style":23},"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",[99,147354,147355,147372,147382,147386,147394,147418,147446,147451,147470,147489,147507,147527,147531],{"__ignoreMap":23},[102,147356,147357,147359,147362,147364,147367,147369],{"class":104,"line":105},[102,147358,30728],{"class":108},[102,147360,147361],{"class":112}," pyecharts ",[102,147363,30383],{"class":108},[102,147365,147366],{"class":112}," options ",[102,147368,31374],{"class":108},[102,147370,147371],{"class":112}," opts\n",[102,147373,147374,147376,147378,147380],{"class":104,"line":24},[102,147375,30728],{"class":108},[102,147377,147220],{"class":112},[102,147379,30383],{"class":108},[102,147381,147225],{"class":112},[102,147383,147384],{"class":104,"line":1168},[102,147385,2389],{"emptyLinePlaceholder":30},[102,147387,147388,147390,147392],{"class":104,"line":1183},[102,147389,147234],{"class":112},[102,147391,158],{"class":108},[102,147393,147239],{"class":112},[102,147395,147396,147398,147400,147402,147404,147406,147408,147410,147412,147414,147416],{"class":104,"line":1189},[102,147397,147244],{"class":112},[102,147399,147247],{"class":217},[102,147401,12425],{"class":112},[102,147403,147252],{"class":217},[102,147405,12425],{"class":112},[102,147407,147257],{"class":217},[102,147409,12425],{"class":112},[102,147411,147262],{"class":217},[102,147413,12425],{"class":112},[102,147415,147267],{"class":217},[102,147417,4646],{"class":112},[102,147419,147420,147422,147424,147426,147428,147430,147432,147434,147436,147438,147440,147442,147444],{"class":104,"line":1203},[102,147421,147274],{"class":112},[102,147423,147277],{"class":217},[102,147425,77509],{"class":112},[102,147427,424],{"class":161},[102,147429,12425],{"class":112},[102,147431,930],{"class":161},[102,147433,12425],{"class":112},[102,147435,975],{"class":161},[102,147437,12425],{"class":112},[102,147439,147294],{"class":161},[102,147441,12425],{"class":112},[102,147443,147299],{"class":161},[102,147445,4646],{"class":112},[102,147447,147448],{"class":104,"line":1209},[102,147449,147450],{"class":112},"line.set_global_opts(\n",[102,147452,147453,147456,147458,147461,147463,147465,147468],{"class":104,"line":1300},[102,147454,147455],{"class":5206},"    title_opts",[102,147457,158],{"class":108},[102,147459,147460],{"class":112},"opts.TitleOpts(",[102,147462,51398],{"class":5206},[102,147464,158],{"class":108},[102,147466,147467],{"class":217},"\"一周销售额\"",[102,147469,38038],{"class":112},[102,147471,147472,147475,147477,147480,147482,147484,147487],{"class":104,"line":1306},[102,147473,147474],{"class":5206},"    xaxis_opts",[102,147476,158],{"class":108},[102,147478,147479],{"class":112},"opts.AxisOpts(",[102,147481,79801],{"class":5206},[102,147483,158],{"class":108},[102,147485,147486],{"class":217},"\"日期\"",[102,147488,38038],{"class":112},[102,147490,147491,147494,147496,147498,147500,147502,147505],{"class":104,"line":1318},[102,147492,147493],{"class":5206},"    yaxis_opts",[102,147495,158],{"class":108},[102,147497,147479],{"class":112},[102,147499,79801],{"class":5206},[102,147501,158],{"class":108},[102,147503,147504],{"class":217},"\"金额\"",[102,147506,38038],{"class":112},[102,147508,147509,147512,147514,147517,147520,147522,147525],{"class":104,"line":1601},[102,147510,147511],{"class":5206},"    tooltip_opts",[102,147513,158],{"class":108},[102,147515,147516],{"class":112},"opts.TooltipOpts(",[102,147518,147519],{"class":5206},"trigger",[102,147521,158],{"class":108},[102,147523,147524],{"class":217},"\"axis\"",[102,147526,38038],{"class":112},[102,147528,147529],{"class":104,"line":1606},[102,147530,119],{"class":112},[102,147532,147533,147535,147537],{"class":104,"line":1612},[102,147534,147306],{"class":112},[102,147536,147309],{"class":217},[102,147538,119],{"class":112},[19,147540,147541],{},"常见全局配置：",[250,147543,147544,147553],{},[253,147545,147546],{},[256,147547,147548,147551],{},[259,147549,147550],{},"配置",[259,147552,102687],{},[297,147554,147555,147565,147575,147585,147595,147605],{},[256,147556,147557,147562],{},[302,147558,147559],{},[99,147560,147561],{},"TitleOpts",[302,147563,147564],{},"标题",[256,147566,147567,147572],{},[302,147568,147569],{},[99,147570,147571],{},"LegendOpts",[302,147573,147574],{},"图例",[256,147576,147577,147582],{},[302,147578,147579],{},[99,147580,147581],{},"TooltipOpts",[302,147583,147584],{},"提示框",[256,147586,147587,147592],{},[302,147588,147589],{},[99,147590,147591],{},"AxisOpts",[302,147593,147594],{},"坐标轴",[256,147596,147597,147602],{},[302,147598,147599],{},[99,147600,147601],{},"VisualMapOpts",[302,147603,147604],{},"视觉映射",[256,147606,147607,147612],{},[302,147608,147609],{},[99,147610,147611],{},"DataZoomOpts",[302,147613,147614],{},"区域缩放",[14,147616,147618],{"id":147617},"_106-系列配置","10.6 系列配置",[19,147620,147621],{},"系列配置作用于某一组数据。",[93,147623,147625],{"className":30369,"code":147624,"language":30371,"meta":23,"style":23},"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",[99,147626,147627,147632,147643,147672,147683,147702],{"__ignoreMap":23},[102,147628,147629],{"class":104,"line":105},[102,147630,147631],{"class":112},"line.add_yaxis(\n",[102,147633,147634,147637,147639,147641],{"class":104,"line":24},[102,147635,147636],{"class":5206},"    series_name",[102,147638,158],{"class":108},[102,147640,147277],{"class":217},[102,147642,31457],{"class":112},[102,147644,147645,147648,147650,147652,147654,147656,147658,147660,147662,147664,147666,147668,147670],{"class":104,"line":1168},[102,147646,147647],{"class":5206},"    y_axis",[102,147649,158],{"class":108},[102,147651,1003],{"class":112},[102,147653,424],{"class":161},[102,147655,12425],{"class":112},[102,147657,930],{"class":161},[102,147659,12425],{"class":112},[102,147661,975],{"class":161},[102,147663,12425],{"class":112},[102,147665,147294],{"class":161},[102,147667,12425],{"class":112},[102,147669,147299],{"class":161},[102,147671,87827],{"class":112},[102,147673,147674,147677,147679,147681],{"class":104,"line":1183},[102,147675,147676],{"class":5206},"    is_smooth",[102,147678,158],{"class":108},[102,147680,31467],{"class":161},[102,147682,31457],{"class":112},[102,147684,147685,147688,147690,147693,147696,147698,147700],{"class":104,"line":1189},[102,147686,147687],{"class":5206},"    label_opts",[102,147689,158],{"class":108},[102,147691,147692],{"class":112},"opts.LabelOpts(",[102,147694,147695],{"class":5206},"is_show",[102,147697,158],{"class":108},[102,147699,31467],{"class":161},[102,147701,38038],{"class":112},[102,147703,147704],{"class":104,"line":1203},[102,147705,119],{"class":112},[19,147707,147708],{},"常用参数：",[56,147710,147711,147717,147723,147729,147735],{},[59,147712,147713,147716],{},[99,147714,147715],{},"series_name","：系列名称。",[59,147718,147719,147722],{},[99,147720,147721],{},"y_axis","：y 轴数据。",[59,147724,147725,147728],{},[99,147726,147727],{},"is_smooth","：是否平滑曲线。",[59,147730,147731,147734],{},[99,147732,147733],{},"label_opts","：标签配置。",[59,147736,147737,147740],{},[99,147738,147739],{},"symbol_size","：标记点大小。",[14,147742,147744],{"id":147743},"_107-多条折线","10.7 多条折线",[93,147746,147748],{"className":30369,"code":147747,"language":30371,"meta":23,"style":23},"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",[99,147749,147750,147764,147774,147778,147807,147811,147819,147824,147862,147899,147903,147920,147936,147940],{"__ignoreMap":23},[102,147751,147752,147754,147756,147758,147760,147762],{"class":104,"line":105},[102,147753,30728],{"class":108},[102,147755,147361],{"class":112},[102,147757,30383],{"class":108},[102,147759,147366],{"class":112},[102,147761,31374],{"class":108},[102,147763,147371],{"class":112},[102,147765,147766,147768,147770,147772],{"class":104,"line":24},[102,147767,30728],{"class":108},[102,147769,147220],{"class":112},[102,147771,30383],{"class":108},[102,147773,147225],{"class":112},[102,147775,147776],{"class":104,"line":1168},[102,147777,2389],{"emptyLinePlaceholder":30},[102,147779,147780,147783,147785,147787,147789,147791,147793,147795,147797,147799,147801,147803,147805],{"class":104,"line":1183},[102,147781,147782],{"class":112},"dates ",[102,147784,158],{"class":108},[102,147786,52217],{"class":112},[102,147788,147247],{"class":217},[102,147790,12425],{"class":112},[102,147792,147252],{"class":217},[102,147794,12425],{"class":112},[102,147796,147257],{"class":217},[102,147798,12425],{"class":112},[102,147800,147262],{"class":217},[102,147802,12425],{"class":112},[102,147804,147267],{"class":217},[102,147806,33237],{"class":112},[102,147808,147809],{"class":104,"line":1189},[102,147810,2389],{"emptyLinePlaceholder":30},[102,147812,147813,147815,147817],{"class":104,"line":1203},[102,147814,147234],{"class":112},[102,147816,158],{"class":108},[102,147818,147239],{"class":112},[102,147820,147821],{"class":104,"line":1209},[102,147822,147823],{"class":112},"line.add_xaxis(dates)\n",[102,147825,147826,147828,147831,147833,147835,147837,147840,147842,147844,147846,147848,147850,147852,147854,147856,147858,147860],{"class":104,"line":1300},[102,147827,147274],{"class":112},[102,147829,147830],{"class":217},"\"线上销售\"",[102,147832,77509],{"class":112},[102,147834,424],{"class":161},[102,147836,12425],{"class":112},[102,147838,147839],{"class":161},"130",[102,147841,12425],{"class":112},[102,147843,930],{"class":161},[102,147845,12425],{"class":112},[102,147847,21038],{"class":161},[102,147849,12425],{"class":112},[102,147851,1711],{"class":161},[102,147853,112193],{"class":112},[102,147855,147727],{"class":5206},[102,147857,158],{"class":108},[102,147859,31467],{"class":161},[102,147861,119],{"class":112},[102,147863,147864,147866,147869,147871,147873,147875,147877,147879,147881,147883,147885,147887,147889,147891,147893,147895,147897],{"class":104,"line":1306},[102,147865,147274],{"class":112},[102,147867,147868],{"class":217},"\"线下销售\"",[102,147870,77509],{"class":112},[102,147872,725],{"class":161},[102,147874,12425],{"class":112},[102,147876,975],{"class":161},[102,147878,12425],{"class":112},[102,147880,424],{"class":161},[102,147882,12425],{"class":112},[102,147884,930],{"class":161},[102,147886,12425],{"class":112},[102,147888,147294],{"class":161},[102,147890,112193],{"class":112},[102,147892,147727],{"class":5206},[102,147894,158],{"class":108},[102,147896,31467],{"class":161},[102,147898,119],{"class":112},[102,147900,147901],{"class":104,"line":1318},[102,147902,147450],{"class":112},[102,147904,147905,147907,147909,147911,147913,147915,147918],{"class":104,"line":1601},[102,147906,147455],{"class":5206},[102,147908,158],{"class":108},[102,147910,147460],{"class":112},[102,147912,51398],{"class":5206},[102,147914,158],{"class":108},[102,147916,147917],{"class":217},"\"线上线下销售趋势\"",[102,147919,38038],{"class":112},[102,147921,147922,147924,147926,147928,147930,147932,147934],{"class":104,"line":1606},[102,147923,147511],{"class":5206},[102,147925,158],{"class":108},[102,147927,147516],{"class":112},[102,147929,147519],{"class":5206},[102,147931,158],{"class":108},[102,147933,147524],{"class":217},[102,147935,38038],{"class":112},[102,147937,147938],{"class":104,"line":1612},[102,147939,119],{"class":112},[102,147941,147942,147944,147947],{"class":104,"line":1617},[102,147943,147306],{"class":112},[102,147945,147946],{"class":217},"\"sales.html\"",[102,147948,119],{"class":112},[19,147950,147951],{},"多条折线适合比较不同指标或不同地区。",[14,147953,147955],{"id":147954},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,147957,147958,147959,24609],{},"假设 ",[99,147960,147961],{},"sales.json",[93,147963,147965],{"className":147027,"code":147964,"language":145774,"meta":23,"style":23},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[99,147966,147967,147972,148004,148032,148060],{"__ignoreMap":23},[102,147968,147969],{"class":104,"line":105},[102,147970,147971],{"class":112},"[\n",[102,147973,147974,147977,147980,147982,147984,147986,147989,147991,147993,147995,147998,148000,148002],{"class":104,"line":24},[102,147975,147976],{"class":112},"  {",[102,147978,147979],{"class":161},"\"date\"",[102,147981,51428],{"class":112},[102,147983,147247],{"class":217},[102,147985,12425],{"class":112},[102,147987,147988],{"class":161},"\"online\"",[102,147990,51428],{"class":112},[102,147992,424],{"class":161},[102,147994,12425],{"class":112},[102,147996,147997],{"class":161},"\"offline\"",[102,147999,51428],{"class":112},[102,148001,725],{"class":161},[102,148003,4919],{"class":112},[102,148005,148006,148008,148010,148012,148014,148016,148018,148020,148022,148024,148026,148028,148030],{"class":104,"line":1168},[102,148007,147976],{"class":112},[102,148009,147979],{"class":161},[102,148011,51428],{"class":112},[102,148013,147252],{"class":217},[102,148015,12425],{"class":112},[102,148017,147988],{"class":161},[102,148019,51428],{"class":112},[102,148021,147839],{"class":161},[102,148023,12425],{"class":112},[102,148025,147997],{"class":161},[102,148027,51428],{"class":112},[102,148029,975],{"class":161},[102,148031,4919],{"class":112},[102,148033,148034,148036,148038,148040,148042,148044,148046,148048,148050,148052,148054,148056,148058],{"class":104,"line":1183},[102,148035,147976],{"class":112},[102,148037,147979],{"class":161},[102,148039,51428],{"class":112},[102,148041,147257],{"class":217},[102,148043,12425],{"class":112},[102,148045,147988],{"class":161},[102,148047,51428],{"class":112},[102,148049,930],{"class":161},[102,148051,12425],{"class":112},[102,148053,147997],{"class":161},[102,148055,51428],{"class":112},[102,148057,424],{"class":161},[102,148059,1554],{"class":112},[102,148061,148062],{"class":104,"line":1189},[102,148063,33237],{"class":112},[19,148065,148066],{},"读取并绘图：",[93,148068,148070],{"className":30369,"code":148069,"language":30371,"meta":23,"style":23},"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",[99,148071,148072,148078,148092,148102,148106,148138,148151,148155,148163,148172,148181,148185,148197,148206,148215,148224,148228,148236,148240,148257,148274,148278,148295,148311,148315],{"__ignoreMap":23},[102,148073,148074,148076],{"class":104,"line":105},[102,148075,30383],{"class":108},[102,148077,147073],{"class":112},[102,148079,148080,148082,148084,148086,148088,148090],{"class":104,"line":24},[102,148081,30728],{"class":108},[102,148083,147361],{"class":112},[102,148085,30383],{"class":108},[102,148087,147366],{"class":112},[102,148089,31374],{"class":108},[102,148091,147371],{"class":112},[102,148093,148094,148096,148098,148100],{"class":104,"line":1168},[102,148095,30728],{"class":108},[102,148097,147220],{"class":112},[102,148099,30383],{"class":108},[102,148101,147225],{"class":112},[102,148103,148104],{"class":104,"line":1183},[102,148105,2389],{"emptyLinePlaceholder":30},[102,148107,148108,148110,148112,148114,148117,148119,148121,148123,148125,148127,148129,148131,148133,148136],{"class":104,"line":1189},[102,148109,107824],{"class":108},[102,148111,146773],{"class":161},[102,148113,113],{"class":112},[102,148115,148116],{"class":217},"\"sales.json\"",[102,148118,12425],{"class":112},[102,148120,146783],{"class":217},[102,148122,12425],{"class":112},[102,148124,146788],{"class":5206},[102,148126,158],{"class":108},[102,148128,146793],{"class":217},[102,148130,13704],{"class":112},[102,148132,31374],{"class":108},[102,148134,148135],{"class":5206}," file",[102,148137,3728],{"class":112},[102,148139,148140,148142,148144,148147,148149],{"class":104,"line":1203},[102,148141,101412],{"class":112},[102,148143,158],{"class":108},[102,148145,148146],{"class":112}," json.load(",[102,148148,45345],{"class":5206},[102,148150,119],{"class":112},[102,148152,148153],{"class":104,"line":1209},[102,148154,2389],{"emptyLinePlaceholder":30},[102,148156,148157,148159,148161],{"class":104,"line":1300},[102,148158,147782],{"class":112},[102,148160,158],{"class":108},[102,148162,51829],{"class":112},[102,148164,148165,148168,148170],{"class":104,"line":1306},[102,148166,148167],{"class":112},"online_sales ",[102,148169,158],{"class":108},[102,148171,51829],{"class":112},[102,148173,148174,148177,148179],{"class":104,"line":1318},[102,148175,148176],{"class":112},"offline_sales ",[102,148178,158],{"class":108},[102,148180,51829],{"class":112},[102,148182,148183],{"class":104,"line":1601},[102,148184,2389],{"emptyLinePlaceholder":30},[102,148186,148187,148189,148192,148194],{"class":104,"line":1606},[102,148188,3014],{"class":108},[102,148190,148191],{"class":112}," item ",[102,148193,26034],{"class":108},[102,148195,148196],{"class":112}," data:\n",[102,148198,148199,148202,148204],{"class":104,"line":1612},[102,148200,148201],{"class":112},"    dates.append(item[",[102,148203,147979],{"class":217},[102,148205,4646],{"class":112},[102,148207,148208,148211,148213],{"class":104,"line":1617},[102,148209,148210],{"class":112},"    online_sales.append(item[",[102,148212,147988],{"class":217},[102,148214,4646],{"class":112},[102,148216,148217,148220,148222],{"class":104,"line":1631},[102,148218,148219],{"class":112},"    offline_sales.append(item[",[102,148221,147997],{"class":217},[102,148223,4646],{"class":112},[102,148225,148226],{"class":104,"line":1636},[102,148227,2389],{"emptyLinePlaceholder":30},[102,148229,148230,148232,148234],{"class":104,"line":1642},[102,148231,147234],{"class":112},[102,148233,158],{"class":108},[102,148235,147239],{"class":112},[102,148237,148238],{"class":104,"line":1663},[102,148239,147823],{"class":112},[102,148241,148242,148244,148246,148249,148251,148253,148255],{"class":104,"line":1668},[102,148243,147274],{"class":112},[102,148245,147830],{"class":217},[102,148247,148248],{"class":112},", online_sales, ",[102,148250,147727],{"class":5206},[102,148252,158],{"class":108},[102,148254,31467],{"class":161},[102,148256,119],{"class":112},[102,148258,148259,148261,148263,148266,148268,148270,148272],{"class":104,"line":1682},[102,148260,147274],{"class":112},[102,148262,147868],{"class":217},[102,148264,148265],{"class":112},", offline_sales, ",[102,148267,147727],{"class":5206},[102,148269,158],{"class":108},[102,148271,31467],{"class":161},[102,148273,119],{"class":112},[102,148275,148276],{"class":104,"line":1687},[102,148277,147450],{"class":112},[102,148279,148280,148282,148284,148286,148288,148290,148293],{"class":104,"line":1716},[102,148281,147455],{"class":5206},[102,148283,158],{"class":108},[102,148285,147460],{"class":112},[102,148287,51398],{"class":5206},[102,148289,158],{"class":108},[102,148291,148292],{"class":217},"\"销售趋势\"",[102,148294,38038],{"class":112},[102,148296,148297,148299,148301,148303,148305,148307,148309],{"class":104,"line":1721},[102,148298,147511],{"class":5206},[102,148300,158],{"class":108},[102,148302,147516],{"class":112},[102,148304,147519],{"class":5206},[102,148306,158],{"class":108},[102,148308,147524],{"class":217},[102,148310,38038],{"class":112},[102,148312,148313],{"class":104,"line":1738},[102,148314,119],{"class":112},[102,148316,148317,148319,148321],{"class":104,"line":1743},[102,148318,147306],{"class":112},[102,148320,147946],{"class":217},[102,148322,119],{"class":112},[14,148324,148326],{"id":148325},"_109-数据清洗","10.9 数据清洗",[19,148328,148329],{},"真实数据经常不整齐，需要清洗。",[19,148331,148332],{},"常见问题：",[56,148334,148335,148338,148341,148344],{},[59,148336,148337],{},"数字是字符串。",[59,148339,148340],{},"字段缺失。",[59,148342,148343],{},"空值。",[59,148345,148346],{},"日期格式不统一。",[19,148348,15125],{},[93,148350,148352],{"className":30369,"code":148351,"language":30371,"meta":23,"style":23},"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",[99,148353,148354,148363,148386,148406,148427,148431,148435,148443,148452,148456,148467,148481,148490,148495,148499,148507,148517,148521,148528],{"__ignoreMap":23},[102,148355,148356,148359,148361],{"class":104,"line":105},[102,148357,148358],{"class":112},"raw_data ",[102,148360,158],{"class":108},[102,148362,55438],{"class":112},[102,148364,148365,148368,148370,148372,148374,148376,148379,148381,148384],{"class":104,"line":24},[102,148366,148367],{"class":112},"    {",[102,148369,147979],{"class":217},[102,148371,51428],{"class":112},[102,148373,147247],{"class":217},[102,148375,12425],{"class":112},[102,148377,148378],{"class":217},"\"sales\"",[102,148380,51428],{"class":112},[102,148382,148383],{"class":217},"\"100\"",[102,148385,4919],{"class":112},[102,148387,148388,148390,148392,148394,148396,148398,148400,148402,148404],{"class":104,"line":1168},[102,148389,148367],{"class":112},[102,148391,147979],{"class":217},[102,148393,51428],{"class":112},[102,148395,147252],{"class":217},[102,148397,12425],{"class":112},[102,148399,148378],{"class":217},[102,148401,51428],{"class":112},[102,148403,7642],{"class":217},[102,148405,4919],{"class":112},[102,148407,148408,148410,148412,148414,148416,148418,148420,148422,148425],{"class":104,"line":1183},[102,148409,148367],{"class":112},[102,148411,147979],{"class":217},[102,148413,51428],{"class":112},[102,148415,147257],{"class":217},[102,148417,12425],{"class":112},[102,148419,148378],{"class":217},[102,148421,51428],{"class":112},[102,148423,148424],{"class":217},"\"120\"",[102,148426,4919],{"class":112},[102,148428,148429],{"class":104,"line":1189},[102,148430,33237],{"class":112},[102,148432,148433],{"class":104,"line":1203},[102,148434,2389],{"emptyLinePlaceholder":30},[102,148436,148437,148439,148441],{"class":104,"line":1209},[102,148438,147782],{"class":112},[102,148440,158],{"class":108},[102,148442,51829],{"class":112},[102,148444,148445,148448,148450],{"class":104,"line":1300},[102,148446,148447],{"class":112},"sales ",[102,148449,158],{"class":108},[102,148451,51829],{"class":112},[102,148453,148454],{"class":104,"line":1306},[102,148455,2389],{"emptyLinePlaceholder":30},[102,148457,148458,148460,148462,148464],{"class":104,"line":1318},[102,148459,3014],{"class":108},[102,148461,148191],{"class":112},[102,148463,26034],{"class":108},[102,148465,148466],{"class":112}," raw_data:\n",[102,148468,148469,148472,148474,148477,148479],{"class":104,"line":1601},[102,148470,148471],{"class":112},"    value ",[102,148473,158],{"class":108},[102,148475,148476],{"class":112}," item.get(",[102,148478,148378],{"class":217},[102,148480,119],{"class":112},[102,148482,148483,148485,148487],{"class":104,"line":1606},[102,148484,3090],{"class":108},[102,148486,38921],{"class":108},[102,148488,148489],{"class":112}," value:\n",[102,148491,148492],{"class":104,"line":1612},[102,148493,148494],{"class":108},"        continue\n",[102,148496,148497],{"class":104,"line":1617},[102,148498,2389],{"emptyLinePlaceholder":30},[102,148500,148501,148503,148505],{"class":104,"line":1631},[102,148502,148201],{"class":112},[102,148504,147979],{"class":217},[102,148506,4646],{"class":112},[102,148508,148509,148512,148514],{"class":104,"line":1636},[102,148510,148511],{"class":112},"    sales.append(",[102,148513,116],{"class":161},[102,148515,148516],{"class":112},"(value))\n",[102,148518,148519],{"class":104,"line":1642},[102,148520,2389],{"emptyLinePlaceholder":30},[102,148522,148523,148525],{"class":104,"line":1663},[102,148524,30406],{"class":161},[102,148526,148527],{"class":112},"(dates)\n",[102,148529,148530,148532],{"class":104,"line":1668},[102,148531,30406],{"class":161},[102,148533,148534],{"class":112},"(sales)\n",[14,148536,148538],{"id":148537},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[93,148540,148542],{"className":30369,"code":148541,"language":30371,"meta":23,"style":23},"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",[99,148543,148544,148558,148568,148572,148580,148601,148623,148645,148667,148689,148693,148697,148719,148740,148744,148752,148756,148760,148770,148779,148789,148805,148809,148813,148830,148846,148862,148878,148888,148892],{"__ignoreMap":23},[102,148545,148546,148548,148550,148552,148554,148556],{"class":104,"line":105},[102,148547,30728],{"class":108},[102,148549,147361],{"class":112},[102,148551,30383],{"class":108},[102,148553,147366],{"class":112},[102,148555,31374],{"class":108},[102,148557,147371],{"class":112},[102,148559,148560,148562,148564,148566],{"class":104,"line":24},[102,148561,30728],{"class":108},[102,148563,147220],{"class":112},[102,148565,30383],{"class":108},[102,148567,147225],{"class":112},[102,148569,148570],{"class":104,"line":1168},[102,148571,2389],{"emptyLinePlaceholder":30},[102,148573,148574,148576,148578],{"class":104,"line":1183},[102,148575,148447],{"class":112},[102,148577,158],{"class":108},[102,148579,55438],{"class":112},[102,148581,148582,148584,148586,148588,148591,148593,148595,148597,148599],{"class":104,"line":1189},[102,148583,148367],{"class":112},[102,148585,147979],{"class":217},[102,148587,51428],{"class":112},[102,148589,148590],{"class":217},"\"2024-10-01\"",[102,148592,12425],{"class":112},[102,148594,84075],{"class":217},[102,148596,51428],{"class":112},[102,148598,92014],{"class":161},[102,148600,4919],{"class":112},[102,148602,148603,148605,148607,148609,148612,148614,148616,148618,148621],{"class":104,"line":1203},[102,148604,148367],{"class":112},[102,148606,147979],{"class":217},[102,148608,51428],{"class":112},[102,148610,148611],{"class":217},"\"2024-10-02\"",[102,148613,12425],{"class":112},[102,148615,84075],{"class":217},[102,148617,51428],{"class":112},[102,148619,148620],{"class":161},"1800",[102,148622,4919],{"class":112},[102,148624,148625,148627,148629,148631,148634,148636,148638,148640,148643],{"class":104,"line":1209},[102,148626,148367],{"class":112},[102,148628,147979],{"class":217},[102,148630,51428],{"class":112},[102,148632,148633],{"class":217},"\"2024-10-03\"",[102,148635,12425],{"class":112},[102,148637,84075],{"class":217},[102,148639,51428],{"class":112},[102,148641,148642],{"class":161},"1500",[102,148644,4919],{"class":112},[102,148646,148647,148649,148651,148653,148656,148658,148660,148662,148665],{"class":104,"line":1300},[102,148648,148367],{"class":112},[102,148650,147979],{"class":217},[102,148652,51428],{"class":112},[102,148654,148655],{"class":217},"\"2024-10-04\"",[102,148657,12425],{"class":112},[102,148659,84075],{"class":217},[102,148661,51428],{"class":112},[102,148663,148664],{"class":161},"2100",[102,148666,4919],{"class":112},[102,148668,148669,148671,148673,148675,148678,148680,148682,148684,148687],{"class":104,"line":1306},[102,148670,148367],{"class":112},[102,148672,147979],{"class":217},[102,148674,51428],{"class":112},[102,148676,148677],{"class":217},"\"2024-10-05\"",[102,148679,12425],{"class":112},[102,148681,84075],{"class":217},[102,148683,51428],{"class":112},[102,148685,148686],{"class":161},"2600",[102,148688,4919],{"class":112},[102,148690,148691],{"class":104,"line":1318},[102,148692,33237],{"class":112},[102,148694,148695],{"class":104,"line":1601},[102,148696,2389],{"emptyLinePlaceholder":30},[102,148698,148699,148701,148703,148706,148708,148710,148712,148714,148716],{"class":104,"line":1606},[102,148700,147782],{"class":112},[102,148702,158],{"class":108},[102,148704,148705],{"class":112}," [item[",[102,148707,147979],{"class":217},[102,148709,4432],{"class":112},[102,148711,3014],{"class":108},[102,148713,148191],{"class":112},[102,148715,26034],{"class":108},[102,148717,148718],{"class":112}," sales]\n",[102,148720,148721,148724,148726,148728,148730,148732,148734,148736,148738],{"class":104,"line":1612},[102,148722,148723],{"class":112},"amounts ",[102,148725,158],{"class":108},[102,148727,148705],{"class":112},[102,148729,84075],{"class":217},[102,148731,4432],{"class":112},[102,148733,3014],{"class":108},[102,148735,148191],{"class":112},[102,148737,26034],{"class":108},[102,148739,148718],{"class":112},[102,148741,148742],{"class":104,"line":1617},[102,148743,2389],{"emptyLinePlaceholder":30},[102,148745,148746,148748,148750],{"class":104,"line":1631},[102,148747,147234],{"class":112},[102,148749,158],{"class":108},[102,148751,147239],{"class":112},[102,148753,148754],{"class":104,"line":1636},[102,148755,147823],{"class":112},[102,148757,148758],{"class":104,"line":1642},[102,148759,147631],{"class":112},[102,148761,148762,148764,148766,148768],{"class":104,"line":1663},[102,148763,147636],{"class":5206},[102,148765,158],{"class":108},[102,148767,147277],{"class":217},[102,148769,31457],{"class":112},[102,148771,148772,148774,148776],{"class":104,"line":1668},[102,148773,147647],{"class":5206},[102,148775,158],{"class":108},[102,148777,148778],{"class":112},"amounts,\n",[102,148780,148781,148783,148785,148787],{"class":104,"line":1682},[102,148782,147676],{"class":5206},[102,148784,158],{"class":108},[102,148786,31467],{"class":161},[102,148788,31457],{"class":112},[102,148790,148791,148793,148795,148797,148799,148801,148803],{"class":104,"line":1687},[102,148792,147687],{"class":5206},[102,148794,158],{"class":108},[102,148796,147692],{"class":112},[102,148798,147695],{"class":5206},[102,148800,158],{"class":108},[102,148802,31467],{"class":161},[102,148804,38038],{"class":112},[102,148806,148807],{"class":104,"line":1716},[102,148808,119],{"class":112},[102,148810,148811],{"class":104,"line":1721},[102,148812,147450],{"class":112},[102,148814,148815,148817,148819,148821,148823,148825,148828],{"class":104,"line":1738},[102,148816,147455],{"class":5206},[102,148818,158],{"class":108},[102,148820,147460],{"class":112},[102,148822,51398],{"class":5206},[102,148824,158],{"class":108},[102,148826,148827],{"class":217},"\"每日销售额\"",[102,148829,38038],{"class":112},[102,148831,148832,148834,148836,148838,148840,148842,148844],{"class":104,"line":1743},[102,148833,147474],{"class":5206},[102,148835,158],{"class":108},[102,148837,147479],{"class":112},[102,148839,79801],{"class":5206},[102,148841,158],{"class":108},[102,148843,147486],{"class":217},[102,148845,38038],{"class":112},[102,148847,148848,148850,148852,148854,148856,148858,148860],{"class":104,"line":1748},[102,148849,147493],{"class":5206},[102,148851,158],{"class":108},[102,148853,147479],{"class":112},[102,148855,79801],{"class":5206},[102,148857,158],{"class":108},[102,148859,147504],{"class":217},[102,148861,38038],{"class":112},[102,148863,148864,148866,148868,148870,148872,148874,148876],{"class":104,"line":1753},[102,148865,147511],{"class":5206},[102,148867,158],{"class":108},[102,148869,147516],{"class":112},[102,148871,147519],{"class":5206},[102,148873,158],{"class":108},[102,148875,147524],{"class":217},[102,148877,38038],{"class":112},[102,148879,148880,148883,148885],{"class":104,"line":1767},[102,148881,148882],{"class":5206},"    datazoom_opts",[102,148884,158],{"class":108},[102,148886,148887],{"class":112},"[opts.DataZoomOpts()],\n",[102,148889,148890],{"class":104,"line":1772},[102,148891,119],{"class":112},[102,148893,148894,148896,148899],{"class":104,"line":2566},[102,148895,147306],{"class":112},[102,148897,148898],{"class":217},"\"daily_sales.html\"",[102,148900,119],{"class":112},[19,148902,148903,148906],{},[99,148904,148905],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,148908,148910],{"id":148909},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,148912,148913],{},"如果数据结构如下：",[93,148915,148917],{"className":30369,"code":148916,"language":30371,"meta":23,"style":23},"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",[99,148918,148919,148927,148935,148957,148978,148983,148990,149010,149030,149034],{"__ignoreMap":23},[102,148920,148921,148923,148925],{"class":104,"line":105},[102,148922,101649],{"class":112},[102,148924,158],{"class":108},[102,148926,15562],{"class":112},[102,148928,148929,148932],{"class":104,"line":24},[102,148930,148931],{"class":217},"    \"北京\"",[102,148933,148934],{"class":112},": [\n",[102,148936,148937,148939,148941,148943,148946,148948,148951,148953,148955],{"class":104,"line":1168},[102,148938,4906],{"class":112},[102,148940,147979],{"class":217},[102,148942,51428],{"class":112},[102,148944,148945],{"class":217},"\"2024-01-01\"",[102,148947,12425],{"class":112},[102,148949,148950],{"class":217},"\"confirm\"",[102,148952,51428],{"class":112},[102,148954,559],{"class":161},[102,148956,4919],{"class":112},[102,148958,148959,148961,148963,148965,148968,148970,148972,148974,148976],{"class":104,"line":1183},[102,148960,4906],{"class":112},[102,148962,147979],{"class":217},[102,148964,51428],{"class":112},[102,148966,148967],{"class":217},"\"2024-01-02\"",[102,148969,12425],{"class":112},[102,148971,148950],{"class":217},[102,148973,51428],{"class":112},[102,148975,611],{"class":161},[102,148977,4919],{"class":112},[102,148979,148980],{"class":104,"line":1189},[102,148981,148982],{"class":112},"    ],\n",[102,148984,148985,148988],{"class":104,"line":1203},[102,148986,148987],{"class":217},"    \"上海\"",[102,148989,148934],{"class":112},[102,148991,148992,148994,148996,148998,149000,149002,149004,149006,149008],{"class":104,"line":1209},[102,148993,4906],{"class":112},[102,148995,147979],{"class":217},[102,148997,51428],{"class":112},[102,148999,148945],{"class":217},[102,149001,12425],{"class":112},[102,149003,148950],{"class":217},[102,149005,51428],{"class":112},[102,149007,508],{"class":161},[102,149009,4919],{"class":112},[102,149011,149012,149014,149016,149018,149020,149022,149024,149026,149028],{"class":104,"line":1300},[102,149013,4906],{"class":112},[102,149015,147979],{"class":217},[102,149017,51428],{"class":112},[102,149019,148967],{"class":217},[102,149021,12425],{"class":112},[102,149023,148950],{"class":217},[102,149025,51428],{"class":112},[102,149027,636],{"class":161},[102,149029,4919],{"class":112},[102,149031,149032],{"class":104,"line":1306},[102,149033,148982],{"class":112},[102,149035,149036],{"class":104,"line":1318},[102,149037,1554],{"class":112},[19,149039,149040],{},"绘制多地区趋势：",[93,149042,149044],{"className":30369,"code":149043,"language":30371,"meta":23,"style":23},"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",[99,149045,149046,149060,149070,149074,149099,149103,149111,149115,149119,149131,149153,149166,149170,149174,149191,149207,149211],{"__ignoreMap":23},[102,149047,149048,149050,149052,149054,149056,149058],{"class":104,"line":105},[102,149049,30728],{"class":108},[102,149051,147361],{"class":112},[102,149053,30383],{"class":108},[102,149055,147366],{"class":112},[102,149057,31374],{"class":108},[102,149059,147371],{"class":112},[102,149061,149062,149064,149066,149068],{"class":104,"line":24},[102,149063,30728],{"class":108},[102,149065,147220],{"class":112},[102,149067,30383],{"class":108},[102,149069,147225],{"class":112},[102,149071,149072],{"class":104,"line":1168},[102,149073,2389],{"emptyLinePlaceholder":30},[102,149075,149076,149078,149080,149082,149084,149086,149088,149090,149092,149095,149097],{"class":104,"line":1183},[102,149077,147782],{"class":112},[102,149079,158],{"class":108},[102,149081,148705],{"class":112},[102,149083,147979],{"class":217},[102,149085,4432],{"class":112},[102,149087,3014],{"class":108},[102,149089,148191],{"class":112},[102,149091,26034],{"class":108},[102,149093,149094],{"class":112}," data[",[102,149096,69260],{"class":217},[102,149098,77518],{"class":112},[102,149100,149101],{"class":104,"line":1189},[102,149102,2389],{"emptyLinePlaceholder":30},[102,149104,149105,149107,149109],{"class":104,"line":1203},[102,149106,147234],{"class":112},[102,149108,158],{"class":108},[102,149110,147239],{"class":112},[102,149112,149113],{"class":104,"line":1209},[102,149114,147823],{"class":112},[102,149116,149117],{"class":104,"line":1300},[102,149118,2389],{"emptyLinePlaceholder":30},[102,149120,149121,149123,149126,149128],{"class":104,"line":1306},[102,149122,3014],{"class":108},[102,149124,149125],{"class":112}," city, records ",[102,149127,26034],{"class":108},[102,149129,149130],{"class":112}," data.items():\n",[102,149132,149133,149136,149138,149140,149142,149144,149146,149148,149150],{"class":104,"line":1318},[102,149134,149135],{"class":112},"    values ",[102,149137,158],{"class":108},[102,149139,148705],{"class":112},[102,149141,148950],{"class":217},[102,149143,4432],{"class":112},[102,149145,3014],{"class":108},[102,149147,148191],{"class":112},[102,149149,26034],{"class":108},[102,149151,149152],{"class":112}," records]\n",[102,149154,149155,149158,149160,149162,149164],{"class":104,"line":1601},[102,149156,149157],{"class":112},"    line.add_yaxis(city, values, ",[102,149159,147727],{"class":5206},[102,149161,158],{"class":108},[102,149163,31467],{"class":161},[102,149165,119],{"class":112},[102,149167,149168],{"class":104,"line":1606},[102,149169,2389],{"emptyLinePlaceholder":30},[102,149171,149172],{"class":104,"line":1612},[102,149173,147450],{"class":112},[102,149175,149176,149178,149180,149182,149184,149186,149189],{"class":104,"line":1617},[102,149177,147455],{"class":5206},[102,149179,158],{"class":108},[102,149181,147460],{"class":112},[102,149183,51398],{"class":5206},[102,149185,158],{"class":108},[102,149187,149188],{"class":217},"\"多地区趋势图\"",[102,149190,38038],{"class":112},[102,149192,149193,149195,149197,149199,149201,149203,149205],{"class":104,"line":1631},[102,149194,147511],{"class":5206},[102,149196,158],{"class":108},[102,149198,147516],{"class":112},[102,149200,147519],{"class":5206},[102,149202,158],{"class":108},[102,149204,147524],{"class":217},[102,149206,38038],{"class":112},[102,149208,149209],{"class":104,"line":1636},[102,149210,119],{"class":112},[102,149212,149213,149215,149218],{"class":104,"line":1642},[102,149214,147306],{"class":112},[102,149216,149217],{"class":217},"\"trend.html\"",[102,149219,119],{"class":112},[19,149221,149222],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149224,149226],{"id":149225},"_1012-易错点","10.12 易错点",[56,149228,149229,149235,149241,149251,149257],{},[59,149230,149231,149234],{},[99,149232,149233],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[59,149236,149237,149240],{},[99,149238,149239],{},"render()"," 生成的是 HTML，不是图片。",[59,149242,149243,149244,149247,149248,28376],{},"JSON 字符串用 ",[99,149245,149246],{},"json.loads()","，JSON 文件用 ",[99,149249,149250],{},"json.load()",[59,149252,149253,149254,28376],{},"中文 JSON 保存时加 ",[99,149255,149256],{},"ensure_ascii=False",[59,149258,149259],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149261,149263],{"id":149262},"_1013-本章练习","10.13 本章练习",[56,149265,149266,149269,149272,149275,149278],{},[59,149267,149268],{},"安装 pyecharts 并生成第一个折线图。",[59,149270,149271],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[59,149273,149274],{},"绘制两条折线，对比线上和线下销售额。",[59,149276,149277],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[59,149279,149280],{},"对含有空值的销售数据进行清洗后再绘图。",[5116,149282,149283],{},"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":23,"searchDepth":24,"depth":24,"links":149285},[149286,149287,149288,149289,149290,149291,149292,149293,149294,149295,149296,149297,149298],{"id":146902,"depth":24,"text":146903},{"id":146977,"depth":24,"text":146978},{"id":147156,"depth":24,"text":147157},{"id":147207,"depth":24,"text":147208},{"id":147341,"depth":24,"text":147342},{"id":147617,"depth":24,"text":147618},{"id":147743,"depth":24,"text":147744},{"id":147954,"depth":24,"text":147955},{"id":148325,"depth":24,"text":148326},{"id":148537,"depth":24,"text":148538},{"id":148909,"depth":24,"text":148910},{"id":149225,"depth":24,"text":149226},{"id":149262,"depth":24,"text":149263},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146894,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149305,"title":149306,"body":149307,"description":27,"extension":28,"meta":151667,"navigation":30,"path":151668,"seo":151669,"stem":151670,"__hash__":151671},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149308,"toc":151644},[149309,149312,149316,149319,149322,149398,149401,149492,149495,149499,149502,149546,149559,149563,149566,149633,149636,149640,149643,149727,149735,149739,149744,149885,149888,149899,149905,149911,150025,150029,150032,150035,150288,150291,150295,150298,150402,150405,150409,150560,150564,150571,150684,150688,150691,150797,150800,150804,150807,150838,150841,150946,150949,150953,150957,150967,151035,151039,151046,151110,151113,151117,151123,151219,151228,151232,151556,151565,151569,151597,151601,151641],[10,149310,149306],{"id":149311},"_11-面向对象基础",[14,149313,149315],{"id":149314},"_111-什么是面向对象","11.1 什么是面向对象",[19,149317,149318],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149320,149321],{},"面向过程：",[93,149323,149325],{"className":30369,"code":149324,"language":30371,"meta":23,"style":23},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[99,149326,149327,149336,149344,149348,149358,149389,149393],{"__ignoreMap":23},[102,149328,149329,149331,149333],{"class":104,"line":105},[102,149330,146518],{"class":112},[102,149332,158],{"class":108},[102,149334,149335],{"class":217}," \"小明\"\n",[102,149337,149338,149340,149342],{"class":104,"line":24},[102,149339,146528],{"class":112},[102,149341,158],{"class":108},[102,149343,146533],{"class":161},[102,149345,149346],{"class":104,"line":1168},[102,149347,2389],{"emptyLinePlaceholder":30},[102,149349,149350,149352,149355],{"class":104,"line":1183},[102,149351,31938],{"class":108},[102,149353,149354],{"class":1952}," introduce",[102,149356,149357],{"class":112},"(name, age):\n",[102,149359,149360,149362,149364,149366,149369,149371,149373,149375,149378,149380,149382,149384,149387],{"class":104,"line":1189},[102,149361,31290],{"class":161},[102,149363,113],{"class":112},[102,149365,165],{"class":108},[102,149367,149368],{"class":217},"\"我叫",[102,149370,1009],{"class":161},[102,149372,79801],{"class":112},[102,149374,1059],{"class":161},[102,149376,149377],{"class":217},"，今年",[102,149379,1009],{"class":161},[102,149381,70212],{"class":112},[102,149383,1059],{"class":161},[102,149385,149386],{"class":217},"岁\"",[102,149388,119],{"class":112},[102,149390,149391],{"class":104,"line":1203},[102,149392,2389],{"emptyLinePlaceholder":30},[102,149394,149395],{"class":104,"line":1209},[102,149396,149397],{"class":112},"introduce(name, age)\n",[19,149399,149400],{},"面向对象：",[93,149402,149404],{"className":30369,"code":149403,"language":30371,"meta":23,"style":23},"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",[99,149405,149406,149414,149422,149451,149455,149459,149469,149478,149487],{"__ignoreMap":23},[102,149407,149408,149410,149412],{"class":104,"line":105},[102,149409,14684],{"class":108},[102,149411,7888],{"class":1952},[102,149413,3728],{"class":112},[102,149415,149416,149418,149420],{"class":104,"line":24},[102,149417,30792],{"class":108},[102,149419,149354],{"class":1952},[102,149421,30798],{"class":112},[102,149423,149424,149426,149428,149430,149432,149435,149437,149439,149441,149443,149445,149447,149449],{"class":104,"line":1168},[102,149425,32442],{"class":161},[102,149427,113],{"class":112},[102,149429,165],{"class":108},[102,149431,149368],{"class":217},[102,149433,149434],{"class":161},"{self",[102,149436,80292],{"class":112},[102,149438,1059],{"class":161},[102,149440,149377],{"class":217},[102,149442,149434],{"class":161},[102,149444,80304],{"class":112},[102,149446,1059],{"class":161},[102,149448,149386],{"class":217},[102,149450,119],{"class":112},[102,149452,149453],{"class":104,"line":1183},[102,149454,2389],{"emptyLinePlaceholder":30},[102,149456,149457],{"class":104,"line":1189},[102,149458,2389],{"emptyLinePlaceholder":30},[102,149460,149461,149464,149466],{"class":104,"line":1203},[102,149462,149463],{"class":112},"student ",[102,149465,158],{"class":108},[102,149467,149468],{"class":112}," Student()\n",[102,149470,149471,149474,149476],{"class":104,"line":1209},[102,149472,149473],{"class":112},"student.name ",[102,149475,158],{"class":108},[102,149477,149335],{"class":217},[102,149479,149480,149483,149485],{"class":104,"line":1300},[102,149481,149482],{"class":112},"student.age ",[102,149484,158],{"class":108},[102,149486,146533],{"class":161},[102,149488,149489],{"class":104,"line":1306},[102,149490,149491],{"class":112},"student.introduce()\n",[19,149493,149494],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149496,149498],{"id":149497},"_112-类和对象","11.2 类和对象",[19,149500,149501],{},"类是模板，对象是根据模板创建出来的具体实例。",[93,149503,149505],{"className":30369,"code":149504,"language":30371,"meta":23,"style":23},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[99,149506,149507,149515,149520,149524,149528,149537],{"__ignoreMap":23},[102,149508,149509,149511,149513],{"class":104,"line":105},[102,149510,14684],{"class":108},[102,149512,7888],{"class":1952},[102,149514,3728],{"class":112},[102,149516,149517],{"class":104,"line":24},[102,149518,149519],{"class":108},"    pass\n",[102,149521,149522],{"class":104,"line":1168},[102,149523,2389],{"emptyLinePlaceholder":30},[102,149525,149526],{"class":104,"line":1183},[102,149527,2389],{"emptyLinePlaceholder":30},[102,149529,149530,149533,149535],{"class":104,"line":1189},[102,149531,149532],{"class":112},"student1 ",[102,149534,158],{"class":108},[102,149536,149468],{"class":112},[102,149538,149539,149542,149544],{"class":104,"line":1203},[102,149540,149541],{"class":112},"student2 ",[102,149543,158],{"class":108},[102,149545,149468],{"class":112},[19,149547,149548,149551,149552,101009,149555,149558],{},[99,149549,149550],{},"Student"," 是类，",[99,149553,149554],{},"student1",[99,149556,149557],{},"student2"," 是对象。",[14,149560,149562],{"id":149561},"_113-属性","11.3 属性",[19,149564,149565],{},"属性是对象保存的数据。",[93,149567,149569],{"className":30369,"code":149568,"language":30371,"meta":23,"style":23},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[99,149570,149571,149579,149583,149587,149591,149599,149607,149615,149619,149626],{"__ignoreMap":23},[102,149572,149573,149575,149577],{"class":104,"line":105},[102,149574,14684],{"class":108},[102,149576,7888],{"class":1952},[102,149578,3728],{"class":112},[102,149580,149581],{"class":104,"line":24},[102,149582,149519],{"class":108},[102,149584,149585],{"class":104,"line":1168},[102,149586,2389],{"emptyLinePlaceholder":30},[102,149588,149589],{"class":104,"line":1183},[102,149590,2389],{"emptyLinePlaceholder":30},[102,149592,149593,149595,149597],{"class":104,"line":1189},[102,149594,149463],{"class":112},[102,149596,158],{"class":108},[102,149598,149468],{"class":112},[102,149600,149601,149603,149605],{"class":104,"line":1203},[102,149602,149473],{"class":112},[102,149604,158],{"class":108},[102,149606,149335],{"class":217},[102,149608,149609,149611,149613],{"class":104,"line":1209},[102,149610,149482],{"class":112},[102,149612,158],{"class":108},[102,149614,146533],{"class":161},[102,149616,149617],{"class":104,"line":1300},[102,149618,2389],{"emptyLinePlaceholder":30},[102,149620,149621,149623],{"class":104,"line":1306},[102,149622,30406],{"class":161},[102,149624,149625],{"class":112},"(student.name)\n",[102,149627,149628,149630],{"class":104,"line":1318},[102,149629,30406],{"class":161},[102,149631,149632],{"class":112},"(student.age)\n",[19,149634,149635],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149637,149639],{"id":149638},"_114-方法","11.4 方法",[19,149641,149642],{},"类中的函数叫方法。",[93,149644,149645],{"className":30369,"code":149403,"language":30371,"meta":23,"style":23},[99,149646,149647,149655,149663,149691,149695,149699,149707,149715,149723],{"__ignoreMap":23},[102,149648,149649,149651,149653],{"class":104,"line":105},[102,149650,14684],{"class":108},[102,149652,7888],{"class":1952},[102,149654,3728],{"class":112},[102,149656,149657,149659,149661],{"class":104,"line":24},[102,149658,30792],{"class":108},[102,149660,149354],{"class":1952},[102,149662,30798],{"class":112},[102,149664,149665,149667,149669,149671,149673,149675,149677,149679,149681,149683,149685,149687,149689],{"class":104,"line":1168},[102,149666,32442],{"class":161},[102,149668,113],{"class":112},[102,149670,165],{"class":108},[102,149672,149368],{"class":217},[102,149674,149434],{"class":161},[102,149676,80292],{"class":112},[102,149678,1059],{"class":161},[102,149680,149377],{"class":217},[102,149682,149434],{"class":161},[102,149684,80304],{"class":112},[102,149686,1059],{"class":161},[102,149688,149386],{"class":217},[102,149690,119],{"class":112},[102,149692,149693],{"class":104,"line":1183},[102,149694,2389],{"emptyLinePlaceholder":30},[102,149696,149697],{"class":104,"line":1189},[102,149698,2389],{"emptyLinePlaceholder":30},[102,149700,149701,149703,149705],{"class":104,"line":1203},[102,149702,149463],{"class":112},[102,149704,158],{"class":108},[102,149706,149468],{"class":112},[102,149708,149709,149711,149713],{"class":104,"line":1209},[102,149710,149473],{"class":112},[102,149712,158],{"class":108},[102,149714,149335],{"class":217},[102,149716,149717,149719,149721],{"class":104,"line":1300},[102,149718,149482],{"class":112},[102,149720,158],{"class":108},[102,149722,146533],{"class":161},[102,149724,149725],{"class":104,"line":1306},[102,149726,149491],{"class":112},[19,149728,149729,149731,149732,149734],{},[99,149730,30814],{}," 表示当前对象。调用方法时不需要手动传入 ",[99,149733,30814],{},"，Python 会自动传。",[14,149736,149738],{"id":149737},"_115-构造方法__init__","11.5 构造方法__init__",[19,149740,149741,149743],{},[99,149742,30820],{}," 在对象创建时自动执行，用于初始化属性。",[93,149745,149747],{"className":30369,"code":149746,"language":30371,"meta":23,"style":23},"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",[99,149748,149749,149757,149766,149778,149790,149801,149805,149813,149851,149855,149859,149881],{"__ignoreMap":23},[102,149750,149751,149753,149755],{"class":104,"line":105},[102,149752,14684],{"class":108},[102,149754,7888],{"class":1952},[102,149756,3728],{"class":112},[102,149758,149759,149761,149763],{"class":104,"line":24},[102,149760,30792],{"class":108},[102,149762,30795],{"class":161},[102,149764,149765],{"class":112},"(self, name, age, score):\n",[102,149767,149768,149770,149773,149775],{"class":104,"line":1168},[102,149769,30836],{"class":161},[102,149771,149772],{"class":112},".name ",[102,149774,158],{"class":108},[102,149776,149777],{"class":112}," name\n",[102,149779,149780,149782,149785,149787],{"class":104,"line":1183},[102,149781,30836],{"class":161},[102,149783,149784],{"class":112},".age ",[102,149786,158],{"class":108},[102,149788,149789],{"class":112}," age\n",[102,149791,149792,149794,149797,149799],{"class":104,"line":1189},[102,149793,30836],{"class":161},[102,149795,149796],{"class":112},".score ",[102,149798,158],{"class":108},[102,149800,1568],{"class":112},[102,149802,149803],{"class":104,"line":1203},[102,149804,2389],{"emptyLinePlaceholder":30},[102,149806,149807,149809,149811],{"class":104,"line":1209},[102,149808,30792],{"class":108},[102,149810,149354],{"class":1952},[102,149812,30798],{"class":112},[102,149814,149815,149817,149819,149821,149823,149825,149827,149829,149831,149833,149835,149837,149840,149842,149845,149847,149849],{"class":104,"line":1300},[102,149816,32442],{"class":161},[102,149818,113],{"class":112},[102,149820,165],{"class":108},[102,149822,149368],{"class":217},[102,149824,149434],{"class":161},[102,149826,80292],{"class":112},[102,149828,1059],{"class":161},[102,149830,149377],{"class":217},[102,149832,149434],{"class":161},[102,149834,80304],{"class":112},[102,149836,1059],{"class":161},[102,149838,149839],{"class":217},"岁，成绩",[102,149841,149434],{"class":161},[102,149843,149844],{"class":112},".score",[102,149846,1059],{"class":161},[102,149848,364],{"class":217},[102,149850,119],{"class":112},[102,149852,149853],{"class":104,"line":1306},[102,149854,2389],{"emptyLinePlaceholder":30},[102,149856,149857],{"class":104,"line":1318},[102,149858,2389],{"emptyLinePlaceholder":30},[102,149860,149861,149863,149865,149868,149871,149873,149875,149877,149879],{"class":104,"line":1601},[102,149862,149463],{"class":112},[102,149864,158],{"class":108},[102,149866,149867],{"class":112}," Student(",[102,149869,149870],{"class":217},"\"小明\"",[102,149872,12425],{"class":112},[102,149874,763],{"class":161},[102,149876,12425],{"class":112},[102,149878,1102],{"class":161},[102,149880,119],{"class":112},[102,149882,149883],{"class":104,"line":1606},[102,149884,149491],{"class":112},[19,149886,149887],{},"构造方法的好处：",[56,149889,149890,149893,149896],{},[59,149891,149892],{},"创建对象时必须提供必要数据。",[59,149894,149895],{},"属性初始化集中，不容易漏。",[59,149897,149898],{},"对象状态更完整。",[14,149900,149902,149903],{"id":149901},"_116-str","11.6 ",[262,149904,1288],{},[19,149906,149907,149908,28376],{},"直接打印对象时，默认输出不直观。可以定义 ",[99,149909,149910],{},"__str__",[93,149912,149914],{"className":30369,"code":149913,"language":30371,"meta":23,"style":23},"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",[99,149915,149916,149924,149933,149943,149953,149957,149966,149994,149998,150002,150018],{"__ignoreMap":23},[102,149917,149918,149920,149922],{"class":104,"line":105},[102,149919,14684],{"class":108},[102,149921,7888],{"class":1952},[102,149923,3728],{"class":112},[102,149925,149926,149928,149930],{"class":104,"line":24},[102,149927,30792],{"class":108},[102,149929,30795],{"class":161},[102,149931,149932],{"class":112},"(self, name, age):\n",[102,149934,149935,149937,149939,149941],{"class":104,"line":1168},[102,149936,30836],{"class":161},[102,149938,149772],{"class":112},[102,149940,158],{"class":108},[102,149942,149777],{"class":112},[102,149944,149945,149947,149949,149951],{"class":104,"line":1183},[102,149946,30836],{"class":161},[102,149948,149784],{"class":112},[102,149950,158],{"class":108},[102,149952,149789],{"class":112},[102,149954,149955],{"class":104,"line":1189},[102,149956,2389],{"emptyLinePlaceholder":30},[102,149958,149959,149961,149964],{"class":104,"line":1203},[102,149960,30792],{"class":108},[102,149962,149963],{"class":161}," __str__",[102,149965,30798],{"class":112},[102,149967,149968,149970,149973,149976,149978,149980,149982,149985,149987,149989,149991],{"class":104,"line":1209},[102,149969,14742],{"class":108},[102,149971,149972],{"class":108}," f",[102,149974,149975],{"class":217},"\"Student(name=",[102,149977,149434],{"class":161},[102,149979,80292],{"class":112},[102,149981,1059],{"class":161},[102,149983,149984],{"class":217},", age=",[102,149986,149434],{"class":161},[102,149988,80304],{"class":112},[102,149990,1059],{"class":161},[102,149992,149993],{"class":217},")\"\n",[102,149995,149996],{"class":104,"line":1300},[102,149997,2389],{"emptyLinePlaceholder":30},[102,149999,150000],{"class":104,"line":1306},[102,150001,2389],{"emptyLinePlaceholder":30},[102,150003,150004,150006,150008,150010,150012,150014,150016],{"class":104,"line":1318},[102,150005,149463],{"class":112},[102,150007,158],{"class":108},[102,150009,149867],{"class":112},[102,150011,149870],{"class":217},[102,150013,12425],{"class":112},[102,150015,763],{"class":161},[102,150017,119],{"class":112},[102,150019,150020,150022],{"class":104,"line":1601},[102,150021,30406],{"class":161},[102,150023,150024],{"class":112},"(student)\n",[14,150026,150028],{"id":150027},"_117-封装","11.7 封装",[19,150030,150031],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150033,150034],{},"Python 中以双下划线开头的属性通常视为私有属性。",[93,150036,150038],{"className":30369,"code":150037,"language":30371,"meta":23,"style":23},"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",[99,150039,150040,150049,150058,150070,150082,150086,150095,150104,150108,150118,150131,150142,150147,150158,150162,150171,150183,150194,150198,150211,150222,150226,150237,150241,150245,150263,150272,150281],{"__ignoreMap":23},[102,150041,150042,150044,150047],{"class":104,"line":105},[102,150043,14684],{"class":108},[102,150045,150046],{"class":1952}," Account",[102,150048,3728],{"class":112},[102,150050,150051,150053,150055],{"class":104,"line":24},[102,150052,30792],{"class":108},[102,150054,30795],{"class":161},[102,150056,150057],{"class":112},"(self, owner, balance):\n",[102,150059,150060,150062,150065,150067],{"class":104,"line":1168},[102,150061,30836],{"class":161},[102,150063,150064],{"class":112},".owner ",[102,150066,158],{"class":108},[102,150068,150069],{"class":112}," owner\n",[102,150071,150072,150074,150077,150079],{"class":104,"line":1183},[102,150073,30836],{"class":161},[102,150075,150076],{"class":112},".__balance ",[102,150078,158],{"class":108},[102,150080,150081],{"class":112}," balance\n",[102,150083,150084],{"class":104,"line":1189},[102,150085,2389],{"emptyLinePlaceholder":30},[102,150087,150088,150090,150093],{"class":104,"line":1203},[102,150089,30792],{"class":108},[102,150091,150092],{"class":1952}," get_balance",[102,150094,30798],{"class":112},[102,150096,150097,150099,150101],{"class":104,"line":1209},[102,150098,14742],{"class":108},[102,150100,38864],{"class":161},[102,150102,150103],{"class":112},".__balance\n",[102,150105,150106],{"class":104,"line":1300},[102,150107,2389],{"emptyLinePlaceholder":30},[102,150109,150110,150112,150115],{"class":104,"line":1306},[102,150111,30792],{"class":108},[102,150113,150114],{"class":1952}," deposit",[102,150116,150117],{"class":112},"(self, money):\n",[102,150119,150120,150122,150125,150127,150129],{"class":104,"line":1318},[102,150121,2486],{"class":108},[102,150123,150124],{"class":112}," money ",[102,150126,1577],{"class":108},[102,150128,4082],{"class":161},[102,150130,3728],{"class":112},[102,150132,150133,150135,150137,150140],{"class":104,"line":1601},[102,150134,34641],{"class":161},[102,150136,113],{"class":112},[102,150138,150139],{"class":217},"\"存款金额必须大于0\"",[102,150141,119],{"class":112},[102,150143,150144],{"class":104,"line":1606},[102,150145,150146],{"class":108},"            return\n",[102,150148,150149,150151,150153,150155],{"class":104,"line":1612},[102,150150,30836],{"class":161},[102,150152,150076],{"class":112},[102,150154,9467],{"class":108},[102,150156,150157],{"class":112}," money\n",[102,150159,150160],{"class":104,"line":1617},[102,150161,2389],{"emptyLinePlaceholder":30},[102,150163,150164,150166,150169],{"class":104,"line":1631},[102,150165,30792],{"class":108},[102,150167,150168],{"class":1952}," withdraw",[102,150170,150117],{"class":112},[102,150172,150173,150175,150177,150179,150181],{"class":104,"line":1636},[102,150174,2486],{"class":108},[102,150176,150124],{"class":112},[102,150178,1577],{"class":108},[102,150180,4082],{"class":161},[102,150182,3728],{"class":112},[102,150184,150185,150187,150189,150192],{"class":104,"line":1642},[102,150186,34641],{"class":161},[102,150188,113],{"class":112},[102,150190,150191],{"class":217},"\"取款金额必须大于0\"",[102,150193,119],{"class":112},[102,150195,150196],{"class":104,"line":1663},[102,150197,150146],{"class":108},[102,150199,150200,150202,150204,150206,150208],{"class":104,"line":1668},[102,150201,2486],{"class":108},[102,150203,150124],{"class":112},[102,150205,1073],{"class":108},[102,150207,38864],{"class":161},[102,150209,150210],{"class":112},".__balance:\n",[102,150212,150213,150215,150217,150220],{"class":104,"line":1682},[102,150214,34641],{"class":161},[102,150216,113],{"class":112},[102,150218,150219],{"class":217},"\"余额不足\"",[102,150221,119],{"class":112},[102,150223,150224],{"class":104,"line":1687},[102,150225,150146],{"class":108},[102,150227,150228,150230,150232,150235],{"class":104,"line":1716},[102,150229,30836],{"class":161},[102,150231,150076],{"class":112},[102,150233,150234],{"class":108},"-=",[102,150236,150157],{"class":112},[102,150238,150239],{"class":104,"line":1721},[102,150240,2389],{"emptyLinePlaceholder":30},[102,150242,150243],{"class":104,"line":1738},[102,150244,2389],{"emptyLinePlaceholder":30},[102,150246,150247,150250,150252,150255,150257,150259,150261],{"class":104,"line":1743},[102,150248,150249],{"class":112},"account ",[102,150251,158],{"class":108},[102,150253,150254],{"class":112}," Account(",[102,150256,149870],{"class":217},[102,150258,12425],{"class":112},[102,150260,6400],{"class":161},[102,150262,119],{"class":112},[102,150264,150265,150268,150270],{"class":104,"line":1748},[102,150266,150267],{"class":112},"account.deposit(",[102,150269,1711],{"class":161},[102,150271,119],{"class":112},[102,150273,150274,150277,150279],{"class":104,"line":1753},[102,150275,150276],{"class":112},"account.withdraw(",[102,150278,424],{"class":161},[102,150280,119],{"class":112},[102,150282,150283,150285],{"class":104,"line":1767},[102,150284,30406],{"class":161},[102,150286,150287],{"class":112},"(account.get_balance())\n",[19,150289,150290],{},"封装的意义是避免外部随意修改内部状态。",[14,150292,150294],{"id":150293},"_118-继承","11.8 继承",[19,150296,150297],{},"继承可以让子类复用父类的属性和方法。",[93,150299,150301],{"className":30369,"code":150300,"language":30371,"meta":23,"style":23},"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",[99,150302,150303,150312,150321,150332,150336,150340,150354,150363,150374,150378,150382,150392,150397],{"__ignoreMap":23},[102,150304,150305,150307,150310],{"class":104,"line":105},[102,150306,14684],{"class":108},[102,150308,150309],{"class":1952}," Animal",[102,150311,3728],{"class":112},[102,150313,150314,150316,150319],{"class":104,"line":24},[102,150315,30792],{"class":108},[102,150317,150318],{"class":1952}," eat",[102,150320,30798],{"class":112},[102,150322,150323,150325,150327,150330],{"class":104,"line":1168},[102,150324,32442],{"class":161},[102,150326,113],{"class":112},[102,150328,150329],{"class":217},"\"吃东西\"",[102,150331,119],{"class":112},[102,150333,150334],{"class":104,"line":1183},[102,150335,2389],{"emptyLinePlaceholder":30},[102,150337,150338],{"class":104,"line":1189},[102,150339,2389],{"emptyLinePlaceholder":30},[102,150341,150342,150344,150347,150349,150352],{"class":104,"line":1203},[102,150343,14684],{"class":108},[102,150345,150346],{"class":1952}," Dog",[102,150348,113],{"class":112},[102,150350,150351],{"class":1952},"Animal",[102,150353,30777],{"class":112},[102,150355,150356,150358,150361],{"class":104,"line":1209},[102,150357,30792],{"class":108},[102,150359,150360],{"class":1952}," bark",[102,150362,30798],{"class":112},[102,150364,150365,150367,150369,150372],{"class":104,"line":1300},[102,150366,32442],{"class":161},[102,150368,113],{"class":112},[102,150370,150371],{"class":217},"\"汪汪\"",[102,150373,119],{"class":112},[102,150375,150376],{"class":104,"line":1306},[102,150377,2389],{"emptyLinePlaceholder":30},[102,150379,150380],{"class":104,"line":1318},[102,150381,2389],{"emptyLinePlaceholder":30},[102,150383,150384,150387,150389],{"class":104,"line":1601},[102,150385,150386],{"class":112},"dog ",[102,150388,158],{"class":108},[102,150390,150391],{"class":112}," Dog()\n",[102,150393,150394],{"class":104,"line":1606},[102,150395,150396],{"class":112},"dog.eat()\n",[102,150398,150399],{"class":104,"line":1612},[102,150400,150401],{"class":112},"dog.bark()\n",[19,150403,150404],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150406,150408],{"id":150407},"_119-方法重写","11.9 方法重写",[93,150410,150412],{"className":30369,"code":150411,"language":30371,"meta":23,"style":23},"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",[99,150413,150414,150422,150431,150442,150446,150450,150462,150470,150480,150484,150488,150501,150509,150520,150524,150528,150536,150546,150550,150555],{"__ignoreMap":23},[102,150415,150416,150418,150420],{"class":104,"line":105},[102,150417,14684],{"class":108},[102,150419,150309],{"class":1952},[102,150421,3728],{"class":112},[102,150423,150424,150426,150429],{"class":104,"line":24},[102,150425,30792],{"class":108},[102,150427,150428],{"class":1952}," speak",[102,150430,30798],{"class":112},[102,150432,150433,150435,150437,150440],{"class":104,"line":1168},[102,150434,32442],{"class":161},[102,150436,113],{"class":112},[102,150438,150439],{"class":217},"\"动物叫\"",[102,150441,119],{"class":112},[102,150443,150444],{"class":104,"line":1183},[102,150445,2389],{"emptyLinePlaceholder":30},[102,150447,150448],{"class":104,"line":1189},[102,150449,2389],{"emptyLinePlaceholder":30},[102,150451,150452,150454,150456,150458,150460],{"class":104,"line":1203},[102,150453,14684],{"class":108},[102,150455,150346],{"class":1952},[102,150457,113],{"class":112},[102,150459,150351],{"class":1952},[102,150461,30777],{"class":112},[102,150463,150464,150466,150468],{"class":104,"line":1209},[102,150465,30792],{"class":108},[102,150467,150428],{"class":1952},[102,150469,30798],{"class":112},[102,150471,150472,150474,150476,150478],{"class":104,"line":1300},[102,150473,32442],{"class":161},[102,150475,113],{"class":112},[102,150477,150371],{"class":217},[102,150479,119],{"class":112},[102,150481,150482],{"class":104,"line":1306},[102,150483,2389],{"emptyLinePlaceholder":30},[102,150485,150486],{"class":104,"line":1318},[102,150487,2389],{"emptyLinePlaceholder":30},[102,150489,150490,150492,150495,150497,150499],{"class":104,"line":1601},[102,150491,14684],{"class":108},[102,150493,150494],{"class":1952}," Cat",[102,150496,113],{"class":112},[102,150498,150351],{"class":1952},[102,150500,30777],{"class":112},[102,150502,150503,150505,150507],{"class":104,"line":1606},[102,150504,30792],{"class":108},[102,150506,150428],{"class":1952},[102,150508,30798],{"class":112},[102,150510,150511,150513,150515,150518],{"class":104,"line":1612},[102,150512,32442],{"class":161},[102,150514,113],{"class":112},[102,150516,150517],{"class":217},"\"喵喵\"",[102,150519,119],{"class":112},[102,150521,150522],{"class":104,"line":1617},[102,150523,2389],{"emptyLinePlaceholder":30},[102,150525,150526],{"class":104,"line":1631},[102,150527,2389],{"emptyLinePlaceholder":30},[102,150529,150530,150532,150534],{"class":104,"line":1636},[102,150531,150386],{"class":112},[102,150533,158],{"class":108},[102,150535,150391],{"class":112},[102,150537,150538,150541,150543],{"class":104,"line":1642},[102,150539,150540],{"class":112},"cat ",[102,150542,158],{"class":108},[102,150544,150545],{"class":112}," Cat()\n",[102,150547,150548],{"class":104,"line":1663},[102,150549,2389],{"emptyLinePlaceholder":30},[102,150551,150552],{"class":104,"line":1668},[102,150553,150554],{"class":112},"dog.speak()\n",[102,150556,150557],{"class":104,"line":1682},[102,150558,150559],{"class":112},"cat.speak()\n",[14,150561,150563],{"id":150562},"_1110-super","11.10 super",[19,150565,150566,150567,150570],{},"子类可以通过 ",[99,150568,150569],{},"super()"," 调用父类方法。",[93,150572,150574],{"className":30369,"code":150573,"language":30371,"meta":23,"style":23},"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",[99,150575,150576,150584,150593,150603,150607,150611,150623,150632,150643,150653,150657,150661,150677],{"__ignoreMap":23},[102,150577,150578,150580,150582],{"class":104,"line":105},[102,150579,14684],{"class":108},[102,150581,15559],{"class":1952},[102,150583,3728],{"class":112},[102,150585,150586,150588,150590],{"class":104,"line":24},[102,150587,30792],{"class":108},[102,150589,30795],{"class":161},[102,150591,150592],{"class":112},"(self, name):\n",[102,150594,150595,150597,150599,150601],{"class":104,"line":1168},[102,150596,30836],{"class":161},[102,150598,149772],{"class":112},[102,150600,158],{"class":108},[102,150602,149777],{"class":112},[102,150604,150605],{"class":104,"line":1183},[102,150606,2389],{"emptyLinePlaceholder":30},[102,150608,150609],{"class":104,"line":1189},[102,150610,2389],{"emptyLinePlaceholder":30},[102,150612,150613,150615,150617,150619,150621],{"class":104,"line":1203},[102,150614,14684],{"class":108},[102,150616,7888],{"class":1952},[102,150618,113],{"class":112},[102,150620,19036],{"class":1952},[102,150622,30777],{"class":112},[102,150624,150625,150627,150629],{"class":104,"line":1209},[102,150626,30792],{"class":108},[102,150628,30795],{"class":161},[102,150630,150631],{"class":112},"(self, name, score):\n",[102,150633,150634,150636,150638,150640],{"class":104,"line":1300},[102,150635,30808],{"class":161},[102,150637,17251],{"class":112},[102,150639,30820],{"class":161},[102,150641,150642],{"class":112},"(name)\n",[102,150644,150645,150647,150649,150651],{"class":104,"line":1306},[102,150646,30836],{"class":161},[102,150648,149796],{"class":112},[102,150650,158],{"class":108},[102,150652,1568],{"class":112},[102,150654,150655],{"class":104,"line":1318},[102,150656,2389],{"emptyLinePlaceholder":30},[102,150658,150659],{"class":104,"line":1601},[102,150660,2389],{"emptyLinePlaceholder":30},[102,150662,150663,150665,150667,150669,150671,150673,150675],{"class":104,"line":1606},[102,150664,149463],{"class":112},[102,150666,158],{"class":108},[102,150668,149867],{"class":112},[102,150670,149870],{"class":217},[102,150672,12425],{"class":112},[102,150674,1102],{"class":161},[102,150676,119],{"class":112},[102,150678,150679,150681],{"class":104,"line":1612},[102,150680,30406],{"class":161},[102,150682,150683],{"class":112},"(student.name, student.score)\n",[14,150685,150687],{"id":150686},"_1111-多态","11.11 多态",[19,150689,150690],{},"多态指不同对象响应同一个方法，表现出不同结果。",[93,150692,150694],{"className":30369,"code":150693,"language":30371,"meta":23,"style":23},"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",[99,150695,150696,150704,150712,150722,150726,150730,150738,150746,150756,150760,150764,150774,150779,150783,150787,150792],{"__ignoreMap":23},[102,150697,150698,150700,150702],{"class":104,"line":105},[102,150699,14684],{"class":108},[102,150701,150346],{"class":1952},[102,150703,3728],{"class":112},[102,150705,150706,150708,150710],{"class":104,"line":24},[102,150707,30792],{"class":108},[102,150709,150428],{"class":1952},[102,150711,30798],{"class":112},[102,150713,150714,150716,150718,150720],{"class":104,"line":1168},[102,150715,32442],{"class":161},[102,150717,113],{"class":112},[102,150719,150371],{"class":217},[102,150721,119],{"class":112},[102,150723,150724],{"class":104,"line":1183},[102,150725,2389],{"emptyLinePlaceholder":30},[102,150727,150728],{"class":104,"line":1189},[102,150729,2389],{"emptyLinePlaceholder":30},[102,150731,150732,150734,150736],{"class":104,"line":1203},[102,150733,14684],{"class":108},[102,150735,150494],{"class":1952},[102,150737,3728],{"class":112},[102,150739,150740,150742,150744],{"class":104,"line":1209},[102,150741,30792],{"class":108},[102,150743,150428],{"class":1952},[102,150745,30798],{"class":112},[102,150747,150748,150750,150752,150754],{"class":104,"line":1300},[102,150749,32442],{"class":161},[102,150751,113],{"class":112},[102,150753,150517],{"class":217},[102,150755,119],{"class":112},[102,150757,150758],{"class":104,"line":1306},[102,150759,2389],{"emptyLinePlaceholder":30},[102,150761,150762],{"class":104,"line":1318},[102,150763,2389],{"emptyLinePlaceholder":30},[102,150765,150766,150768,150771],{"class":104,"line":1601},[102,150767,31938],{"class":108},[102,150769,150770],{"class":1952}," make_sound",[102,150772,150773],{"class":112},"(animal):\n",[102,150775,150776],{"class":104,"line":1606},[102,150777,150778],{"class":112},"    animal.speak()\n",[102,150780,150781],{"class":104,"line":1612},[102,150782,2389],{"emptyLinePlaceholder":30},[102,150784,150785],{"class":104,"line":1617},[102,150786,2389],{"emptyLinePlaceholder":30},[102,150788,150789],{"class":104,"line":1631},[102,150790,150791],{"class":112},"make_sound(Dog())\n",[102,150793,150794],{"class":104,"line":1636},[102,150795,150796],{"class":112},"make_sound(Cat())\n",[19,150798,150799],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150801,150803],{"id":150802},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,150805,150806],{},"实例属性属于对象：",[93,150808,150810],{"className":30369,"code":150809,"language":30371,"meta":23,"style":23},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[99,150811,150812,150820,150828],{"__ignoreMap":23},[102,150813,150814,150816,150818],{"class":104,"line":105},[102,150815,14684],{"class":108},[102,150817,7888],{"class":1952},[102,150819,3728],{"class":112},[102,150821,150822,150824,150826],{"class":104,"line":24},[102,150823,30792],{"class":108},[102,150825,30795],{"class":161},[102,150827,150592],{"class":112},[102,150829,150830,150832,150834,150836],{"class":104,"line":1168},[102,150831,30836],{"class":161},[102,150833,149772],{"class":112},[102,150835,158],{"class":108},[102,150837,149777],{"class":112},[19,150839,150840],{},"类属性属于类，所有对象共享：",[93,150842,150844],{"className":30369,"code":150843,"language":30371,"meta":23,"style":23},"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",[99,150845,150846,150854,150864,150868,150876,150886,150890,150894,150907,150921,150925,150932,150939],{"__ignoreMap":23},[102,150847,150848,150850,150852],{"class":104,"line":105},[102,150849,14684],{"class":108},[102,150851,7888],{"class":1952},[102,150853,3728],{"class":112},[102,150855,150856,150859,150861],{"class":104,"line":24},[102,150857,150858],{"class":112},"    school ",[102,150860,158],{"class":108},[102,150862,150863],{"class":217}," \"黑马学校\"\n",[102,150865,150866],{"class":104,"line":1168},[102,150867,2389],{"emptyLinePlaceholder":30},[102,150869,150870,150872,150874],{"class":104,"line":1183},[102,150871,30792],{"class":108},[102,150873,30795],{"class":161},[102,150875,150592],{"class":112},[102,150877,150878,150880,150882,150884],{"class":104,"line":1189},[102,150879,30836],{"class":161},[102,150881,149772],{"class":112},[102,150883,158],{"class":108},[102,150885,149777],{"class":112},[102,150887,150888],{"class":104,"line":1203},[102,150889,2389],{"emptyLinePlaceholder":30},[102,150891,150892],{"class":104,"line":1209},[102,150893,2389],{"emptyLinePlaceholder":30},[102,150895,150896,150899,150901,150903,150905],{"class":104,"line":1300},[102,150897,150898],{"class":112},"s1 ",[102,150900,158],{"class":108},[102,150902,149867],{"class":112},[102,150904,149870],{"class":217},[102,150906,119],{"class":112},[102,150908,150909,150912,150914,150916,150919],{"class":104,"line":1306},[102,150910,150911],{"class":112},"s2 ",[102,150913,158],{"class":108},[102,150915,149867],{"class":112},[102,150917,150918],{"class":217},"\"小红\"",[102,150920,119],{"class":112},[102,150922,150923],{"class":104,"line":1318},[102,150924,2389],{"emptyLinePlaceholder":30},[102,150926,150927,150929],{"class":104,"line":1601},[102,150928,30406],{"class":161},[102,150930,150931],{"class":112},"(s1.school)\n",[102,150933,150934,150936],{"class":104,"line":1606},[102,150935,30406],{"class":161},[102,150937,150938],{"class":112},"(s2.school)\n",[102,150940,150941,150943],{"class":104,"line":1612},[102,150942,30406],{"class":161},[102,150944,150945],{"class":112},"(Student.school)\n",[19,150947,150948],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,150950,150952],{"id":150951},"_1113-类方法和静态方法","11.13 类方法和静态方法",[73,150954,150956],{"id":150955},"_11131-类方法","11.13.1 类方法",[19,150958,150959,150960,150963,150964,28376],{},"类方法使用 ",[99,150961,150962],{},"@classmethod","，第一个参数通常是 ",[99,150965,150966],{},"cls",[93,150968,150970],{"className":30369,"code":150969,"language":30371,"meta":23,"style":23},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[99,150971,150972,150980,150988,150992,151000,151010,151020,151024,151028],{"__ignoreMap":23},[102,150973,150974,150976,150978],{"class":104,"line":105},[102,150975,14684],{"class":108},[102,150977,7888],{"class":1952},[102,150979,3728],{"class":112},[102,150981,150982,150984,150986],{"class":104,"line":24},[102,150983,150858],{"class":112},[102,150985,158],{"class":108},[102,150987,150863],{"class":217},[102,150989,150990],{"class":104,"line":1168},[102,150991,2389],{"emptyLinePlaceholder":30},[102,150993,150994,150997],{"class":104,"line":1183},[102,150995,150996],{"class":1952},"    @",[102,150998,150999],{"class":161},"classmethod\n",[102,151001,151002,151004,151007],{"class":104,"line":1189},[102,151003,30792],{"class":108},[102,151005,151006],{"class":1952}," get_school",[102,151008,151009],{"class":112},"(cls):\n",[102,151011,151012,151014,151017],{"class":104,"line":1203},[102,151013,14742],{"class":108},[102,151015,151016],{"class":161}," cls",[102,151018,151019],{"class":112},".school\n",[102,151021,151022],{"class":104,"line":1209},[102,151023,2389],{"emptyLinePlaceholder":30},[102,151025,151026],{"class":104,"line":1300},[102,151027,2389],{"emptyLinePlaceholder":30},[102,151029,151030,151032],{"class":104,"line":1306},[102,151031,30406],{"class":161},[102,151033,151034],{"class":112},"(Student.get_school())\n",[73,151036,151038],{"id":151037},"_11132-静态方法","11.13.2 静态方法",[19,151040,151041,151042,151045],{},"静态方法使用 ",[99,151043,151044],{},"@staticmethod","，不需要访问实例和类。",[93,151047,151049],{"className":30369,"code":151048,"language":30371,"meta":23,"style":23},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[99,151050,151051,151060,151067,151076,151087,151091,151095],{"__ignoreMap":23},[102,151052,151053,151055,151058],{"class":104,"line":105},[102,151054,14684],{"class":108},[102,151056,151057],{"class":1952}," MathUtils",[102,151059,3728],{"class":112},[102,151061,151062,151064],{"class":104,"line":24},[102,151063,150996],{"class":1952},[102,151065,151066],{"class":161},"staticmethod\n",[102,151068,151069,151071,151073],{"class":104,"line":1168},[102,151070,30792],{"class":108},[102,151072,5199],{"class":1952},[102,151074,151075],{"class":112},"(a, b):\n",[102,151077,151078,151080,151082,151084],{"class":104,"line":1183},[102,151079,14742],{"class":108},[102,151081,10859],{"class":112},[102,151083,594],{"class":108},[102,151085,151086],{"class":112}," b\n",[102,151088,151089],{"class":104,"line":1189},[102,151090,2389],{"emptyLinePlaceholder":30},[102,151092,151093],{"class":104,"line":1203},[102,151094,2389],{"emptyLinePlaceholder":30},[102,151096,151097,151099,151102,151104,151106,151108],{"class":104,"line":1209},[102,151098,30406],{"class":161},[102,151100,151101],{"class":112},"(MathUtils.add(",[102,151103,330],{"class":161},[102,151105,12425],{"class":112},[102,151107,190],{"class":161},[102,151109,30488],{"class":112},[19,151111,151112],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151114,151116],{"id":151115},"_1114-dataclass","11.14 dataclass",[19,151118,151119,151122],{},[99,151120,151121],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[93,151124,151126],{"className":30369,"code":151125,"language":30371,"meta":23,"style":23},"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",[99,151127,151128,151140,151144,151148,151153,151161,151169,151177,151185,151189,151193,151213],{"__ignoreMap":23},[102,151129,151130,151132,151135,151137],{"class":104,"line":105},[102,151131,30728],{"class":108},[102,151133,151134],{"class":112}," dataclasses ",[102,151136,30383],{"class":108},[102,151138,151139],{"class":112}," dataclass\n",[102,151141,151142],{"class":104,"line":24},[102,151143,2389],{"emptyLinePlaceholder":30},[102,151145,151146],{"class":104,"line":1168},[102,151147,2389],{"emptyLinePlaceholder":30},[102,151149,151150],{"class":104,"line":1183},[102,151151,151152],{"class":1952},"@dataclass\n",[102,151154,151155,151157,151159],{"class":104,"line":1189},[102,151156,14684],{"class":108},[102,151158,7888],{"class":1952},[102,151160,3728],{"class":112},[102,151162,151163,151166],{"class":104,"line":1203},[102,151164,151165],{"class":112},"    name: ",[102,151167,151168],{"class":161},"str\n",[102,151170,151171,151174],{"class":104,"line":1209},[102,151172,151173],{"class":112},"    age: ",[102,151175,151176],{"class":161},"int\n",[102,151178,151179,151182],{"class":104,"line":1300},[102,151180,151181],{"class":112},"    score: ",[102,151183,151184],{"class":161},"float\n",[102,151186,151187],{"class":104,"line":1306},[102,151188,2389],{"emptyLinePlaceholder":30},[102,151190,151191],{"class":104,"line":1318},[102,151192,2389],{"emptyLinePlaceholder":30},[102,151194,151195,151197,151199,151201,151203,151205,151207,151209,151211],{"class":104,"line":1601},[102,151196,149463],{"class":112},[102,151198,158],{"class":108},[102,151200,149867],{"class":112},[102,151202,149870],{"class":217},[102,151204,12425],{"class":112},[102,151206,763],{"class":161},[102,151208,12425],{"class":112},[102,151210,1102],{"class":161},[102,151212,119],{"class":112},[102,151214,151215,151217],{"class":104,"line":1606},[102,151216,30406],{"class":161},[102,151218,150024],{"class":112},[19,151220,151221,151222,325,151224,151227],{},"它会自动生成 ",[99,151223,30820],{},[99,151225,151226],{},"__repr__"," 等方法。适合数据模型类。",[14,151229,151231],{"id":151230},"_1115-小案例学生类","11.15 小案例：学生类",[93,151233,151235],{"className":30369,"code":151234,"language":30371,"meta":23,"style":23},"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",[99,151236,151237,151245,151254,151266,151276,151286,151296,151300,151309,151322,151326,151335,151341,151353,151365,151377,151389,151393,151397,151403,151413,151422,151432,151440,151448,151457,151461,151465,151473,151509,151513,151517,151542,151549],{"__ignoreMap":23},[102,151238,151239,151241,151243],{"class":104,"line":105},[102,151240,14684],{"class":108},[102,151242,7888],{"class":1952},[102,151244,3728],{"class":112},[102,151246,151247,151249,151251],{"class":104,"line":24},[102,151248,30792],{"class":108},[102,151250,30795],{"class":161},[102,151252,151253],{"class":112},"(self, student_id, name, age, score):\n",[102,151255,151256,151258,151261,151263],{"class":104,"line":1168},[102,151257,30836],{"class":161},[102,151259,151260],{"class":112},".student_id ",[102,151262,158],{"class":108},[102,151264,151265],{"class":112}," student_id\n",[102,151267,151268,151270,151272,151274],{"class":104,"line":1183},[102,151269,30836],{"class":161},[102,151271,149772],{"class":112},[102,151273,158],{"class":108},[102,151275,149777],{"class":112},[102,151277,151278,151280,151282,151284],{"class":104,"line":1189},[102,151279,30836],{"class":161},[102,151281,149784],{"class":112},[102,151283,158],{"class":108},[102,151285,149789],{"class":112},[102,151287,151288,151290,151292,151294],{"class":104,"line":1203},[102,151289,30836],{"class":161},[102,151291,149796],{"class":112},[102,151293,158],{"class":108},[102,151295,1568],{"class":112},[102,151297,151298],{"class":104,"line":1209},[102,151299,2389],{"emptyLinePlaceholder":30},[102,151301,151302,151304,151307],{"class":104,"line":1300},[102,151303,30792],{"class":108},[102,151305,151306],{"class":1952}," is_passed",[102,151308,30798],{"class":112},[102,151310,151311,151313,151315,151317,151319],{"class":104,"line":1306},[102,151312,14742],{"class":108},[102,151314,38864],{"class":161},[102,151316,149796],{"class":112},[102,151318,1699],{"class":108},[102,151320,151321],{"class":161}," 60\n",[102,151323,151324],{"class":104,"line":1318},[102,151325,2389],{"emptyLinePlaceholder":30},[102,151327,151328,151330,151333],{"class":104,"line":1601},[102,151329,30792],{"class":108},[102,151331,151332],{"class":1952}," to_dict",[102,151334,30798],{"class":112},[102,151336,151337,151339],{"class":104,"line":1606},[102,151338,14742],{"class":108},[102,151340,15562],{"class":112},[102,151342,151343,151346,151348,151350],{"class":104,"line":1612},[102,151344,151345],{"class":217},"            \"student_id\"",[102,151347,51428],{"class":112},[102,151349,30814],{"class":161},[102,151351,151352],{"class":112},".student_id,\n",[102,151354,151355,151358,151360,151362],{"class":104,"line":1617},[102,151356,151357],{"class":217},"            \"name\"",[102,151359,51428],{"class":112},[102,151361,30814],{"class":161},[102,151363,151364],{"class":112},".name,\n",[102,151366,151367,151370,151372,151374],{"class":104,"line":1631},[102,151368,151369],{"class":217},"            \"age\"",[102,151371,51428],{"class":112},[102,151373,30814],{"class":161},[102,151375,151376],{"class":112},".age,\n",[102,151378,151379,151382,151384,151386],{"class":104,"line":1636},[102,151380,151381],{"class":217},"            \"score\"",[102,151383,51428],{"class":112},[102,151385,30814],{"class":161},[102,151387,151388],{"class":112},".score,\n",[102,151390,151391],{"class":104,"line":1642},[102,151392,2518],{"class":112},[102,151394,151395],{"class":104,"line":1663},[102,151396,2389],{"emptyLinePlaceholder":30},[102,151398,151399,151401],{"class":104,"line":1668},[102,151400,150996],{"class":1952},[102,151402,150999],{"class":161},[102,151404,151405,151407,151410],{"class":104,"line":1682},[102,151406,30792],{"class":108},[102,151408,151409],{"class":1952}," from_dict",[102,151411,151412],{"class":112},"(cls, data):\n",[102,151414,151415,151417,151419],{"class":104,"line":1687},[102,151416,14742],{"class":108},[102,151418,151016],{"class":161},[102,151420,151421],{"class":112},"(\n",[102,151423,151424,151427,151430],{"class":104,"line":1716},[102,151425,151426],{"class":112},"            data[",[102,151428,151429],{"class":217},"\"student_id\"",[102,151431,87827],{"class":112},[102,151433,151434,151436,151438],{"class":104,"line":1721},[102,151435,151426],{"class":112},[102,151437,62670],{"class":217},[102,151439,87827],{"class":112},[102,151441,151442,151444,151446],{"class":104,"line":1738},[102,151443,151426],{"class":112},[102,151445,69115],{"class":217},[102,151447,87827],{"class":112},[102,151449,151450,151452,151455],{"class":104,"line":1743},[102,151451,151426],{"class":112},[102,151453,151454],{"class":217},"\"score\"",[102,151456,87827],{"class":112},[102,151458,151459],{"class":104,"line":1748},[102,151460,38117],{"class":112},[102,151462,151463],{"class":104,"line":1753},[102,151464,2389],{"emptyLinePlaceholder":30},[102,151466,151467,151469,151471],{"class":104,"line":1767},[102,151468,30792],{"class":108},[102,151470,149963],{"class":161},[102,151472,30798],{"class":112},[102,151474,151475,151477,151479,151481,151483,151486,151488,151491,151493,151495,151497,151499,151501,151503,151505,151507],{"class":104,"line":1772},[102,151476,14742],{"class":108},[102,151478,149972],{"class":108},[102,151480,364],{"class":217},[102,151482,149434],{"class":161},[102,151484,151485],{"class":112},".student_id",[102,151487,1059],{"class":161},[102,151489,151490],{"class":161}," {self",[102,151492,80292],{"class":112},[102,151494,1059],{"class":161},[102,151496,151490],{"class":161},[102,151498,80304],{"class":112},[102,151500,1059],{"class":161},[102,151502,151490],{"class":161},[102,151504,149844],{"class":112},[102,151506,1059],{"class":161},[102,151508,25124],{"class":217},[102,151510,151511],{"class":104,"line":2566},[102,151512,2389],{"emptyLinePlaceholder":30},[102,151514,151515],{"class":104,"line":2580},[102,151516,2389],{"emptyLinePlaceholder":30},[102,151518,151519,151521,151523,151525,151528,151530,151532,151534,151536,151538,151540],{"class":104,"line":2588},[102,151520,149463],{"class":112},[102,151522,158],{"class":108},[102,151524,149867],{"class":112},[102,151526,151527],{"class":217},"\"001\"",[102,151529,12425],{"class":112},[102,151531,149870],{"class":217},[102,151533,12425],{"class":112},[102,151535,763],{"class":161},[102,151537,12425],{"class":112},[102,151539,1102],{"class":161},[102,151541,119],{"class":112},[102,151543,151544,151546],{"class":104,"line":2593},[102,151545,30406],{"class":161},[102,151547,151548],{"class":112},"(student.is_passed())\n",[102,151550,151551,151553],{"class":104,"line":2599},[102,151552,30406],{"class":161},[102,151554,151555],{"class":112},"(student.to_dict())\n",[19,151557,151558,101009,151561,151564],{},[99,151559,151560],{},"to_dict()",[99,151562,151563],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151566,151568],{"id":151567},"_1116-易错点","11.16 易错点",[56,151570,151571,151577,151583,151588,151591,151594],{},[59,151572,151573,151574,28376],{},"类名推荐使用大驼峰，如 ",[99,151575,151576],{},"StudentManager",[59,151578,151579,151580,151582],{},"方法第一个参数必须写 ",[99,151581,30814],{},"，调用时不用传。",[59,151584,151585,151587],{},[99,151586,30820],{}," 不是普通方法，它在创建对象时自动执行。",[59,151589,151590],{},"私有属性不是绝对安全，只是约定和名称改写。",[59,151592,151593],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[59,151595,151596],{},"类中方法太多时，说明职责可能过重。",[14,151598,151600],{"id":151599},"_1117-本章练习","11.17 本章练习",[56,151602,151603,151609,151615,151620,151633],{},[59,151604,151605,151606,151608],{},"定义 ",[99,151607,149550],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[59,151610,151605,151611,151614],{},[99,151612,151613],{},"Account"," 类，实现存款、取款、查询余额。",[59,151616,151605,151617,151619],{},[99,151618,17216],{}," 类，计算圆的周长和面积。",[59,151621,151605,151622,325,151625,151628,151629,151632],{},[99,151623,151624],{},"Dog",[99,151626,151627],{},"Cat"," 类，并用同一个函数调用它们的 ",[99,151630,151631],{},"speak()"," 方法。",[59,151634,104357,151635,151637,151638,28376],{},[99,151636,151121],{}," 定义一个商品类 ",[99,151639,151640],{},"Product",[5116,151642,151643],{},"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":23,"searchDepth":24,"depth":24,"links":151645},[151646,151647,151648,151649,151650,151651,151653,151654,151655,151656,151657,151658,151659,151663,151664,151665,151666],{"id":149314,"depth":24,"text":149315},{"id":149497,"depth":24,"text":149498},{"id":149561,"depth":24,"text":149562},{"id":149638,"depth":24,"text":149639},{"id":149737,"depth":24,"text":149738},{"id":149901,"depth":24,"text":151652},"11.6 str",{"id":150027,"depth":24,"text":150028},{"id":150293,"depth":24,"text":150294},{"id":150407,"depth":24,"text":150408},{"id":150562,"depth":24,"text":150563},{"id":150686,"depth":24,"text":150687},{"id":150802,"depth":24,"text":150803},{"id":150951,"depth":24,"text":150952,"children":151660},[151661,151662],{"id":150955,"depth":1168,"text":150956},{"id":151037,"depth":1168,"text":151038},{"id":151115,"depth":24,"text":151116},{"id":151230,"depth":24,"text":151231},{"id":151567,"depth":24,"text":151568},{"id":151599,"depth":24,"text":151600},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149306,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151673,"title":151674,"body":151675,"description":27,"extension":28,"meta":154988,"navigation":30,"path":154989,"seo":154990,"stem":154991,"__hash__":154992},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151676,"toc":154964},[151677,151680,151684,151687,151690,151719,151722,151730,151734,151738,151741,151764,151767,151773,151777,153223,153226,153247,153251,153254,153266,153269,153453,153456,153582,153585,153589,153593,153729,153733,153819,153823,153905,153909,153946,153950,154139,154143,154146,154376,154380,154383,154564,154567,154571,154574,154580,154583,154609,154613,154616,154630,154633,154658,154661,154675,154678,154695,154698,154715,154718,154735,154739,154765,154769,154792,154796,154799,154801,154807,154809,154830,154833,154839,154845,154849,154852,154928,154931,154935,154961],[10,151678,151674],{"id":151679},"_12-综合案例与复习路线",[14,151681,151683],{"id":151682},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151685,151686],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151688,151689],{},"一个合格的入门综合项目最好覆盖：",[56,151691,151692,151695,151698,151701,151704,151707,151710,151713,151716],{},[59,151693,151694],{},"输入输出。",[59,151696,151697],{},"判断和循环。",[59,151699,151700],{},"函数拆分。",[59,151702,151703],{},"列表、字典等容器。",[59,151705,151706],{},"文件持久化。",[59,151708,151709],{},"异常处理。",[59,151711,151712],{},"模块拆分。",[59,151714,151715],{},"可选：面向对象。",[59,151717,151718],{},"可选：数据可视化。",[19,151720,151721],{},"本章整理两个方向：",[56,151723,151724,151727],{},[59,151725,151726],{},"学生管理系统。",[59,151728,151729],{},"销售数据统计和可视化。",[14,151731,151733],{"id":151732},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[73,151735,151737],{"id":151736},"_1221-需求","12.2.1 需求",[19,151739,151740],{},"实现一个命令行学生管理系统：",[56,151742,151743,151746,151749,151752,151755,151758,151761],{},[59,151744,151745],{},"添加学生。",[59,151747,151748],{},"删除学生。",[59,151750,151751],{},"修改学生。",[59,151753,151754],{},"查询学生。",[59,151756,151757],{},"显示所有学生。",[59,151759,151760],{},"保存到 JSON 文件。",[59,151762,151763],{},"程序启动时自动读取 JSON 文件。",[19,151765,151766],{},"学生字段：",[93,151768,151771],{"className":151769,"code":151770,"language":5177,"meta":23},[5175],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[99,151772,151770],{"__ignoreMap":23},[14,151774,151776],{"id":151775},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[93,151778,151780],{"className":30369,"code":151779,"language":30371,"meta":23,"style":23},"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",[99,151781,151782,151788,151798,151802,151816,151820,151824,151833,151845,151851,151855,151861,151892,151902,151909,151920,151926,151930,151934,151944,151975,152001,152005,152009,152018,152029,152040,152051,152062,152073,152084,152095,152099,152103,152113,152125,152141,152148,152155,152159,152163,152173,152181,152188,152201,152211,152222,152226,152230,152239,152247,152253,152265,152273,152284,152288,152292,152301,152317,152321,152328,152339,152344,152348,152364,152379,152394,152398,152403,152411,152419,152427,152435,152439,152444,152455,152459,152463,152472,152487,152497,152501,152513,152524,152528,152532,152537,152541,152552,152556,152560,152569,152584,152592,152596,152608,152618,152622,152626,152641,152654,152667,152671,152684,152696,152708,152712,152716,152727,152731,152735,152744,152759,152767,152771,152783,152793,152797,152801,152806,152810,152814,152824,152830,152852,152871,152890,152909,152914,152918,152922,152931,152939,152950,152954,152958,152984,152994,152999,153003,153007,153015,153025,153029,153037,153042,153058,153062,153076,153081,153095,153100,153113,153118,153131,153136,153149,153154,153167,153178,153182,153188,153199,153203,153207,153219],{"__ignoreMap":23},[102,151783,151784,151786],{"class":104,"line":105},[102,151785,30383],{"class":108},[102,151787,147073],{"class":112},[102,151789,151790,151792,151794,151796],{"class":104,"line":24},[102,151791,30728],{"class":108},[102,151793,108302],{"class":112},[102,151795,30383],{"class":108},[102,151797,108307],{"class":112},[102,151799,151800],{"class":104,"line":1168},[102,151801,2389],{"emptyLinePlaceholder":30},[102,151803,151804,151807,151809,151811,151814],{"class":104,"line":1183},[102,151805,151806],{"class":161},"DATA_FILE",[102,151808,13554],{"class":108},[102,151810,108536],{"class":112},[102,151812,151813],{"class":217},"\"students.json\"",[102,151815,119],{"class":112},[102,151817,151818],{"class":104,"line":1189},[102,151819,2389],{"emptyLinePlaceholder":30},[102,151821,151822],{"class":104,"line":1203},[102,151823,2389],{"emptyLinePlaceholder":30},[102,151825,151826,151828,151831],{"class":104,"line":1209},[102,151827,31938],{"class":108},[102,151829,151830],{"class":1952}," load_students",[102,151832,31944],{"class":112},[102,151834,151835,151837,151839,151842],{"class":104,"line":1300},[102,151836,3090],{"class":108},[102,151838,38921],{"class":108},[102,151840,151841],{"class":161}," DATA_FILE",[102,151843,151844],{"class":112},".exists():\n",[102,151846,151847,151849],{"class":104,"line":1306},[102,151848,14742],{"class":108},[102,151850,51829],{"class":112},[102,151852,151853],{"class":104,"line":1318},[102,151854,2389],{"emptyLinePlaceholder":30},[102,151856,151857,151859],{"class":104,"line":1601},[102,151858,125775],{"class":108},[102,151860,3728],{"class":112},[102,151862,151863,151866,151868,151870,151872,151874,151876,151878,151880,151882,151884,151886,151888,151890],{"class":104,"line":1606},[102,151864,151865],{"class":108},"        with",[102,151867,146773],{"class":161},[102,151869,113],{"class":112},[102,151871,151806],{"class":161},[102,151873,12425],{"class":112},[102,151875,146783],{"class":217},[102,151877,12425],{"class":112},[102,151879,146788],{"class":5206},[102,151881,158],{"class":108},[102,151883,146793],{"class":217},[102,151885,13704],{"class":112},[102,151887,31374],{"class":108},[102,151889,148135],{"class":5206},[102,151891,3728],{"class":112},[102,151893,151894,151896,151898,151900],{"class":104,"line":1612},[102,151895,15722],{"class":108},[102,151897,148146],{"class":112},[102,151899,45345],{"class":5206},[102,151901,119],{"class":112},[102,151903,151904,151906],{"class":104,"line":1617},[102,151905,125803],{"class":108},[102,151907,151908],{"class":112}," json.JSONDecodeError:\n",[102,151910,151911,151913,151915,151918],{"class":104,"line":1631},[102,151912,32442],{"class":161},[102,151914,113],{"class":112},[102,151916,151917],{"class":217},"\"数据文件格式错误，已使用空数据启动\"",[102,151919,119],{"class":112},[102,151921,151922,151924],{"class":104,"line":1636},[102,151923,14742],{"class":108},[102,151925,51829],{"class":112},[102,151927,151928],{"class":104,"line":1642},[102,151929,2389],{"emptyLinePlaceholder":30},[102,151931,151932],{"class":104,"line":1663},[102,151933,2389],{"emptyLinePlaceholder":30},[102,151935,151936,151938,151941],{"class":104,"line":1668},[102,151937,31938],{"class":108},[102,151939,151940],{"class":1952}," save_students",[102,151942,151943],{"class":112},"(students):\n",[102,151945,151946,151948,151950,151952,151954,151956,151959,151961,151963,151965,151967,151969,151971,151973],{"class":104,"line":1682},[102,151947,34169],{"class":108},[102,151949,146773],{"class":161},[102,151951,113],{"class":112},[102,151953,151806],{"class":161},[102,151955,12425],{"class":112},[102,151957,151958],{"class":217},"\"w\"",[102,151960,12425],{"class":112},[102,151962,146788],{"class":5206},[102,151964,158],{"class":108},[102,151966,146793],{"class":217},[102,151968,13704],{"class":112},[102,151970,31374],{"class":108},[102,151972,148135],{"class":5206},[102,151974,3728],{"class":112},[102,151976,151977,151980,151982,151984,151986,151988,151990,151992,151995,151997,151999],{"class":104,"line":1687},[102,151978,151979],{"class":112},"        json.dump(students, ",[102,151981,45345],{"class":5206},[102,151983,12425],{"class":112},[102,151985,147119],{"class":5206},[102,151987,158],{"class":108},[102,151989,33978],{"class":161},[102,151991,12425],{"class":112},[102,151993,151994],{"class":5206},"indent",[102,151996,158],{"class":108},[102,151998,190],{"class":161},[102,152000,119],{"class":112},[102,152002,152003],{"class":104,"line":1716},[102,152004,2389],{"emptyLinePlaceholder":30},[102,152006,152007],{"class":104,"line":1721},[102,152008,2389],{"emptyLinePlaceholder":30},[102,152010,152011,152013,152016],{"class":104,"line":1738},[102,152012,31938],{"class":108},[102,152014,152015],{"class":1952}," show_menu",[102,152017,31944],{"class":112},[102,152019,152020,152022,152024,152027],{"class":104,"line":1743},[102,152021,31290],{"class":161},[102,152023,113],{"class":112},[102,152025,152026],{"class":217},"\"====== 学生管理系统 ======\"",[102,152028,119],{"class":112},[102,152030,152031,152033,152035,152038],{"class":104,"line":1748},[102,152032,31290],{"class":161},[102,152034,113],{"class":112},[102,152036,152037],{"class":217},"\"1. 添加学生\"",[102,152039,119],{"class":112},[102,152041,152042,152044,152046,152049],{"class":104,"line":1753},[102,152043,31290],{"class":161},[102,152045,113],{"class":112},[102,152047,152048],{"class":217},"\"2. 删除学生\"",[102,152050,119],{"class":112},[102,152052,152053,152055,152057,152060],{"class":104,"line":1767},[102,152054,31290],{"class":161},[102,152056,113],{"class":112},[102,152058,152059],{"class":217},"\"3. 修改学生\"",[102,152061,119],{"class":112},[102,152063,152064,152066,152068,152071],{"class":104,"line":1772},[102,152065,31290],{"class":161},[102,152067,113],{"class":112},[102,152069,152070],{"class":217},"\"4. 查询学生\"",[102,152072,119],{"class":112},[102,152074,152075,152077,152079,152082],{"class":104,"line":2566},[102,152076,31290],{"class":161},[102,152078,113],{"class":112},[102,152080,152081],{"class":217},"\"5. 显示所有学生\"",[102,152083,119],{"class":112},[102,152085,152086,152088,152090,152093],{"class":104,"line":2580},[102,152087,31290],{"class":161},[102,152089,113],{"class":112},[102,152091,152092],{"class":217},"\"0. 退出系统\"",[102,152094,119],{"class":112},[102,152096,152097],{"class":104,"line":2588},[102,152098,2389],{"emptyLinePlaceholder":30},[102,152100,152101],{"class":104,"line":2593},[102,152102,2389],{"emptyLinePlaceholder":30},[102,152104,152105,152107,152110],{"class":104,"line":2599},[102,152106,31938],{"class":108},[102,152108,152109],{"class":1952}," find_student",[102,152111,152112],{"class":112},"(students, student_id):\n",[102,152114,152115,152117,152120,152122],{"class":104,"line":2605},[102,152116,3190],{"class":108},[102,152118,152119],{"class":112}," student ",[102,152121,26034],{"class":108},[102,152123,152124],{"class":112}," students:\n",[102,152126,152127,152129,152132,152134,152136,152138],{"class":104,"line":2610},[102,152128,2486],{"class":108},[102,152130,152131],{"class":112}," student[",[102,152133,151429],{"class":217},[102,152135,4432],{"class":112},[102,152137,2938],{"class":108},[102,152139,152140],{"class":112}," student_id:\n",[102,152142,152143,152145],{"class":104,"line":7938},[102,152144,15722],{"class":108},[102,152146,152147],{"class":112}," student\n",[102,152149,152150,152152],{"class":104,"line":7962},[102,152151,4079],{"class":108},[102,152153,152154],{"class":161}," None\n",[102,152156,152157],{"class":104,"line":7967},[102,152158,2389],{"emptyLinePlaceholder":30},[102,152160,152161],{"class":104,"line":7973},[102,152162,2389],{"emptyLinePlaceholder":30},[102,152164,152165,152167,152170],{"class":104,"line":8000},[102,152166,31938],{"class":108},[102,152168,152169],{"class":1952}," input_int",[102,152171,152172],{"class":112},"(prompt):\n",[102,152174,152175,152177,152179],{"class":104,"line":8005},[102,152176,2240],{"class":108},[102,152178,95283],{"class":161},[102,152180,3728],{"class":112},[102,152182,152183,152186],{"class":104,"line":8011},[102,152184,152185],{"class":108},"        try",[102,152187,3728],{"class":112},[102,152189,152190,152192,152194,152196,152198],{"class":104,"line":8023},[102,152191,15722],{"class":108},[102,152193,2371],{"class":161},[102,152195,113],{"class":112},[102,152197,53812],{"class":161},[102,152199,152200],{"class":112},"(prompt))\n",[102,152202,152203,152206,152209],{"class":104,"line":8035},[102,152204,152205],{"class":108},"        except",[102,152207,152208],{"class":161}," ValueError",[102,152210,3728],{"class":112},[102,152212,152213,152215,152217,152220],{"class":104,"line":8047},[102,152214,34641],{"class":161},[102,152216,113],{"class":112},[102,152218,152219],{"class":217},"\"请输入整数\"",[102,152221,119],{"class":112},[102,152223,152224],{"class":104,"line":9706},[102,152225,2389],{"emptyLinePlaceholder":30},[102,152227,152228],{"class":104,"line":9731},[102,152229,2389],{"emptyLinePlaceholder":30},[102,152231,152232,152234,152237],{"class":104,"line":9754},[102,152233,31938],{"class":108},[102,152235,152236],{"class":1952}," input_float",[102,152238,152172],{"class":112},[102,152240,152241,152243,152245],{"class":104,"line":9778},[102,152242,2240],{"class":108},[102,152244,95283],{"class":161},[102,152246,3728],{"class":112},[102,152248,152249,152251],{"class":104,"line":9783},[102,152250,152185],{"class":108},[102,152252,3728],{"class":112},[102,152254,152255,152257,152259,152261,152263],{"class":104,"line":9788},[102,152256,15722],{"class":108},[102,152258,109788],{"class":161},[102,152260,113],{"class":112},[102,152262,53812],{"class":161},[102,152264,152200],{"class":112},[102,152266,152267,152269,152271],{"class":104,"line":9793},[102,152268,152205],{"class":108},[102,152270,152208],{"class":161},[102,152272,3728],{"class":112},[102,152274,152275,152277,152279,152282],{"class":104,"line":9802},[102,152276,34641],{"class":161},[102,152278,113],{"class":112},[102,152280,152281],{"class":217},"\"请输入数字\"",[102,152283,119],{"class":112},[102,152285,152286],{"class":104,"line":9807},[102,152287,2389],{"emptyLinePlaceholder":30},[102,152289,152290],{"class":104,"line":9813},[102,152291,2389],{"emptyLinePlaceholder":30},[102,152293,152294,152296,152299],{"class":104,"line":9834},[102,152295,31938],{"class":108},[102,152297,152298],{"class":1952}," add_student",[102,152300,151943],{"class":112},[102,152302,152303,152306,152308,152310,152312,152315],{"class":104,"line":9840},[102,152304,152305],{"class":112},"    student_id ",[102,152307,158],{"class":108},[102,152309,60596],{"class":161},[102,152311,113],{"class":112},[102,152313,152314],{"class":217},"\"请输入学号:\"",[102,152316,119],{"class":112},[102,152318,152319],{"class":104,"line":9854},[102,152320,2389],{"emptyLinePlaceholder":30},[102,152322,152323,152325],{"class":104,"line":9860},[102,152324,3090],{"class":108},[102,152326,152327],{"class":112}," find_student(students, student_id):\n",[102,152329,152330,152332,152334,152337],{"class":104,"line":9887},[102,152331,32442],{"class":161},[102,152333,113],{"class":112},[102,152335,152336],{"class":217},"\"学号已存在\"",[102,152338,119],{"class":112},[102,152340,152341],{"class":104,"line":9896},[102,152342,152343],{"class":108},"        return\n",[102,152345,152346],{"class":104,"line":9902},[102,152347,2389],{"emptyLinePlaceholder":30},[102,152349,152350,152353,152355,152357,152359,152362],{"class":104,"line":9910},[102,152351,152352],{"class":112},"    name ",[102,152354,158],{"class":108},[102,152356,60596],{"class":161},[102,152358,113],{"class":112},[102,152360,152361],{"class":217},"\"请输入姓名:\"",[102,152363,119],{"class":112},[102,152365,152366,152369,152371,152374,152377],{"class":104,"line":9915},[102,152367,152368],{"class":112},"    age ",[102,152370,158],{"class":108},[102,152372,152373],{"class":112}," input_int(",[102,152375,152376],{"class":217},"\"请输入年龄:\"",[102,152378,119],{"class":112},[102,152380,152381,152384,152386,152389,152392],{"class":104,"line":16594},[102,152382,152383],{"class":112},"    score ",[102,152385,158],{"class":108},[102,152387,152388],{"class":112}," input_float(",[102,152390,152391],{"class":217},"\"请输入成绩:\"",[102,152393,119],{"class":112},[102,152395,152396],{"class":104,"line":16600},[102,152397,2389],{"emptyLinePlaceholder":30},[102,152399,152400],{"class":104,"line":16623},[102,152401,152402],{"class":112},"    students.append({\n",[102,152404,152405,152408],{"class":104,"line":16629},[102,152406,152407],{"class":217},"        \"student_id\"",[102,152409,152410],{"class":112},": student_id,\n",[102,152412,152413,152416],{"class":104,"line":16652},[102,152414,152415],{"class":217},"        \"name\"",[102,152417,152418],{"class":112},": name,\n",[102,152420,152421,152424],{"class":104,"line":16666},[102,152422,152423],{"class":217},"        \"age\"",[102,152425,152426],{"class":112},": age,\n",[102,152428,152429,152432],{"class":104,"line":16686},[102,152430,152431],{"class":217},"        \"score\"",[102,152433,152434],{"class":112},": score,\n",[102,152436,152437],{"class":104,"line":16692},[102,152438,33452],{"class":112},[102,152440,152441],{"class":104,"line":16703},[102,152442,152443],{"class":112},"    save_students(students)\n",[102,152445,152446,152448,152450,152453],{"class":104,"line":16726},[102,152447,31290],{"class":161},[102,152449,113],{"class":112},[102,152451,152452],{"class":217},"\"添加成功\"",[102,152454,119],{"class":112},[102,152456,152457],{"class":104,"line":16748},[102,152458,2389],{"emptyLinePlaceholder":30},[102,152460,152461],{"class":104,"line":16753},[102,152462,2389],{"emptyLinePlaceholder":30},[102,152464,152465,152467,152470],{"class":104,"line":16759},[102,152466,31938],{"class":108},[102,152468,152469],{"class":1952}," delete_student",[102,152471,151943],{"class":112},[102,152473,152474,152476,152478,152480,152482,152485],{"class":104,"line":16773},[102,152475,152305],{"class":112},[102,152477,158],{"class":108},[102,152479,60596],{"class":161},[102,152481,113],{"class":112},[102,152483,152484],{"class":217},"\"请输入要删除的学号:\"",[102,152486,119],{"class":112},[102,152488,152489,152492,152494],{"class":104,"line":16786},[102,152490,152491],{"class":112},"    student ",[102,152493,158],{"class":108},[102,152495,152496],{"class":112}," find_student(students, student_id)\n",[102,152498,152499],{"class":104,"line":16791},[102,152500,2389],{"emptyLinePlaceholder":30},[102,152502,152503,152505,152507,152509,152511],{"class":104,"line":16805},[102,152504,3090],{"class":108},[102,152506,152119],{"class":112},[102,152508,38918],{"class":108},[102,152510,38924],{"class":161},[102,152512,3728],{"class":112},[102,152514,152515,152517,152519,152522],{"class":104,"line":16810},[102,152516,32442],{"class":161},[102,152518,113],{"class":112},[102,152520,152521],{"class":217},"\"学生不存在\"",[102,152523,119],{"class":112},[102,152525,152526],{"class":104,"line":16816},[102,152527,152343],{"class":108},[102,152529,152530],{"class":104,"line":16821},[102,152531,2389],{"emptyLinePlaceholder":30},[102,152533,152534],{"class":104,"line":16835},[102,152535,152536],{"class":112},"    students.remove(student)\n",[102,152538,152539],{"class":104,"line":16840},[102,152540,152443],{"class":112},[102,152542,152543,152545,152547,152550],{"class":104,"line":16845},[102,152544,31290],{"class":161},[102,152546,113],{"class":112},[102,152548,152549],{"class":217},"\"删除成功\"",[102,152551,119],{"class":112},[102,152553,152554],{"class":104,"line":16859},[102,152555,2389],{"emptyLinePlaceholder":30},[102,152557,152558],{"class":104,"line":16871},[102,152559,2389],{"emptyLinePlaceholder":30},[102,152561,152562,152564,152567],{"class":104,"line":16876},[102,152563,31938],{"class":108},[102,152565,152566],{"class":1952}," update_student",[102,152568,151943],{"class":112},[102,152570,152571,152573,152575,152577,152579,152582],{"class":104,"line":16889},[102,152572,152305],{"class":112},[102,152574,158],{"class":108},[102,152576,60596],{"class":161},[102,152578,113],{"class":112},[102,152580,152581],{"class":217},"\"请输入要修改的学号:\"",[102,152583,119],{"class":112},[102,152585,152586,152588,152590],{"class":104,"line":16894},[102,152587,152491],{"class":112},[102,152589,158],{"class":108},[102,152591,152496],{"class":112},[102,152593,152594],{"class":104,"line":16899},[102,152595,2389],{"emptyLinePlaceholder":30},[102,152597,152598,152600,152602,152604,152606],{"class":104,"line":16904},[102,152599,3090],{"class":108},[102,152601,152119],{"class":112},[102,152603,38918],{"class":108},[102,152605,38924],{"class":161},[102,152607,3728],{"class":112},[102,152609,152610,152612,152614,152616],{"class":104,"line":16917},[102,152611,32442],{"class":161},[102,152613,113],{"class":112},[102,152615,152521],{"class":217},[102,152617,119],{"class":112},[102,152619,152620],{"class":104,"line":16922},[102,152621,152343],{"class":108},[102,152623,152624],{"class":104,"line":32624},[102,152625,2389],{"emptyLinePlaceholder":30},[102,152627,152628,152630,152632,152634,152636,152639],{"class":104,"line":32630},[102,152629,152352],{"class":112},[102,152631,158],{"class":108},[102,152633,60596],{"class":161},[102,152635,113],{"class":112},[102,152637,152638],{"class":217},"\"请输入新姓名:\"",[102,152640,119],{"class":112},[102,152642,152643,152645,152647,152649,152652],{"class":104,"line":32636},[102,152644,152368],{"class":112},[102,152646,158],{"class":108},[102,152648,152373],{"class":112},[102,152650,152651],{"class":217},"\"请输入新年龄:\"",[102,152653,119],{"class":112},[102,152655,152656,152658,152660,152662,152665],{"class":104,"line":32642},[102,152657,152383],{"class":112},[102,152659,158],{"class":108},[102,152661,152388],{"class":112},[102,152663,152664],{"class":217},"\"请输入新成绩:\"",[102,152666,119],{"class":112},[102,152668,152669],{"class":104,"line":32648},[102,152670,2389],{"emptyLinePlaceholder":30},[102,152672,152673,152676,152678,152680,152682],{"class":104,"line":32659},[102,152674,152675],{"class":112},"    student[",[102,152677,62670],{"class":217},[102,152679,4432],{"class":112},[102,152681,158],{"class":108},[102,152683,149777],{"class":112},[102,152685,152686,152688,152690,152692,152694],{"class":104,"line":32665},[102,152687,152675],{"class":112},[102,152689,69115],{"class":217},[102,152691,4432],{"class":112},[102,152693,158],{"class":108},[102,152695,149789],{"class":112},[102,152697,152698,152700,152702,152704,152706],{"class":104,"line":32685},[102,152699,152675],{"class":112},[102,152701,151454],{"class":217},[102,152703,4432],{"class":112},[102,152705,158],{"class":108},[102,152707,1568],{"class":112},[102,152709,152710],{"class":104,"line":32691},[102,152711,2389],{"emptyLinePlaceholder":30},[102,152713,152714],{"class":104,"line":32702},[102,152715,152443],{"class":112},[102,152717,152718,152720,152722,152725],{"class":104,"line":32708},[102,152719,31290],{"class":161},[102,152721,113],{"class":112},[102,152723,152724],{"class":217},"\"修改成功\"",[102,152726,119],{"class":112},[102,152728,152729],{"class":104,"line":32714},[102,152730,2389],{"emptyLinePlaceholder":30},[102,152732,152733],{"class":104,"line":32720},[102,152734,2389],{"emptyLinePlaceholder":30},[102,152736,152737,152739,152742],{"class":104,"line":32726},[102,152738,31938],{"class":108},[102,152740,152741],{"class":1952}," query_student",[102,152743,151943],{"class":112},[102,152745,152746,152748,152750,152752,152754,152757],{"class":104,"line":32732},[102,152747,152305],{"class":112},[102,152749,158],{"class":108},[102,152751,60596],{"class":161},[102,152753,113],{"class":112},[102,152755,152756],{"class":217},"\"请输入要查询的学号:\"",[102,152758,119],{"class":112},[102,152760,152761,152763,152765],{"class":104,"line":32738},[102,152762,152491],{"class":112},[102,152764,158],{"class":108},[102,152766,152496],{"class":112},[102,152768,152769],{"class":104,"line":32744},[102,152770,2389],{"emptyLinePlaceholder":30},[102,152772,152773,152775,152777,152779,152781],{"class":104,"line":32764},[102,152774,3090],{"class":108},[102,152776,152119],{"class":112},[102,152778,38918],{"class":108},[102,152780,38924],{"class":161},[102,152782,3728],{"class":112},[102,152784,152785,152787,152789,152791],{"class":104,"line":32770},[102,152786,32442],{"class":161},[102,152788,113],{"class":112},[102,152790,152521],{"class":217},[102,152792,119],{"class":112},[102,152794,152795],{"class":104,"line":32786},[102,152796,152343],{"class":108},[102,152798,152799],{"class":104,"line":32792},[102,152800,2389],{"emptyLinePlaceholder":30},[102,152802,152803],{"class":104,"line":32806},[102,152804,152805],{"class":112},"    print_student(student)\n",[102,152807,152808],{"class":104,"line":32812},[102,152809,2389],{"emptyLinePlaceholder":30},[102,152811,152812],{"class":104,"line":32827},[102,152813,2389],{"emptyLinePlaceholder":30},[102,152815,152816,152818,152821],{"class":104,"line":32833},[102,152817,31938],{"class":108},[102,152819,152820],{"class":1952}," print_student",[102,152822,152823],{"class":112},"(student):\n",[102,152825,152826,152828],{"class":104,"line":32842},[102,152827,31290],{"class":161},[102,152829,151421],{"class":112},[102,152831,152832,152835,152837,152839,152842,152845,152847,152850],{"class":104,"line":32848},[102,152833,152834],{"class":108},"        f",[102,152836,364],{"class":217},[102,152838,1009],{"class":161},[102,152840,152841],{"class":112},"student[",[102,152843,152844],{"class":217},"'student_id'",[102,152846,1053],{"class":112},[102,152848,152849],{"class":161},"}\\t",[102,152851,25124],{"class":217},[102,152853,152854,152856,152858,152860,152862,152865,152867,152869],{"class":104,"line":32857},[102,152855,152834],{"class":108},[102,152857,364],{"class":217},[102,152859,1009],{"class":161},[102,152861,152841],{"class":112},[102,152863,152864],{"class":217},"'name'",[102,152866,1053],{"class":112},[102,152868,152849],{"class":161},[102,152870,25124],{"class":217},[102,152872,152873,152875,152877,152879,152881,152884,152886,152888],{"class":104,"line":32863},[102,152874,152834],{"class":108},[102,152876,364],{"class":217},[102,152878,1009],{"class":161},[102,152880,152841],{"class":112},[102,152882,152883],{"class":217},"'age'",[102,152885,1053],{"class":112},[102,152887,152849],{"class":161},[102,152889,25124],{"class":217},[102,152891,152892,152894,152896,152898,152900,152903,152905,152907],{"class":104,"line":32869},[102,152893,152834],{"class":108},[102,152895,364],{"class":217},[102,152897,1009],{"class":161},[102,152899,152841],{"class":112},[102,152901,152902],{"class":217},"'score'",[102,152904,1053],{"class":112},[102,152906,1059],{"class":161},[102,152908,25124],{"class":217},[102,152910,152911],{"class":104,"line":32878},[102,152912,152913],{"class":112},"    )\n",[102,152915,152916],{"class":104,"line":32884},[102,152917,2389],{"emptyLinePlaceholder":30},[102,152919,152920],{"class":104,"line":32895},[102,152921,2389],{"emptyLinePlaceholder":30},[102,152923,152924,152926,152929],{"class":104,"line":32901},[102,152925,31938],{"class":108},[102,152927,152928],{"class":1952}," show_all_students",[102,152930,151943],{"class":112},[102,152932,152933,152935,152937],{"class":104,"line":32920},[102,152934,3090],{"class":108},[102,152936,38921],{"class":108},[102,152938,152124],{"class":112},[102,152940,152941,152943,152945,152948],{"class":104,"line":32926},[102,152942,32442],{"class":161},[102,152944,113],{"class":112},[102,152946,152947],{"class":217},"\"暂无学生\"",[102,152949,119],{"class":112},[102,152951,152952],{"class":104,"line":32937},[102,152953,152343],{"class":108},[102,152955,152956],{"class":104,"line":32943},[102,152957,2389],{"emptyLinePlaceholder":30},[102,152959,152960,152962,152964,152967,152969,152972,152974,152977,152979,152982],{"class":104,"line":32963},[102,152961,31290],{"class":161},[102,152963,113],{"class":112},[102,152965,152966],{"class":217},"\"学号",[102,152968,1219],{"class":161},[102,152970,152971],{"class":217},"姓名",[102,152973,1219],{"class":161},[102,152975,152976],{"class":217},"年龄",[102,152978,1219],{"class":161},[102,152980,152981],{"class":217},"成绩\"",[102,152983,119],{"class":112},[102,152985,152986,152988,152990,152992],{"class":104,"line":32979},[102,152987,3190],{"class":108},[102,152989,152119],{"class":112},[102,152991,26034],{"class":108},[102,152993,152124],{"class":112},[102,152995,152996],{"class":104,"line":32985},[102,152997,152998],{"class":112},"        print_student(student)\n",[102,153000,153001],{"class":104,"line":32999},[102,153002,2389],{"emptyLinePlaceholder":30},[102,153004,153005],{"class":104,"line":33005},[102,153006,2389],{"emptyLinePlaceholder":30},[102,153008,153009,153011,153013],{"class":104,"line":33011},[102,153010,31938],{"class":108},[102,153012,1962],{"class":1952},[102,153014,31944],{"class":112},[102,153016,153017,153020,153022],{"class":104,"line":33022},[102,153018,153019],{"class":112},"    students ",[102,153021,158],{"class":108},[102,153023,153024],{"class":112}," load_students()\n",[102,153026,153027],{"class":104,"line":33028},[102,153028,2389],{"emptyLinePlaceholder":30},[102,153030,153031,153033,153035],{"class":104,"line":33034},[102,153032,2240],{"class":108},[102,153034,95283],{"class":161},[102,153036,3728],{"class":112},[102,153038,153039],{"class":104,"line":33044},[102,153040,153041],{"class":112},"        show_menu()\n",[102,153043,153044,153047,153049,153051,153053,153056],{"class":104,"line":33050},[102,153045,153046],{"class":112},"        choice ",[102,153048,158],{"class":108},[102,153050,60596],{"class":161},[102,153052,113],{"class":112},[102,153054,153055],{"class":217},"\"请输入操作:\"",[102,153057,119],{"class":112},[102,153059,153060],{"class":104,"line":33061},[102,153061,2389],{"emptyLinePlaceholder":30},[102,153063,153064,153066,153069,153071,153074],{"class":104,"line":33067},[102,153065,2486],{"class":108},[102,153067,153068],{"class":112}," choice ",[102,153070,2938],{"class":108},[102,153072,153073],{"class":217}," \"1\"",[102,153075,3728],{"class":112},[102,153077,153078],{"class":104,"line":33077},[102,153079,153080],{"class":112},"            add_student(students)\n",[102,153082,153083,153086,153088,153090,153093],{"class":104,"line":33082},[102,153084,153085],{"class":108},"        elif",[102,153087,153068],{"class":112},[102,153089,2938],{"class":108},[102,153091,153092],{"class":217}," \"2\"",[102,153094,3728],{"class":112},[102,153096,153097],{"class":104,"line":33088},[102,153098,153099],{"class":112},"            delete_student(students)\n",[102,153101,153102,153104,153106,153108,153111],{"class":104,"line":33137},[102,153103,153085],{"class":108},[102,153105,153068],{"class":112},[102,153107,2938],{"class":108},[102,153109,153110],{"class":217}," \"3\"",[102,153112,3728],{"class":112},[102,153114,153115],{"class":104,"line":33184},[102,153116,153117],{"class":112},"            update_student(students)\n",[102,153119,153120,153122,153124,153126,153129],{"class":104,"line":33189},[102,153121,153085],{"class":108},[102,153123,153068],{"class":112},[102,153125,2938],{"class":108},[102,153127,153128],{"class":217}," \"4\"",[102,153130,3728],{"class":112},[102,153132,153133],{"class":104,"line":33195},[102,153134,153135],{"class":112},"            query_student(students)\n",[102,153137,153138,153140,153142,153144,153147],{"class":104,"line":33214},[102,153139,153085],{"class":108},[102,153141,153068],{"class":112},[102,153143,2938],{"class":108},[102,153145,153146],{"class":217}," \"5\"",[102,153148,3728],{"class":112},[102,153150,153151],{"class":104,"line":33220},[102,153152,153153],{"class":112},"            show_all_students(students)\n",[102,153155,153156,153158,153160,153162,153165],{"class":104,"line":33240},[102,153157,153085],{"class":108},[102,153159,153068],{"class":112},[102,153161,2938],{"class":108},[102,153163,153164],{"class":217}," \"0\"",[102,153166,3728],{"class":112},[102,153168,153169,153171,153173,153176],{"class":104,"line":33246},[102,153170,34641],{"class":161},[102,153172,113],{"class":112},[102,153174,153175],{"class":217},"\"退出系统\"",[102,153177,119],{"class":112},[102,153179,153180],{"class":104,"line":33252},[102,153181,115089],{"class":108},[102,153183,153184,153186],{"class":104,"line":33262},[102,153185,2523],{"class":108},[102,153187,3728],{"class":112},[102,153189,153190,153192,153194,153197],{"class":104,"line":33267},[102,153191,34641],{"class":161},[102,153193,113],{"class":112},[102,153195,153196],{"class":217},"\"输入错误\"",[102,153198,119],{"class":112},[102,153200,153201],{"class":104,"line":33273},[102,153202,2389],{"emptyLinePlaceholder":30},[102,153204,153205],{"class":104,"line":33289},[102,153206,2389],{"emptyLinePlaceholder":30},[102,153208,153209,153211,153213,153215,153217],{"class":104,"line":33334},[102,153210,1520],{"class":108},[102,153212,31211],{"class":161},[102,153214,101550],{"class":108},[102,153216,101553],{"class":217},[102,153218,3728],{"class":112},[102,153220,153221],{"class":104,"line":33340},[102,153222,101560],{"class":112},[19,153224,153225],{},"这个项目串联了：",[56,153227,153228,153231,153234,153237,153240,153242],{},[59,153229,153230],{},"菜单循环。",[59,153232,153233],{},"函数封装。",[59,153235,153236],{},"列表字典。",[59,153238,153239],{},"JSON 读写。",[59,153241,151709],{},[59,153243,153244,28376],{},[99,153245,153246],{},"if __name__ == \"__main__\"",[14,153248,153250],{"id":153249},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153252,153253],{},"可以进一步拆成两个类：",[56,153255,153256,153261],{},[59,153257,153258,153260],{},[99,153259,149550],{},"：表示单个学生。",[59,153262,153263,153265],{},[99,153264,151576],{},"：负责学生增删改查和文件保存。",[19,153267,153268],{},"示意代码：",[93,153270,153272],{"className":30369,"code":153271,"language":30371,"meta":23,"style":23},"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",[99,153273,153274,153284,153288,153292,153296,153304,153311,153317,153323,153329,153333,153341,153347,153357,153367,153377,153387,153391,153395,153401,153409,153417,153425,153433,153441,153449],{"__ignoreMap":23},[102,153275,153276,153278,153280,153282],{"class":104,"line":105},[102,153277,30728],{"class":108},[102,153279,151134],{"class":112},[102,153281,30383],{"class":108},[102,153283,151139],{"class":112},[102,153285,153286],{"class":104,"line":24},[102,153287,2389],{"emptyLinePlaceholder":30},[102,153289,153290],{"class":104,"line":1168},[102,153291,2389],{"emptyLinePlaceholder":30},[102,153293,153294],{"class":104,"line":1183},[102,153295,151152],{"class":1952},[102,153297,153298,153300,153302],{"class":104,"line":1189},[102,153299,14684],{"class":108},[102,153301,7888],{"class":1952},[102,153303,3728],{"class":112},[102,153305,153306,153309],{"class":104,"line":1203},[102,153307,153308],{"class":112},"    student_id: ",[102,153310,151168],{"class":161},[102,153312,153313,153315],{"class":104,"line":1209},[102,153314,151165],{"class":112},[102,153316,151168],{"class":161},[102,153318,153319,153321],{"class":104,"line":1300},[102,153320,151173],{"class":112},[102,153322,151176],{"class":161},[102,153324,153325,153327],{"class":104,"line":1306},[102,153326,151181],{"class":112},[102,153328,151184],{"class":161},[102,153330,153331],{"class":104,"line":1318},[102,153332,2389],{"emptyLinePlaceholder":30},[102,153334,153335,153337,153339],{"class":104,"line":1601},[102,153336,30792],{"class":108},[102,153338,151332],{"class":1952},[102,153340,30798],{"class":112},[102,153342,153343,153345],{"class":104,"line":1606},[102,153344,14742],{"class":108},[102,153346,15562],{"class":112},[102,153348,153349,153351,153353,153355],{"class":104,"line":1612},[102,153350,151345],{"class":217},[102,153352,51428],{"class":112},[102,153354,30814],{"class":161},[102,153356,151352],{"class":112},[102,153358,153359,153361,153363,153365],{"class":104,"line":1617},[102,153360,151357],{"class":217},[102,153362,51428],{"class":112},[102,153364,30814],{"class":161},[102,153366,151364],{"class":112},[102,153368,153369,153371,153373,153375],{"class":104,"line":1631},[102,153370,151369],{"class":217},[102,153372,51428],{"class":112},[102,153374,30814],{"class":161},[102,153376,151376],{"class":112},[102,153378,153379,153381,153383,153385],{"class":104,"line":1636},[102,153380,151381],{"class":217},[102,153382,51428],{"class":112},[102,153384,30814],{"class":161},[102,153386,151388],{"class":112},[102,153388,153389],{"class":104,"line":1642},[102,153390,2518],{"class":112},[102,153392,153393],{"class":104,"line":1663},[102,153394,2389],{"emptyLinePlaceholder":30},[102,153396,153397,153399],{"class":104,"line":1668},[102,153398,150996],{"class":1952},[102,153400,150999],{"class":161},[102,153402,153403,153405,153407],{"class":104,"line":1682},[102,153404,30792],{"class":108},[102,153406,151409],{"class":1952},[102,153408,151412],{"class":112},[102,153410,153411,153413,153415],{"class":104,"line":1687},[102,153412,14742],{"class":108},[102,153414,151016],{"class":161},[102,153416,151421],{"class":112},[102,153418,153419,153421,153423],{"class":104,"line":1716},[102,153420,151426],{"class":112},[102,153422,151429],{"class":217},[102,153424,87827],{"class":112},[102,153426,153427,153429,153431],{"class":104,"line":1721},[102,153428,151426],{"class":112},[102,153430,62670],{"class":217},[102,153432,87827],{"class":112},[102,153434,153435,153437,153439],{"class":104,"line":1738},[102,153436,151426],{"class":112},[102,153438,69115],{"class":217},[102,153440,87827],{"class":112},[102,153442,153443,153445,153447],{"class":104,"line":1743},[102,153444,151426],{"class":112},[102,153446,151454],{"class":217},[102,153448,87827],{"class":112},[102,153450,153451],{"class":104,"line":1748},[102,153452,38117],{"class":112},[19,153454,153455],{},"管理器示意：",[93,153457,153459],{"className":30369,"code":153458,"language":30371,"meta":23,"style":23},"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",[99,153460,153461,153470,153478,153489,153493,153503,153516,153527,153534,153540,153544,153553,153562,153568,153575],{"__ignoreMap":23},[102,153462,153463,153465,153468],{"class":104,"line":105},[102,153464,14684],{"class":108},[102,153466,153467],{"class":1952}," StudentManager",[102,153469,3728],{"class":112},[102,153471,153472,153474,153476],{"class":104,"line":24},[102,153473,30792],{"class":108},[102,153475,30795],{"class":161},[102,153477,30798],{"class":112},[102,153479,153480,153482,153485,153487],{"class":104,"line":1168},[102,153481,30836],{"class":161},[102,153483,153484],{"class":112},".students ",[102,153486,158],{"class":108},[102,153488,51829],{"class":112},[102,153490,153491],{"class":104,"line":1183},[102,153492,2389],{"emptyLinePlaceholder":30},[102,153494,153495,153497,153500],{"class":104,"line":1189},[102,153496,30792],{"class":108},[102,153498,153499],{"class":1952}," find_by_id",[102,153501,153502],{"class":112},"(self, student_id):\n",[102,153504,153505,153507,153509,153511,153513],{"class":104,"line":1203},[102,153506,3392],{"class":108},[102,153508,152119],{"class":112},[102,153510,26034],{"class":108},[102,153512,38864],{"class":161},[102,153514,153515],{"class":112},".students:\n",[102,153517,153518,153520,153523,153525],{"class":104,"line":1209},[102,153519,4631],{"class":108},[102,153521,153522],{"class":112}," student.student_id ",[102,153524,2938],{"class":108},[102,153526,152140],{"class":112},[102,153528,153529,153532],{"class":104,"line":1300},[102,153530,153531],{"class":108},"                return",[102,153533,152147],{"class":112},[102,153535,153536,153538],{"class":104,"line":1306},[102,153537,14742],{"class":108},[102,153539,152154],{"class":161},[102,153541,153542],{"class":104,"line":1318},[102,153543,2389],{"emptyLinePlaceholder":30},[102,153545,153546,153548,153550],{"class":104,"line":1601},[102,153547,30792],{"class":108},[102,153549,5199],{"class":1952},[102,153551,153552],{"class":112},"(self, student):\n",[102,153554,153555,153557,153559],{"class":104,"line":1606},[102,153556,2486],{"class":108},[102,153558,38864],{"class":161},[102,153560,153561],{"class":112},".find_by_id(student.student_id):\n",[102,153563,153564,153566],{"class":104,"line":1612},[102,153565,15722],{"class":108},[102,153567,125798],{"class":161},[102,153569,153570,153572],{"class":104,"line":1617},[102,153571,30836],{"class":161},[102,153573,153574],{"class":112},".students.append(student)\n",[102,153576,153577,153579],{"class":104,"line":1631},[102,153578,14742],{"class":108},[102,153580,153581],{"class":161}," True\n",[19,153583,153584],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153586,153588],{"id":153587},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[73,153590,153592],{"id":153591},"_1251-数据结构","12.5.1 数据结构",[93,153594,153596],{"className":30369,"code":153595,"language":30371,"meta":23,"style":23},"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",[99,153597,153598,153606,153637,153667,153696,153725],{"__ignoreMap":23},[102,153599,153600,153602,153604],{"class":104,"line":105},[102,153601,148447],{"class":112},[102,153603,158],{"class":108},[102,153605,55438],{"class":112},[102,153607,153608,153610,153612,153614,153616,153618,153621,153623,153626,153628,153630,153632,153635],{"class":104,"line":24},[102,153609,148367],{"class":112},[102,153611,147979],{"class":217},[102,153613,51428],{"class":112},[102,153615,148590],{"class":217},[102,153617,12425],{"class":112},[102,153619,153620],{"class":217},"\"category\"",[102,153622,51428],{"class":112},[102,153624,153625],{"class":217},"\"手机\"",[102,153627,12425],{"class":112},[102,153629,84075],{"class":217},[102,153631,51428],{"class":112},[102,153633,153634],{"class":161},"12000",[102,153636,4919],{"class":112},[102,153638,153639,153641,153643,153645,153647,153649,153651,153653,153656,153658,153660,153662,153665],{"class":104,"line":1168},[102,153640,148367],{"class":112},[102,153642,147979],{"class":217},[102,153644,51428],{"class":112},[102,153646,148590],{"class":217},[102,153648,12425],{"class":112},[102,153650,153620],{"class":217},[102,153652,51428],{"class":112},[102,153654,153655],{"class":217},"\"电脑\"",[102,153657,12425],{"class":112},[102,153659,84075],{"class":217},[102,153661,51428],{"class":112},[102,153663,153664],{"class":161},"18000",[102,153666,4919],{"class":112},[102,153668,153669,153671,153673,153675,153677,153679,153681,153683,153685,153687,153689,153691,153694],{"class":104,"line":1183},[102,153670,148367],{"class":112},[102,153672,147979],{"class":217},[102,153674,51428],{"class":112},[102,153676,148611],{"class":217},[102,153678,12425],{"class":112},[102,153680,153620],{"class":217},[102,153682,51428],{"class":112},[102,153684,153625],{"class":217},[102,153686,12425],{"class":112},[102,153688,84075],{"class":217},[102,153690,51428],{"class":112},[102,153692,153693],{"class":161},"15000",[102,153695,4919],{"class":112},[102,153697,153698,153700,153702,153704,153706,153708,153710,153712,153714,153716,153718,153720,153723],{"class":104,"line":1189},[102,153699,148367],{"class":112},[102,153701,147979],{"class":217},[102,153703,51428],{"class":112},[102,153705,148611],{"class":217},[102,153707,12425],{"class":112},[102,153709,153620],{"class":217},[102,153711,51428],{"class":112},[102,153713,153655],{"class":217},[102,153715,12425],{"class":112},[102,153717,84075],{"class":217},[102,153719,51428],{"class":112},[102,153721,153722],{"class":161},"16000",[102,153724,4919],{"class":112},[102,153726,153727],{"class":104,"line":1203},[102,153728,33237],{"class":112},[73,153730,153732],{"id":153731},"_1252-按日期统计","12.5.2 按日期统计",[93,153734,153736],{"className":30369,"code":153735,"language":30371,"meta":23,"style":23},"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",[99,153737,153738,153747,153751,153762,153776,153789,153808,153812],{"__ignoreMap":23},[102,153739,153740,153743,153745],{"class":104,"line":105},[102,153741,153742],{"class":112},"daily_total ",[102,153744,158],{"class":108},[102,153746,87859],{"class":112},[102,153748,153749],{"class":104,"line":24},[102,153750,2389],{"emptyLinePlaceholder":30},[102,153752,153753,153755,153757,153759],{"class":104,"line":1168},[102,153754,3014],{"class":108},[102,153756,148191],{"class":112},[102,153758,26034],{"class":108},[102,153760,153761],{"class":112}," sales:\n",[102,153763,153764,153767,153769,153772,153774],{"class":104,"line":1183},[102,153765,153766],{"class":112},"    date ",[102,153768,158],{"class":108},[102,153770,153771],{"class":112}," item[",[102,153773,147979],{"class":217},[102,153775,33237],{"class":112},[102,153777,153778,153781,153783,153785,153787],{"class":104,"line":1189},[102,153779,153780],{"class":112},"    amount ",[102,153782,158],{"class":108},[102,153784,153771],{"class":112},[102,153786,84075],{"class":217},[102,153788,33237],{"class":112},[102,153790,153791,153794,153796,153799,153801,153803,153805],{"class":104,"line":1203},[102,153792,153793],{"class":112},"    daily_total[date] ",[102,153795,158],{"class":108},[102,153797,153798],{"class":112}," daily_total.get(date, ",[102,153800,304],{"class":161},[102,153802,13704],{"class":112},[102,153804,594],{"class":108},[102,153806,153807],{"class":112}," amount\n",[102,153809,153810],{"class":104,"line":1209},[102,153811,2389],{"emptyLinePlaceholder":30},[102,153813,153814,153816],{"class":104,"line":1300},[102,153815,30406],{"class":161},[102,153817,153818],{"class":112},"(daily_total)\n",[73,153820,153822],{"id":153821},"_1253-按类别统计","12.5.3 按类别统计",[93,153824,153826],{"className":30369,"code":153825,"language":30371,"meta":23,"style":23},"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",[99,153827,153828,153837,153841,153851,153864,153876,153894,153898],{"__ignoreMap":23},[102,153829,153830,153833,153835],{"class":104,"line":105},[102,153831,153832],{"class":112},"category_total ",[102,153834,158],{"class":108},[102,153836,87859],{"class":112},[102,153838,153839],{"class":104,"line":24},[102,153840,2389],{"emptyLinePlaceholder":30},[102,153842,153843,153845,153847,153849],{"class":104,"line":1168},[102,153844,3014],{"class":108},[102,153846,148191],{"class":112},[102,153848,26034],{"class":108},[102,153850,153761],{"class":112},[102,153852,153853,153856,153858,153860,153862],{"class":104,"line":1183},[102,153854,153855],{"class":112},"    category ",[102,153857,158],{"class":108},[102,153859,153771],{"class":112},[102,153861,153620],{"class":217},[102,153863,33237],{"class":112},[102,153865,153866,153868,153870,153872,153874],{"class":104,"line":1189},[102,153867,153780],{"class":112},[102,153869,158],{"class":108},[102,153871,153771],{"class":112},[102,153873,84075],{"class":217},[102,153875,33237],{"class":112},[102,153877,153878,153881,153883,153886,153888,153890,153892],{"class":104,"line":1203},[102,153879,153880],{"class":112},"    category_total[category] ",[102,153882,158],{"class":108},[102,153884,153885],{"class":112}," category_total.get(category, ",[102,153887,304],{"class":161},[102,153889,13704],{"class":112},[102,153891,594],{"class":108},[102,153893,153807],{"class":112},[102,153895,153896],{"class":104,"line":1209},[102,153897,2389],{"emptyLinePlaceholder":30},[102,153899,153900,153902],{"class":104,"line":1300},[102,153901,30406],{"class":161},[102,153903,153904],{"class":112},"(category_total)\n",[73,153906,153908],{"id":153907},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[93,153910,153912],{"className":30369,"code":153911,"language":30371,"meta":23,"style":23},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[99,153913,153914,153939],{"__ignoreMap":23},[102,153915,153916,153919,153921,153923,153926,153929,153932,153935,153937],{"class":104,"line":105},[102,153917,153918],{"class":112},"top_date, top_amount ",[102,153920,158],{"class":108},[102,153922,5941],{"class":161},[102,153924,153925],{"class":112},"(daily_total.items(), ",[102,153927,153928],{"class":5206},"key",[102,153930,153931],{"class":108},"=lambda",[102,153933,153934],{"class":112}," item: item[",[102,153936,330],{"class":161},[102,153938,4646],{"class":112},[102,153940,153941,153943],{"class":104,"line":24},[102,153942,30406],{"class":161},[102,153944,153945],{"class":112},"(top_date, top_amount)\n",[14,153947,153949],{"id":153948},"_126-绘制柱状图","12.6 绘制柱状图",[93,153951,153953],{"className":30369,"code":153952,"language":30371,"meta":23,"style":23},"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",[99,153954,153955,153969,153980,153984,153992,154004,154016,154027,154031,154035,154045,154056,154070,154075,154092,154109,154125,154129],{"__ignoreMap":23},[102,153956,153957,153959,153961,153963,153965,153967],{"class":104,"line":105},[102,153958,30728],{"class":108},[102,153960,147361],{"class":112},[102,153962,30383],{"class":108},[102,153964,147366],{"class":112},[102,153966,31374],{"class":108},[102,153968,147371],{"class":112},[102,153970,153971,153973,153975,153977],{"class":104,"line":24},[102,153972,30728],{"class":108},[102,153974,147220],{"class":112},[102,153976,30383],{"class":108},[102,153978,153979],{"class":112}," Bar\n",[102,153981,153982],{"class":104,"line":1168},[102,153983,2389],{"emptyLinePlaceholder":30},[102,153985,153986,153988,153990],{"class":104,"line":1183},[102,153987,153832],{"class":112},[102,153989,158],{"class":108},[102,153991,15562],{"class":112},[102,153993,153994,153997,153999,154002],{"class":104,"line":1189},[102,153995,153996],{"class":217},"    \"手机\"",[102,153998,51428],{"class":112},[102,154000,154001],{"class":161},"27000",[102,154003,31457],{"class":112},[102,154005,154006,154009,154011,154014],{"class":104,"line":1203},[102,154007,154008],{"class":217},"    \"电脑\"",[102,154010,51428],{"class":112},[102,154012,154013],{"class":161},"34000",[102,154015,31457],{"class":112},[102,154017,154018,154021,154023,154025],{"class":104,"line":1209},[102,154019,154020],{"class":217},"    \"耳机\"",[102,154022,51428],{"class":112},[102,154024,124390],{"class":161},[102,154026,31457],{"class":112},[102,154028,154029],{"class":104,"line":1300},[102,154030,1554],{"class":112},[102,154032,154033],{"class":104,"line":1306},[102,154034,2389],{"emptyLinePlaceholder":30},[102,154036,154037,154040,154042],{"class":104,"line":1318},[102,154038,154039],{"class":112},"bar ",[102,154041,158],{"class":108},[102,154043,154044],{"class":112}," Bar()\n",[102,154046,154047,154050,154053],{"class":104,"line":1601},[102,154048,154049],{"class":112},"bar.add_xaxis(",[102,154051,154052],{"class":161},"list",[102,154054,154055],{"class":112},"(category_total.keys()))\n",[102,154057,154058,154061,154063,154065,154067],{"class":104,"line":1606},[102,154059,154060],{"class":112},"bar.add_yaxis(",[102,154062,147277],{"class":217},[102,154064,12425],{"class":112},[102,154066,154052],{"class":161},[102,154068,154069],{"class":112},"(category_total.values()))\n",[102,154071,154072],{"class":104,"line":1612},[102,154073,154074],{"class":112},"bar.set_global_opts(\n",[102,154076,154077,154079,154081,154083,154085,154087,154090],{"class":104,"line":1617},[102,154078,147455],{"class":5206},[102,154080,158],{"class":108},[102,154082,147460],{"class":112},[102,154084,51398],{"class":5206},[102,154086,158],{"class":108},[102,154088,154089],{"class":217},"\"品类销售额\"",[102,154091,38038],{"class":112},[102,154093,154094,154096,154098,154100,154102,154104,154107],{"class":104,"line":1631},[102,154095,147474],{"class":5206},[102,154097,158],{"class":108},[102,154099,147479],{"class":112},[102,154101,79801],{"class":5206},[102,154103,158],{"class":108},[102,154105,154106],{"class":217},"\"品类\"",[102,154108,38038],{"class":112},[102,154110,154111,154113,154115,154117,154119,154121,154123],{"class":104,"line":1636},[102,154112,147493],{"class":5206},[102,154114,158],{"class":108},[102,154116,147479],{"class":112},[102,154118,79801],{"class":5206},[102,154120,158],{"class":108},[102,154122,147277],{"class":217},[102,154124,38038],{"class":112},[102,154126,154127],{"class":104,"line":1642},[102,154128,119],{"class":112},[102,154130,154131,154134,154137],{"class":104,"line":1663},[102,154132,154133],{"class":112},"bar.render(",[102,154135,154136],{"class":217},"\"category_sales.html\"",[102,154138,119],{"class":112},[14,154140,154142],{"id":154141},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154144,154145],{},"时间线适合展示不同日期、月份、年份的数据变化。",[93,154147,154149],{"className":30369,"code":154148,"language":30371,"meta":23,"style":23},"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",[99,154150,154151,154165,154176,154180,154188,154212,154235,154260,154264,154268,154278,154282,154293,154302,154312,154326,154357,154362,154366],{"__ignoreMap":23},[102,154152,154153,154155,154157,154159,154161,154163],{"class":104,"line":105},[102,154154,30728],{"class":108},[102,154156,147361],{"class":112},[102,154158,30383],{"class":108},[102,154160,147366],{"class":112},[102,154162,31374],{"class":108},[102,154164,147371],{"class":112},[102,154166,154167,154169,154171,154173],{"class":104,"line":24},[102,154168,30728],{"class":108},[102,154170,147220],{"class":112},[102,154172,30383],{"class":108},[102,154174,154175],{"class":112}," Bar, Timeline\n",[102,154177,154178],{"class":104,"line":1168},[102,154179,2389],{"emptyLinePlaceholder":30},[102,154181,154182,154184,154186],{"class":104,"line":1183},[102,154183,101649],{"class":112},[102,154185,158],{"class":108},[102,154187,15562],{"class":112},[102,154189,154190,154193,154196,154198,154200,154202,154204,154206,154208,154210],{"class":104,"line":1189},[102,154191,154192],{"class":217},"    \"2024-10-01\"",[102,154194,154195],{"class":112},": {",[102,154197,153625],{"class":217},[102,154199,51428],{"class":112},[102,154201,153634],{"class":161},[102,154203,12425],{"class":112},[102,154205,153655],{"class":217},[102,154207,51428],{"class":112},[102,154209,153664],{"class":161},[102,154211,4919],{"class":112},[102,154213,154214,154217,154219,154221,154223,154225,154227,154229,154231,154233],{"class":104,"line":1203},[102,154215,154216],{"class":217},"    \"2024-10-02\"",[102,154218,154195],{"class":112},[102,154220,153625],{"class":217},[102,154222,51428],{"class":112},[102,154224,153693],{"class":161},[102,154226,12425],{"class":112},[102,154228,153655],{"class":217},[102,154230,51428],{"class":112},[102,154232,153722],{"class":161},[102,154234,4919],{"class":112},[102,154236,154237,154240,154242,154244,154246,154249,154251,154253,154255,154258],{"class":104,"line":1209},[102,154238,154239],{"class":217},"    \"2024-10-03\"",[102,154241,154195],{"class":112},[102,154243,153625],{"class":217},[102,154245,51428],{"class":112},[102,154247,154248],{"class":161},"17000",[102,154250,12425],{"class":112},[102,154252,153655],{"class":217},[102,154254,51428],{"class":112},[102,154256,154257],{"class":161},"19000",[102,154259,4919],{"class":112},[102,154261,154262],{"class":104,"line":1300},[102,154263,1554],{"class":112},[102,154265,154266],{"class":104,"line":1306},[102,154267,2389],{"emptyLinePlaceholder":30},[102,154269,154270,154273,154275],{"class":104,"line":1318},[102,154271,154272],{"class":112},"timeline ",[102,154274,158],{"class":108},[102,154276,154277],{"class":112}," Timeline()\n",[102,154279,154280],{"class":104,"line":1601},[102,154281,2389],{"emptyLinePlaceholder":30},[102,154283,154284,154286,154289,154291],{"class":104,"line":1606},[102,154285,3014],{"class":108},[102,154287,154288],{"class":112}," date, category_data ",[102,154290,26034],{"class":108},[102,154292,149130],{"class":112},[102,154294,154295,154298,154300],{"class":104,"line":1612},[102,154296,154297],{"class":112},"    bar ",[102,154299,158],{"class":108},[102,154301,154044],{"class":112},[102,154303,154304,154307,154309],{"class":104,"line":1617},[102,154305,154306],{"class":112},"    bar.add_xaxis(",[102,154308,154052],{"class":161},[102,154310,154311],{"class":112},"(category_data.keys()))\n",[102,154313,154314,154317,154319,154321,154323],{"class":104,"line":1631},[102,154315,154316],{"class":112},"    bar.add_yaxis(",[102,154318,147277],{"class":217},[102,154320,12425],{"class":112},[102,154322,154052],{"class":161},[102,154324,154325],{"class":112},"(category_data.values()))\n",[102,154327,154328,154331,154334,154336,154338,154340,154342,154344,154346,154348,154350,154352,154355],{"class":104,"line":1636},[102,154329,154330],{"class":112},"    bar.set_global_opts(",[102,154332,154333],{"class":5206},"title_opts",[102,154335,158],{"class":108},[102,154337,147460],{"class":112},[102,154339,51398],{"class":5206},[102,154341,158],{"class":108},[102,154343,165],{"class":108},[102,154345,364],{"class":217},[102,154347,1009],{"class":161},[102,154349,73917],{"class":112},[102,154351,1059],{"class":161},[102,154353,154354],{"class":217},"销售额\"",[102,154356,30488],{"class":112},[102,154358,154359],{"class":104,"line":1642},[102,154360,154361],{"class":112},"    timeline.add(bar, date)\n",[102,154363,154364],{"class":104,"line":1663},[102,154365,2389],{"emptyLinePlaceholder":30},[102,154367,154368,154371,154374],{"class":104,"line":1668},[102,154369,154370],{"class":112},"timeline.render(",[102,154372,154373],{"class":217},"\"timeline_sales.html\"",[102,154375,119],{"class":112},[14,154377,154379],{"id":154378},"_128-绘制地图","12.8 绘制地图",[19,154381,154382],{},"地图适合展示地区数据。",[93,154384,154386],{"className":30369,"code":154385,"language":30371,"meta":23,"style":23},"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",[99,154387,154388,154402,154413,154417,154425,154438,154450,154463,154476,154480,154484,154494,154509,154514,154531,154550,154554],{"__ignoreMap":23},[102,154389,154390,154392,154394,154396,154398,154400],{"class":104,"line":105},[102,154391,30728],{"class":108},[102,154393,147361],{"class":112},[102,154395,30383],{"class":108},[102,154397,147366],{"class":112},[102,154399,31374],{"class":108},[102,154401,147371],{"class":112},[102,154403,154404,154406,154408,154410],{"class":104,"line":24},[102,154405,30728],{"class":108},[102,154407,147220],{"class":112},[102,154409,30383],{"class":108},[102,154411,154412],{"class":112}," Map\n",[102,154414,154415],{"class":104,"line":1168},[102,154416,2389],{"emptyLinePlaceholder":30},[102,154418,154419,154421,154423],{"class":104,"line":1183},[102,154420,101649],{"class":112},[102,154422,158],{"class":108},[102,154424,55438],{"class":112},[102,154426,154427,154430,154432,154434,154436],{"class":104,"line":1189},[102,154428,154429],{"class":112},"    (",[102,154431,69260],{"class":217},[102,154433,12425],{"class":112},[102,154435,930],{"class":161},[102,154437,38038],{"class":112},[102,154439,154440,154442,154444,154446,154448],{"class":104,"line":1203},[102,154441,154429],{"class":112},[102,154443,69280],{"class":217},[102,154445,12425],{"class":112},[102,154447,147294],{"class":161},[102,154449,38038],{"class":112},[102,154451,154452,154454,154457,154459,154461],{"class":104,"line":1209},[102,154453,154429],{"class":112},[102,154455,154456],{"class":217},"\"广东\"",[102,154458,12425],{"class":112},[102,154460,1711],{"class":161},[102,154462,38038],{"class":112},[102,154464,154465,154467,154470,154472,154474],{"class":104,"line":1300},[102,154466,154429],{"class":112},[102,154468,154469],{"class":217},"\"浙江\"",[102,154471,12425],{"class":112},[102,154473,147299],{"class":161},[102,154475,38038],{"class":112},[102,154477,154478],{"class":104,"line":1306},[102,154479,33237],{"class":112},[102,154481,154482],{"class":104,"line":1318},[102,154483,2389],{"emptyLinePlaceholder":30},[102,154485,154486,154489,154491],{"class":104,"line":1601},[102,154487,154488],{"class":112},"map_chart ",[102,154490,158],{"class":108},[102,154492,154493],{"class":112}," Map()\n",[102,154495,154496,154499,154501,154504,154507],{"class":104,"line":1606},[102,154497,154498],{"class":112},"map_chart.add(",[102,154500,147277],{"class":217},[102,154502,154503],{"class":112},", data, ",[102,154505,154506],{"class":217},"\"china\"",[102,154508,119],{"class":112},[102,154510,154511],{"class":104,"line":1612},[102,154512,154513],{"class":112},"map_chart.set_global_opts(\n",[102,154515,154516,154518,154520,154522,154524,154526,154529],{"class":104,"line":1617},[102,154517,147455],{"class":5206},[102,154519,158],{"class":108},[102,154521,147460],{"class":112},[102,154523,51398],{"class":5206},[102,154525,158],{"class":108},[102,154527,154528],{"class":217},"\"地区销售额\"",[102,154530,38038],{"class":112},[102,154532,154533,154536,154538,154541,154544,154546,154548],{"class":104,"line":1631},[102,154534,154535],{"class":5206},"    visualmap_opts",[102,154537,158],{"class":108},[102,154539,154540],{"class":112},"opts.VisualMapOpts(",[102,154542,154543],{"class":5206},"max_",[102,154545,158],{"class":108},[102,154547,1711],{"class":161},[102,154549,38038],{"class":112},[102,154551,154552],{"class":104,"line":1636},[102,154553,119],{"class":112},[102,154555,154556,154559,154562],{"class":104,"line":1642},[102,154557,154558],{"class":112},"map_chart.render(",[102,154560,154561],{"class":217},"\"map_sales.html\"",[102,154563,119],{"class":112},[19,154565,154566],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154568,154570],{"id":154569},"_129-项目拆分建议","12.9 项目拆分建议",[19,154572,154573],{},"当代码超过一个文件时，可以这样组织：",[93,154575,154578],{"className":154576,"code":154577,"language":5177,"meta":23},[5175],"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",[99,154579,154577],{"__ignoreMap":23},[19,154581,154582],{},"职责：",[56,154584,154585,154591,154597,154603],{},[59,154586,154587,154590],{},[99,154588,154589],{},"main.py","：程序入口。",[59,154592,154593,154596],{},[99,154594,154595],{},"file_utils.py","：读写 JSON。",[59,154598,154599,154602],{},[99,154600,154601],{},"sales_service.py","：统计销售数据。",[59,154604,154605,154608],{},[99,154606,154607],{},"chart_builder.py","：生成图表。",[14,154610,154612],{"id":154611},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154614,154615],{},"语法基础：",[56,154617,154618,154621,154624,154627],{},[59,154619,154620],{},"会写变量、注释、输入输出。",[59,154622,154623],{},"会使用 int、float、str、bool。",[59,154625,154626],{},"会做类型转换。",[59,154628,154629],{},"会使用 f-string 格式化输出。",[19,154631,154632],{},"流程控制：",[56,154634,154635,154641,154647,154655],{},[59,154636,154637,154638,28376],{},"会写 ",[99,154639,154640],{},"if elif else",[59,154642,154637,154643,101009,154645,28376],{},[99,154644,108654],{},[99,154646,3014],{},[59,154648,154649,154650,101009,154652,28376],{},"理解 ",[99,154651,2042],{},[99,154653,154654],{},"continue",[59,154656,154657],{},"能写嵌套循环。",[19,154659,154660],{},"函数：",[56,154662,154663,154666,154669,154672],{},[59,154664,154665],{},"会定义和调用函数。",[59,154667,154668],{},"理解参数和返回值。",[59,154670,154671],{},"知道局部变量和全局变量。",[59,154673,154674],{},"会使用默认参数、关键字参数、不定长参数。",[19,154676,154677],{},"容器：",[56,154679,154680,154683,154686,154689,154692],{},[59,154681,154682],{},"会使用列表增删改查。",[59,154684,154685],{},"会遍历列表、字典。",[59,154687,154688],{},"会使用切片。",[59,154690,154691],{},"会用集合去重。",[59,154693,154694],{},"会处理列表嵌套字典。",[19,154696,154697],{},"文件和模块：",[56,154699,154700,154703,154706,154709,154712],{},[59,154701,154702],{},"会读写文本文件。",[59,154704,154705],{},"会读写 JSON。",[59,154707,154708],{},"会捕获常见异常。",[59,154710,154711],{},"会导入模块和第三方包。",[59,154713,154714],{},"会创建简单包结构。",[19,154716,154717],{},"项目能力：",[56,154719,154720,154723,154726,154729,154732],{},[59,154721,154722],{},"能把代码拆成函数。",[59,154724,154725],{},"能把数据保存到文件。",[59,154727,154728],{},"能处理用户输入错误。",[59,154730,154731],{},"能写一个完整菜单程序。",[59,154733,154734],{},"能用 pyecharts 生成图表。",[14,154736,154738],{"id":154737},"_1211-推荐练习顺序","12.11 推荐练习顺序",[56,154740,154741,154744,154747,154750,154753,154756,154759,154762],{},[59,154742,154743],{},"猜数字游戏。",[59,154745,154746],{},"ATM 菜单程序。",[59,154748,154749],{},"学生成绩统计。",[59,154751,154752],{},"学生管理系统函数版。",[59,154754,154755],{},"学生管理系统文件持久化版。",[59,154757,154758],{},"学生管理系统面向对象版。",[59,154760,154761],{},"销售数据统计。",[59,154763,154764],{},"销售数据可视化。",[14,154766,154768],{"id":154767},"_1212-常见学习误区","12.12 常见学习误区",[56,154770,154771,154774,154777,154780,154783,154786,154789],{},[59,154772,154773],{},"只看视频不敲代码。",[59,154775,154776],{},"一报错就复制错误去搜，不先读报错位置。",[59,154778,154779],{},"变量名随便写，后续自己看不懂。",[59,154781,154782],{},"所有代码都写在一个文件一个函数里。",[59,154784,154785],{},"不保存练习代码，复习时没有材料。",[59,154787,154788],{},"还没掌握列表字典就急着学框架。",[59,154790,154791],{},"不会读官方文档，只依赖教程。",[14,154793,154795],{"id":154794},"_1213-如何读报错","12.13 如何读报错",[19,154797,154798],{},"报错通常从下往上看最后几行。",[19,154800,15125],{},[93,154802,154805],{"className":154803,"code":154804,"language":5177,"meta":23},[5175],"ValueError: invalid literal for int() with base 10: 'abc'\n",[99,154806,154804],{"__ignoreMap":23},[19,154808,24590],{},[56,154810,154811,154817,154827],{},[59,154812,154813,154814,28376],{},"异常类型是 ",[99,154815,154816],{},"ValueError",[59,154818,107336,154819,154822,154823,154826],{},[99,154820,154821],{},"int()"," 无法把 ",[99,154824,154825],{},"'abc'"," 转成整数。",[59,154828,154829],{},"应该检查输入内容或增加异常处理。",[19,154831,154832],{},"再看文件名和行号：",[93,154834,154837],{"className":154835,"code":154836,"language":5177,"meta":23},[5175],"File \"main.py\", line 10, in \u003Cmodule>\n",[99,154838,154836],{"__ignoreMap":23},[19,154840,154841,154842,154844],{},"表示错误发生在 ",[99,154843,154589],{}," 第 10 行。",[14,154846,154848],{"id":154847},"_1214-后续学习方向","12.14 后续学习方向",[19,154850,154851],{},"Python 基础完成后，可以按兴趣选择方向：",[56,154853,154854,154866,154875,154887,154898,154907,154917],{},[59,154855,154856,154857,325,154860,325,154863,28376],{},"自动化办公：",[99,154858,154859],{},"openpyxl",[99,154861,154862],{},"python-docx",[99,154864,154865],{},"pdfplumber",[59,154867,154868,154869,325,154871,325,154873,28376],{},"数据分析：",[99,154870,100617],{},[99,154872,146167],{},[99,154874,146175],{},[59,154876,154877,154878,325,154881,325,154884,28376],{},"Web 后端：",[99,154879,154880],{},"Flask",[99,154882,154883],{},"FastAPI",[99,154885,154886],{},"Django",[59,154888,154889,154890,325,154892,325,154895,28376],{},"爬虫：",[99,154891,146152],{},[99,154893,154894],{},"BeautifulSoup",[99,154896,154897],{},"Scrapy",[59,154899,154900,154901,325,154903,154906],{},"测试开发：",[99,154902,146199],{},[99,154904,154905],{},"selenium","、接口测试。",[59,154908,154909,154910,325,154912,325,154914,28376],{},"人工智能：",[99,154911,100617],{},[99,154913,146167],{},[99,154915,154916],{},"pytorch",[59,154918,154919,154920,325,154922,325,154925,28376],{},"运维脚本：",[99,154921,145768],{},[99,154923,154924],{},"subprocess",[99,154926,154927],{},"paramiko",[19,154929,154930],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,154932,154934],{"id":154933},"_1215-结课练习","12.15 结课练习",[56,154936,154937,154940,154943,154946,154949,154952,154955,154958],{},[59,154938,154939],{},"完成函数版学生管理系统。",[59,154941,154942],{},"给学生管理系统增加 JSON 持久化。",[59,154944,154945],{},"给学生管理系统增加异常处理。",[59,154947,154948],{},"把学生管理系统改成面向对象版。",[59,154950,154951],{},"使用 pyecharts 绘制学生成绩柱状图。",[59,154953,154954],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[59,154956,154957],{},"按品类统计销售额并绘制柱状图。",[59,154959,154960],{},"写一份自己的 Python 学习路线图。",[5116,154962,154963],{},"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":23,"searchDepth":24,"depth":24,"links":154965},[154966,154967,154970,154971,154972,154978,154979,154980,154981,154982,154983,154984,154985,154986,154987],{"id":151682,"depth":24,"text":151683},{"id":151732,"depth":24,"text":151733,"children":154968},[154969],{"id":151736,"depth":1168,"text":151737},{"id":151775,"depth":24,"text":151776},{"id":153249,"depth":24,"text":153250},{"id":153587,"depth":24,"text":153588,"children":154973},[154974,154975,154976,154977],{"id":153591,"depth":1168,"text":153592},{"id":153731,"depth":1168,"text":153732},{"id":153821,"depth":1168,"text":153822},{"id":153907,"depth":1168,"text":153908},{"id":153948,"depth":24,"text":153949},{"id":154141,"depth":24,"text":154142},{"id":154378,"depth":24,"text":154379},{"id":154569,"depth":24,"text":154570},{"id":154611,"depth":24,"text":154612},{"id":154737,"depth":24,"text":154738},{"id":154767,"depth":24,"text":154768},{"id":154794,"depth":24,"text":154795},{"id":154847,"depth":24,"text":154848},{"id":154933,"depth":24,"text":154934},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151674,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154994,"title":154995,"body":154996,"description":27,"extension":28,"meta":157465,"navigation":30,"path":157466,"seo":157467,"stem":157468,"__hash__":157469},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":154997,"toc":157440},[154998,155001,155005,155008,155011,155031,155034,155057,155060,155063,155085,155088,155110,155114,155117,155157,155160,155281,155285,155288,155328,155331,155355,155358,155362,155365,155379,155412,155415,155450,155453,155476,155479,155512,155515,155517,155523,155598,155601,155607,155624,155664,155668,155671,155717,155719,155757,155760,155795,155798,155833,155836,155868,155871,155890,155894,155898,156011,156013,156088,156092,156138,156141,156167,156176,156180,156183,156246,156254,156282,156286,156326,156391,156395,156398,156437,156440,156485,156488,156549,156553,156580,156583,156611,156614,156618,156622,156687,156690,156728,156731,156763,156767,156866,156870,156873,156946,156949,156997,157001,157007,157047,157050,157097,157100,157149,157153,157155,157169,157171,157352,157356,157383,157403,157410,157414,157431,157437],[10,154999,154995],{"id":155000},"_2-基础语法变量与字符串",[14,155002,155004],{"id":155003},"_21-注释","2.1 注释",[19,155006,155007],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155009,155010],{},"单行注释：",[93,155012,155014],{"className":30369,"code":155013,"language":30371,"meta":23,"style":23},"# 这是单行注释\nprint(\"hello\")\n",[99,155015,155016,155021],{"__ignoreMap":23},[102,155017,155018],{"class":104,"line":105},[102,155019,155020],{"class":171},"# 这是单行注释\n",[102,155022,155023,155025,155027,155029],{"class":104,"line":24},[102,155024,30406],{"class":161},[102,155026,113],{"class":112},[102,155028,5834],{"class":217},[102,155030,119],{"class":112},[19,155032,155033],{},"多行说明常用三引号：",[93,155035,155037],{"className":30369,"code":155036,"language":30371,"meta":23,"style":23},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[99,155038,155039,155043,155048,155053],{"__ignoreMap":23},[102,155040,155041],{"class":104,"line":105},[102,155042,95689],{"class":217},[102,155044,155045],{"class":104,"line":24},[102,155046,155047],{"class":217},"这是多行说明。\n",[102,155049,155050],{"class":104,"line":1168},[102,155051,155052],{"class":217},"常用于文件顶部说明、函数说明等。\n",[102,155054,155055],{"class":104,"line":1183},[102,155056,95689],{"class":217},[19,155058,155059],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155061,155062],{},"不好：",[93,155064,155066],{"className":30369,"code":155065,"language":30371,"meta":23,"style":23},"# age 加 1\nage = age + 1\n",[99,155067,155068,155073],{"__ignoreMap":23},[102,155069,155070],{"class":104,"line":105},[102,155071,155072],{"class":171},"# age 加 1\n",[102,155074,155075,155077,155079,155081,155083],{"class":104,"line":24},[102,155076,146528],{"class":112},[102,155078,158],{"class":108},[102,155080,15697],{"class":112},[102,155082,594],{"class":108},[102,155084,55690],{"class":161},[19,155086,155087],{},"较好：",[93,155089,155091],{"className":30369,"code":155090,"language":30371,"meta":23,"style":23},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[99,155092,155093,155098],{"__ignoreMap":23},[102,155094,155095],{"class":104,"line":105},[102,155096,155097],{"class":171},"# 用户过完生日后，年龄增加一岁\n",[102,155099,155100,155102,155104,155106,155108],{"class":104,"line":24},[102,155101,146528],{"class":112},[102,155103,158],{"class":108},[102,155105,15697],{"class":112},[102,155107,594],{"class":108},[102,155109,55690],{"class":161},[14,155111,155113],{"id":155112},"_22-字面量","2.2 字面量",[19,155115,155116],{},"字面量就是代码中直接写出来的数据。",[93,155118,155120],{"className":30369,"code":155119,"language":30371,"meta":23,"style":23},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[99,155121,155122,155129,155136,155143,155150],{"__ignoreMap":23},[102,155123,155124,155126],{"class":104,"line":105},[102,155125,424],{"class":161},[102,155127,155128],{"class":171},"          # 整数\n",[102,155130,155131,155133],{"class":104,"line":24},[102,155132,162],{"class":161},[102,155134,155135],{"class":171},"         # 小数\n",[102,155137,155138,155140],{"class":104,"line":1168},[102,155139,5834],{"class":217},[102,155141,155142],{"class":171},"      # 字符串\n",[102,155144,155145,155147],{"class":104,"line":1183},[102,155146,31467],{"class":161},[102,155148,155149],{"class":171},"         # 布尔值\n",[102,155151,155152,155154],{"class":104,"line":1189},[102,155153,95677],{"class":161},[102,155155,155156],{"class":171},"         # 空值\n",[19,155158,155159],{},"常见字面量类型：",[250,155161,155162,155172],{},[253,155163,155164],{},[256,155165,155166,155168,155170],{},[259,155167,23727],{},[259,155169,27483],{},[259,155171,25860],{},[297,155173,155174,155185,155196,155207,155219,155231,155243,155256,155268],{},[256,155175,155176,155178,155182],{},[302,155177,116],{},[302,155179,155180],{},[99,155181,424],{},[302,155183,155184],{},"整数",[256,155186,155187,155189,155193],{},[302,155188,152],{},[302,155190,155191],{},[99,155192,162],{},[302,155194,155195],{},"浮点数",[256,155197,155198,155200,155204],{},[302,155199,1288],{},[302,155201,155202],{},[99,155203,5834],{},[302,155205,155206],{},"字符串",[256,155208,155209,155211,155217],{},[302,155210,1343],{},[302,155212,155213,325,155215],{},[99,155214,31467],{},[99,155216,33978],{},[302,155218,66006],{},[256,155220,155221,155224,155228],{},[302,155222,155223],{},"NoneType",[302,155225,155226],{},[99,155227,95677],{},[302,155229,155230],{},"空值",[256,155232,155233,155235,155240],{},[302,155234,154052],{},[302,155236,155237],{},[99,155238,155239],{},"[1, 2, 3]",[302,155241,155242],{},"列表",[256,155244,155245,155248,155253],{},[302,155246,155247],{},"tuple",[302,155249,155250],{},[99,155251,155252],{},"(1, 2, 3)",[302,155254,155255],{},"元组",[256,155257,155258,155260,155265],{},[302,155259,114537],{},[302,155261,155262],{},[99,155263,155264],{},"{\"name\": \"张三\"}",[302,155266,155267],{},"字典",[256,155269,155270,155273,155278],{},[302,155271,155272],{},"set",[302,155274,155275],{},[99,155276,155277],{},"{1, 2, 3}",[302,155279,155280],{},"集合",[14,155282,155284],{"id":155283},"_23-变量","2.3 变量",[19,155286,155287],{},"变量是保存数据的名字。",[93,155289,155291],{"className":30369,"code":155290,"language":30371,"meta":23,"style":23},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[99,155292,155293,155301,155309,155319],{"__ignoreMap":23},[102,155294,155295,155297,155299],{"class":104,"line":105},[102,155296,146518],{"class":112},[102,155298,158],{"class":108},[102,155300,149335],{"class":217},[102,155302,155303,155305,155307],{"class":104,"line":24},[102,155304,146528],{"class":112},[102,155306,158],{"class":108},[102,155308,146533],{"class":161},[102,155310,155311,155314,155316],{"class":104,"line":1168},[102,155312,155313],{"class":112},"height ",[102,155315,158],{"class":108},[102,155317,155318],{"class":161}," 1.75\n",[102,155320,155321,155324,155326],{"class":104,"line":1183},[102,155322,155323],{"class":112},"is_student ",[102,155325,158],{"class":108},[102,155327,153581],{"class":161},[19,155329,155330],{},"Python 的变量不需要提前声明类型：",[93,155332,155334],{"className":30369,"code":155333,"language":30371,"meta":23,"style":23},"score = 100\nscore = \"满分\"\n",[99,155335,155336,155346],{"__ignoreMap":23},[102,155337,155338,155341,155343],{"class":104,"line":105},[102,155339,155340],{"class":112},"score ",[102,155342,158],{"class":108},[102,155344,155345],{"class":161}," 100\n",[102,155347,155348,155350,155352],{"class":104,"line":24},[102,155349,155340],{"class":112},[102,155351,158],{"class":108},[102,155353,155354],{"class":217}," \"满分\"\n",[19,155356,155357],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155359,155361],{"id":155360},"_24-变量命名规则","2.4 变量命名规则",[19,155363,155364],{},"硬性规则：",[56,155366,155367,155370,155373,155376],{},[59,155368,155369],{},"只能由字母、数字、下划线组成。",[59,155371,155372],{},"不能以数字开头。",[59,155374,155375],{},"不能使用 Python 关键字。",[59,155377,155378],{},"区分大小写。",[93,155380,155382],{"className":30369,"code":155381,"language":30371,"meta":23,"style":23},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[99,155383,155384,155393,155402],{"__ignoreMap":23},[102,155385,155386,155389,155391],{"class":104,"line":105},[102,155387,155388],{"class":112},"user_name ",[102,155390,158],{"class":108},[102,155392,146523],{"class":217},[102,155394,155395,155398,155400],{"class":104,"line":24},[102,155396,155397],{"class":112},"age2 ",[102,155399,158],{"class":108},[102,155401,146533],{"class":161},[102,155403,155404,155407,155409],{"class":104,"line":1168},[102,155405,155406],{"class":112},"_token ",[102,155408,158],{"class":108},[102,155410,155411],{"class":217}," \"abc\"\n",[19,155413,155414],{},"错误写法：",[93,155416,155418],{"className":30369,"code":155417,"language":30371,"meta":23,"style":23},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[99,155419,155420,155429,155441],{"__ignoreMap":23},[102,155421,155422,155425,155427],{"class":104,"line":105},[102,155423,155424],{"class":77394},"2age",[102,155426,13554],{"class":108},[102,155428,146533],{"class":161},[102,155430,155431,155433,155435,155437,155439],{"class":104,"line":24},[102,155432,131566],{"class":112},[102,155434,645],{"class":108},[102,155436,146518],{"class":112},[102,155438,158],{"class":108},[102,155440,146523],{"class":217},[102,155442,155443,155445,155447],{"class":104,"line":1168},[102,155444,14684],{"class":108},[102,155446,13554],{"class":108},[102,155448,155449],{"class":217}," \"一班\"\n",[19,155451,155452],{},"查看关键字：",[93,155454,155456],{"className":30369,"code":155455,"language":30371,"meta":23,"style":23},"import keyword\n\nprint(keyword.kwlist)\n",[99,155457,155458,155465,155469],{"__ignoreMap":23},[102,155459,155460,155462],{"class":104,"line":105},[102,155461,30383],{"class":108},[102,155463,155464],{"class":112}," keyword\n",[102,155466,155467],{"class":104,"line":24},[102,155468,2389],{"emptyLinePlaceholder":30},[102,155470,155471,155473],{"class":104,"line":1168},[102,155472,30406],{"class":161},[102,155474,155475],{"class":112},"(keyword.kwlist)\n",[19,155477,155478],{},"推荐命名风格：",[93,155480,155482],{"className":30369,"code":155481,"language":30371,"meta":23,"style":23},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[99,155483,155484,155493,155503],{"__ignoreMap":23},[102,155485,155486,155489,155491],{"class":104,"line":105},[102,155487,155488],{"class":112},"student_name ",[102,155490,158],{"class":108},[102,155492,149335],{"class":217},[102,155494,155495,155498,155500],{"class":104,"line":24},[102,155496,155497],{"class":112},"total_price ",[102,155499,158],{"class":108},[102,155501,155502],{"class":161}," 99.8\n",[102,155504,155505,155508,155510],{"class":104,"line":1168},[102,155506,155507],{"class":112},"is_finished ",[102,155509,158],{"class":108},[102,155511,125798],{"class":161},[19,155513,155514],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155516,50723],{"id":50722},[19,155518,104357,155519,155522],{},[99,155520,155521],{},"type()"," 查看数据类型：",[93,155524,155526],{"className":30369,"code":155525,"language":30371,"meta":23,"style":23},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[99,155527,155528,155542,155556,155570,155584],{"__ignoreMap":23},[102,155529,155530,155532,155534,155536,155538,155540],{"class":104,"line":105},[102,155531,30406],{"class":161},[102,155533,113],{"class":112},[102,155535,103098],{"class":161},[102,155537,113],{"class":112},[102,155539,424],{"class":161},[102,155541,30488],{"class":112},[102,155543,155544,155546,155548,155550,155552,155554],{"class":104,"line":24},[102,155545,30406],{"class":161},[102,155547,113],{"class":112},[102,155549,103098],{"class":161},[102,155551,113],{"class":112},[102,155553,162],{"class":161},[102,155555,30488],{"class":112},[102,155557,155558,155560,155562,155564,155566,155568],{"class":104,"line":1168},[102,155559,30406],{"class":161},[102,155561,113],{"class":112},[102,155563,103098],{"class":161},[102,155565,113],{"class":112},[102,155567,5834],{"class":217},[102,155569,30488],{"class":112},[102,155571,155572,155574,155576,155578,155580,155582],{"class":104,"line":1183},[102,155573,30406],{"class":161},[102,155575,113],{"class":112},[102,155577,103098],{"class":161},[102,155579,113],{"class":112},[102,155581,31467],{"class":161},[102,155583,30488],{"class":112},[102,155585,155586,155588,155590,155592,155594,155596],{"class":104,"line":1189},[102,155587,30406],{"class":161},[102,155589,113],{"class":112},[102,155591,103098],{"class":161},[102,155593,113],{"class":112},[102,155595,95677],{"class":161},[102,155597,30488],{"class":112},[19,155599,155600],{},"输出类似：",[93,155602,155605],{"className":155603,"code":155604,"language":5177,"meta":23},[5175],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[99,155606,155604],{"__ignoreMap":23},[19,155608,9015,155609,107274,155611,155613,155614,155616,155617,21490,155619,155616,155621,155623],{},[99,155610,1343],{},[99,155612,116],{}," 的子类，",[99,155615,31467],{}," 可以当作 ",[99,155618,330],{},[99,155620,33978],{},[99,155622,304],{},"，但业务代码中不要滥用。",[93,155625,155627],{"className":30369,"code":155626,"language":30371,"meta":23,"style":23},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[99,155628,155629,155647],{"__ignoreMap":23},[102,155630,155631,155633,155635,155637,155639,155641,155644],{"class":104,"line":105},[102,155632,30406],{"class":161},[102,155634,113],{"class":112},[102,155636,31467],{"class":161},[102,155638,45557],{"class":108},[102,155640,25109],{"class":161},[102,155642,155643],{"class":112},")   ",[102,155645,155646],{"class":171},"# 2\n",[102,155648,155649,155651,155653,155655,155657,155659,155661],{"class":104,"line":24},[102,155650,30406],{"class":161},[102,155652,113],{"class":112},[102,155654,33978],{"class":161},[102,155656,45557],{"class":108},[102,155658,25109],{"class":161},[102,155660,45799],{"class":112},[102,155662,155663],{"class":171},"# 1\n",[14,155665,155667],{"id":155666},"_26-类型转换","2.6 类型转换",[19,155669,155670],{},"常用转换函数：",[93,155672,155674],{"className":30369,"code":155673,"language":30371,"meta":23,"style":23},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[99,155675,155676,155686,155697,155707],{"__ignoreMap":23},[102,155677,155678,155680,155682,155684],{"class":104,"line":105},[102,155679,116],{"class":161},[102,155681,113],{"class":112},[102,155683,54307],{"class":217},[102,155685,119],{"class":112},[102,155687,155688,155690,155692,155695],{"class":104,"line":24},[102,155689,152],{"class":161},[102,155691,113],{"class":112},[102,155693,155694],{"class":217},"\"3.14\"",[102,155696,119],{"class":112},[102,155698,155699,155701,155703,155705],{"class":104,"line":1168},[102,155700,1288],{"class":161},[102,155702,113],{"class":112},[102,155704,424],{"class":161},[102,155706,119],{"class":112},[102,155708,155709,155711,155713,155715],{"class":104,"line":1183},[102,155710,1343],{"class":161},[102,155712,113],{"class":112},[102,155714,330],{"class":161},[102,155716,119],{"class":112},[19,155718,15125],{},[93,155720,155722],{"className":30369,"code":155721,"language":30371,"meta":23,"style":23},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[99,155723,155724,155733,155744],{"__ignoreMap":23},[102,155725,155726,155728,155730],{"class":104,"line":105},[102,155727,146528],{"class":112},[102,155729,158],{"class":108},[102,155731,155732],{"class":217}," \"18\"\n",[102,155734,155735,155737,155739,155741],{"class":104,"line":24},[102,155736,146528],{"class":112},[102,155738,158],{"class":108},[102,155740,2371],{"class":161},[102,155742,155743],{"class":112},"(age)\n",[102,155745,155746,155748,155751,155753,155755],{"class":104,"line":1168},[102,155747,30406],{"class":161},[102,155749,155750],{"class":112},"(age ",[102,155752,594],{"class":108},[102,155754,25109],{"class":161},[102,155756,119],{"class":112},[19,155758,155759],{},"输入得到的内容永远是字符串：",[93,155761,155763],{"className":30369,"code":155762,"language":30371,"meta":23,"style":23},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[99,155764,155765,155781],{"__ignoreMap":23},[102,155766,155767,155770,155772,155774,155776,155779],{"class":104,"line":105},[102,155768,155769],{"class":112},"num ",[102,155771,158],{"class":108},[102,155773,60596],{"class":161},[102,155775,113],{"class":112},[102,155777,155778],{"class":217},"\"请输入数字:\"",[102,155780,119],{"class":112},[102,155782,155783,155785,155787,155789,155792],{"class":104,"line":24},[102,155784,30406],{"class":161},[102,155786,113],{"class":112},[102,155788,103098],{"class":161},[102,155790,155791],{"class":112},"(num))  ",[102,155793,155794],{"class":171},"# str\n",[19,155796,155797],{},"如果要做数学运算，必须转换：",[93,155799,155801],{"className":30369,"code":155800,"language":30371,"meta":23,"style":23},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[99,155802,155803,155821],{"__ignoreMap":23},[102,155804,155805,155807,155809,155811,155813,155815,155817,155819],{"class":104,"line":105},[102,155806,155769],{"class":112},[102,155808,158],{"class":108},[102,155810,2371],{"class":161},[102,155812,113],{"class":112},[102,155814,53812],{"class":161},[102,155816,113],{"class":112},[102,155818,155778],{"class":217},[102,155820,30488],{"class":112},[102,155822,155823,155825,155827,155829,155831],{"class":104,"line":24},[102,155824,30406],{"class":161},[102,155826,45610],{"class":112},[102,155828,594],{"class":108},[102,155830,2027],{"class":161},[102,155832,119],{"class":112},[19,155834,155835],{},"常见错误：",[93,155837,155839],{"className":30369,"code":155838,"language":30371,"meta":23,"style":23},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[99,155840,155841,155854],{"__ignoreMap":23},[102,155842,155843,155845,155847,155849,155851],{"class":104,"line":105},[102,155844,116],{"class":161},[102,155846,113],{"class":112},[102,155848,155694],{"class":217},[102,155850,155643],{"class":112},[102,155852,155853],{"class":171},"# 错误\n",[102,155855,155856,155858,155860,155863,155866],{"class":104,"line":24},[102,155857,116],{"class":161},[102,155859,113],{"class":112},[102,155861,155862],{"class":217},"\"abc\"",[102,155864,155865],{"class":112},")    ",[102,155867,155853],{"class":171},[19,155869,155870],{},"正确写法：",[93,155872,155874],{"className":30369,"code":155873,"language":30371,"meta":23,"style":23},"num = float(\"3.14\")\n",[99,155875,155876],{"__ignoreMap":23},[102,155877,155878,155880,155882,155884,155886,155888],{"class":104,"line":105},[102,155879,155769],{"class":112},[102,155881,158],{"class":108},[102,155883,109788],{"class":161},[102,155885,113],{"class":112},[102,155887,155694],{"class":217},[102,155889,119],{"class":112},[14,155891,155893],{"id":155892},"_27-运算符","2.7 运算符",[73,155895,155897],{"id":155896},"_271-算术运算符","2.7.1 算术运算符",[250,155899,155900,155911],{},[253,155901,155902],{},[256,155903,155904,155907,155909],{},[259,155905,155906],{},"运算符",[259,155908,25860],{},[259,155910,27483],{},[297,155912,155913,155927,155941,155955,155969,155983,155997],{},[256,155914,155915,155919,155922],{},[302,155916,155917],{},[99,155918,594],{},[302,155920,155921],{},"加法",[302,155923,155924],{},[99,155925,155926],{},"1 + 2",[256,155928,155929,155933,155936],{},[302,155930,155931],{},[99,155932,645],{},[302,155934,155935],{},"减法",[302,155937,155938],{},[99,155939,155940],{},"5 - 3",[256,155942,155943,155947,155950],{},[302,155944,155945],{},[99,155946,568],{},[302,155948,155949],{},"乘法",[302,155951,155952],{},[99,155953,155954],{},"2 * 3",[256,155956,155957,155961,155964],{},[302,155958,155959],{},[99,155960,697],{},[302,155962,155963],{},"除法，结果是浮点数",[302,155965,155966],{},[99,155967,155968],{},"5 \u002F 2",[256,155970,155971,155975,155978],{},[302,155972,155973],{},[99,155974,33320],{},[302,155976,155977],{},"整除",[302,155979,155980],{},[99,155981,155982],{},"5 \u002F\u002F 2",[256,155984,155985,155989,155992],{},[302,155986,155987],{},[99,155988,441],{},[302,155990,155991],{},"取余",[302,155993,155994],{},[99,155995,155996],{},"5 % 2",[256,155998,155999,156003,156006],{},[302,156000,156001],{},[99,156002,10651],{},[302,156004,156005],{},"幂运算",[302,156007,156008],{},[99,156009,156010],{},"2 ** 3",[19,156012,15125],{},[93,156014,156016],{"className":30369,"code":156015,"language":30371,"meta":23,"style":23},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[99,156017,156018,156036,156053,156070],{"__ignoreMap":23},[102,156019,156020,156022,156024,156026,156029,156031,156033],{"class":104,"line":105},[102,156021,30406],{"class":161},[102,156023,113],{"class":112},[102,156025,432],{"class":161},[102,156027,156028],{"class":108}," \u002F",[102,156030,14745],{"class":161},[102,156032,155643],{"class":112},[102,156034,156035],{"class":171},"# 2.5\n",[102,156037,156038,156040,156042,156044,156047,156049,156051],{"class":104,"line":24},[102,156039,30406],{"class":161},[102,156041,113],{"class":112},[102,156043,432],{"class":161},[102,156045,156046],{"class":108}," \u002F\u002F",[102,156048,14745],{"class":161},[102,156050,45799],{"class":112},[102,156052,155646],{"class":171},[102,156054,156055,156057,156059,156061,156064,156066,156068],{"class":104,"line":1168},[102,156056,30406],{"class":161},[102,156058,113],{"class":112},[102,156060,432],{"class":161},[102,156062,156063],{"class":108}," %",[102,156065,14745],{"class":161},[102,156067,155643],{"class":112},[102,156069,155663],{"class":171},[102,156071,156072,156074,156076,156078,156081,156083,156085],{"class":104,"line":1183},[102,156073,30406],{"class":161},[102,156075,113],{"class":112},[102,156077,190],{"class":161},[102,156079,156080],{"class":108}," **",[102,156082,78061],{"class":161},[102,156084,45799],{"class":112},[102,156086,156087],{"class":171},"# 8\n",[73,156089,156091],{"id":156090},"_272-赋值运算符","2.7.2 赋值运算符",[93,156093,156095],{"className":30369,"code":156094,"language":30371,"meta":23,"style":23},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[99,156096,156097,156105,156113,156121,156129],{"__ignoreMap":23},[102,156098,156099,156101,156103],{"class":104,"line":105},[102,156100,155769],{"class":112},[102,156102,158],{"class":108},[102,156104,58419],{"class":161},[102,156106,156107,156109,156111],{"class":104,"line":24},[102,156108,155769],{"class":112},[102,156110,9467],{"class":108},[102,156112,54418],{"class":161},[102,156114,156115,156117,156119],{"class":104,"line":1168},[102,156116,155769],{"class":112},[102,156118,150234],{"class":108},[102,156120,47714],{"class":161},[102,156122,156123,156125,156127],{"class":104,"line":1183},[102,156124,155769],{"class":112},[102,156126,137130],{"class":108},[102,156128,120027],{"class":161},[102,156130,156131,156133,156136],{"class":104,"line":1189},[102,156132,155769],{"class":112},[102,156134,156135],{"class":108},"\u002F=",[102,156137,47714],{"class":161},[19,156139,156140],{},"等价关系：",[93,156142,156144],{"className":30369,"code":156143,"language":30371,"meta":23,"style":23},"num += 1\nnum = num + 1\n",[99,156145,156146,156154],{"__ignoreMap":23},[102,156147,156148,156150,156152],{"class":104,"line":105},[102,156149,155769],{"class":112},[102,156151,9467],{"class":108},[102,156153,55690],{"class":161},[102,156155,156156,156158,156160,156163,156165],{"class":104,"line":24},[102,156157,155769],{"class":112},[102,156159,158],{"class":108},[102,156161,156162],{"class":112}," num ",[102,156164,594],{"class":108},[102,156166,55690],{"class":161},[19,156168,156169,156170,101009,156173,28376],{},"Python 没有 ",[99,156171,156172],{},"num++",[99,156174,156175],{},"num--",[73,156177,156179],{"id":156178},"_273-比较运算符","2.7.3 比较运算符",[19,156181,156182],{},"比较运算结果是布尔值。",[93,156184,156186],{"className":30369,"code":156185,"language":30371,"meta":23,"style":23},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[99,156187,156188,156202,156217,156231],{"__ignoreMap":23},[102,156189,156190,156192,156194,156196,156198,156200],{"class":104,"line":105},[102,156191,30406],{"class":161},[102,156193,113],{"class":112},[102,156195,559],{"class":161},[102,156197,26213],{"class":108},[102,156199,2137],{"class":161},[102,156201,119],{"class":112},[102,156203,156204,156206,156208,156210,156213,156215],{"class":104,"line":24},[102,156205,30406],{"class":161},[102,156207,113],{"class":112},[102,156209,559],{"class":161},[102,156211,156212],{"class":108}," >=",[102,156214,2027],{"class":161},[102,156216,119],{"class":112},[102,156218,156219,156221,156223,156225,156227,156229],{"class":104,"line":1168},[102,156220,30406],{"class":161},[102,156222,113],{"class":112},[102,156224,559],{"class":161},[102,156226,101550],{"class":108},[102,156228,2072],{"class":161},[102,156230,119],{"class":112},[102,156232,156233,156235,156237,156239,156242,156244],{"class":104,"line":1183},[102,156234,30406],{"class":161},[102,156236,113],{"class":112},[102,156238,559],{"class":161},[102,156240,156241],{"class":108}," !=",[102,156243,2072],{"class":161},[102,156245,119],{"class":112},[19,156247,156248,156249,156251,156252,28376],{},"注意：判断相等用 ",[99,156250,2938],{},"，赋值用 ",[99,156253,158],{},[93,156255,156257],{"className":30369,"code":156256,"language":30371,"meta":23,"style":23},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[99,156258,156259,156271],{"__ignoreMap":23},[102,156260,156261,156263,156265,156268],{"class":104,"line":105},[102,156262,146528],{"class":112},[102,156264,158],{"class":108},[102,156266,156267],{"class":161}," 18",[102,156269,156270],{"class":171},"       # 赋值\n",[102,156272,156273,156275,156277,156279],{"class":104,"line":24},[102,156274,146528],{"class":112},[102,156276,2938],{"class":108},[102,156278,156267],{"class":161},[102,156280,156281],{"class":171},"      # 判断是否相等\n",[73,156283,156285],{"id":156284},"_274-逻辑运算符","2.7.4 逻辑运算符",[250,156287,156288,156296],{},[253,156289,156290],{},[256,156291,156292,156294],{},[259,156293,155906],{},[259,156295,25860],{},[297,156297,156298,156307,156316],{},[256,156299,156300,156304],{},[302,156301,156302],{},[99,156303,30453],{},[302,156305,156306],{},"并且",[256,156308,156309,156313],{},[302,156310,156311],{},[99,156312,115081],{},[302,156314,156315],{},"或者",[256,156317,156318,156323],{},[302,156319,156320],{},[99,156321,156322],{},"not",[302,156324,156325],{},"取反",[93,156327,156329],{"className":30369,"code":156328,"language":30371,"meta":23,"style":23},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[99,156330,156331,156339,156348,156352,156367,156381],{"__ignoreMap":23},[102,156332,156333,156335,156337],{"class":104,"line":105},[102,156334,146528],{"class":112},[102,156336,158],{"class":108},[102,156338,88056],{"class":161},[102,156340,156341,156344,156346],{"class":104,"line":24},[102,156342,156343],{"class":112},"has_ticket ",[102,156345,158],{"class":108},[102,156347,153581],{"class":161},[102,156349,156350],{"class":104,"line":1168},[102,156351,2389],{"emptyLinePlaceholder":30},[102,156353,156354,156356,156358,156360,156362,156364],{"class":104,"line":1183},[102,156355,30406],{"class":161},[102,156357,155750],{"class":112},[102,156359,1699],{"class":108},[102,156361,156267],{"class":161},[102,156363,120420],{"class":108},[102,156365,156366],{"class":112}," has_ticket)\n",[102,156368,156369,156371,156373,156375,156377,156379],{"class":104,"line":1189},[102,156370,30406],{"class":161},[102,156372,155750],{"class":112},[102,156374,1023],{"class":108},[102,156376,156267],{"class":161},[102,156378,114192],{"class":108},[102,156380,156366],{"class":112},[102,156382,156383,156385,156387,156389],{"class":104,"line":1203},[102,156384,30406],{"class":161},[102,156386,113],{"class":112},[102,156388,156322],{"class":108},[102,156390,156366],{"class":112},[14,156392,156394],{"id":156393},"_28-字符串定义","2.8 字符串定义",[19,156396,156397],{},"三种常见写法：",[93,156399,156401],{"className":30369,"code":156400,"language":30371,"meta":23,"style":23},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[99,156402,156403,156413,156422,156432],{"__ignoreMap":23},[102,156404,156405,156408,156410],{"class":104,"line":105},[102,156406,156407],{"class":112},"name1 ",[102,156409,158],{"class":108},[102,156411,156412],{"class":217}," '小明'\n",[102,156414,156415,156418,156420],{"class":104,"line":24},[102,156416,156417],{"class":112},"name2 ",[102,156419,158],{"class":108},[102,156421,149335],{"class":217},[102,156423,156424,156427,156429],{"class":104,"line":1168},[102,156425,156426],{"class":112},"text ",[102,156428,158],{"class":108},[102,156430,156431],{"class":217}," \"\"\"这是多行字符串\n",[102,156433,156434],{"class":104,"line":1183},[102,156435,156436],{"class":217},"可以换行\"\"\"\n",[19,156438,156439],{},"字符串中包含引号：",[93,156441,156443],{"className":30369,"code":156442,"language":30371,"meta":23,"style":23},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[99,156444,156445,156455,156465],{"__ignoreMap":23},[102,156446,156447,156450,156452],{"class":104,"line":105},[102,156448,156449],{"class":112},"msg ",[102,156451,158],{"class":108},[102,156453,156454],{"class":217}," \"他说:'你好'\"\n",[102,156456,156457,156460,156462],{"class":104,"line":24},[102,156458,156459],{"class":112},"msg2 ",[102,156461,158],{"class":108},[102,156463,156464],{"class":217}," '他说:\"你好\"'\n",[102,156466,156467,156470,156472,156475,156478,156481,156483],{"class":104,"line":1168},[102,156468,156469],{"class":112},"msg3 ",[102,156471,158],{"class":108},[102,156473,156474],{"class":217}," \"他说:",[102,156476,156477],{"class":161},"\\\"",[102,156479,156480],{"class":217},"你好",[102,156482,156477],{"class":161},[102,156484,25124],{"class":217},[19,156486,156487],{},"常见转义字符：",[250,156489,156490,156499],{},[253,156491,156492],{},[256,156493,156494,156497],{},[259,156495,156496],{},"写法",[259,156498,100691],{},[297,156500,156501,156511,156520,156530,156539],{},[256,156502,156503,156508],{},[302,156504,156505],{},[99,156506,156507],{},"\\n",[302,156509,156510],{},"换行",[256,156512,156513,156517],{},[302,156514,156515],{},[99,156516,1219],{},[302,156518,156519],{},"制表符",[256,156521,156522,156527],{},[302,156523,156524],{},[99,156525,156526],{},"\\\\",[302,156528,156529],{},"反斜杠",[256,156531,156532,156536],{},[302,156533,156534],{},[99,156535,156477],{},[302,156537,156538],{},"双引号",[256,156540,156541,156546],{},[302,156542,156543],{},[99,156544,156545],{},"\\'",[302,156547,156548],{},"单引号",[14,156550,156552],{"id":156551},"_29-字符串拼接","2.9 字符串拼接",[93,156554,156556],{"className":30369,"code":156555,"language":30371,"meta":23,"style":23},"name = \"小明\"\nprint(\"你好，\" + name)\n",[99,156557,156558,156566],{"__ignoreMap":23},[102,156559,156560,156562,156564],{"class":104,"line":105},[102,156561,146518],{"class":112},[102,156563,158],{"class":108},[102,156565,149335],{"class":217},[102,156567,156568,156570,156572,156575,156577],{"class":104,"line":24},[102,156569,30406],{"class":161},[102,156571,113],{"class":112},[102,156573,156574],{"class":217},"\"你好，\"",[102,156576,45557],{"class":108},[102,156578,156579],{"class":112}," name)\n",[19,156581,156582],{},"字符串只能和字符串拼接：",[93,156584,156586],{"className":30369,"code":156585,"language":30371,"meta":23,"style":23},"age = 18\nprint(\"年龄:\" + str(age))\n",[99,156587,156588,156596],{"__ignoreMap":23},[102,156589,156590,156592,156594],{"class":104,"line":105},[102,156591,146528],{"class":112},[102,156593,158],{"class":108},[102,156595,146533],{"class":161},[102,156597,156598,156600,156602,156604,156606,156608],{"class":104,"line":24},[102,156599,30406],{"class":161},[102,156601,113],{"class":112},[102,156603,146499],{"class":217},[102,156605,45557],{"class":108},[102,156607,73910],{"class":161},[102,156609,156610],{"class":112},"(age))\n",[19,156612,156613],{},"更推荐使用格式化字符串。",[14,156615,156617],{"id":156616},"_210-字符串格式化","2.10 字符串格式化",[73,156619,156621],{"id":156620},"_2101-百分号格式化","2.10.1 百分号格式化",[93,156623,156625],{"className":30369,"code":156624,"language":30371,"meta":23,"style":23},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[99,156626,156627,156635,156643,156652,156656],{"__ignoreMap":23},[102,156628,156629,156631,156633],{"class":104,"line":105},[102,156630,146518],{"class":112},[102,156632,158],{"class":108},[102,156634,149335],{"class":217},[102,156636,156637,156639,156641],{"class":104,"line":24},[102,156638,146528],{"class":112},[102,156640,158],{"class":108},[102,156642,146533],{"class":161},[102,156644,156645,156647,156649],{"class":104,"line":1168},[102,156646,155340],{"class":112},[102,156648,158],{"class":108},[102,156650,156651],{"class":161}," 95.5\n",[102,156653,156654],{"class":104,"line":1183},[102,156655,2389],{"emptyLinePlaceholder":30},[102,156657,156658,156660,156662,156665,156668,156671,156674,156677,156680,156682,156684],{"class":104,"line":1189},[102,156659,30406],{"class":161},[102,156661,113],{"class":112},[102,156663,156664],{"class":217},"\"姓名:",[102,156666,156667],{"class":161},"%s",[102,156669,156670],{"class":217}," 年龄:",[102,156672,156673],{"class":161},"%d",[102,156675,156676],{"class":217}," 分数:",[102,156678,156679],{"class":161},"%.1f",[102,156681,364],{"class":217},[102,156683,156063],{"class":108},[102,156685,156686],{"class":112}," (name, age, score))\n",[19,156688,156689],{},"常用占位符：",[250,156691,156692,156701],{},[253,156693,156694],{},[256,156695,156696,156699],{},[259,156697,156698],{},"占位符",[259,156700,25860],{},[297,156702,156703,156711,156719],{},[256,156704,156705,156709],{},[302,156706,156707],{},[99,156708,156667],{},[302,156710,155206],{},[256,156712,156713,156717],{},[302,156714,156715],{},[99,156716,156673],{},[302,156718,155184],{},[256,156720,156721,156726],{},[302,156722,156723],{},[99,156724,156725],{},"%f",[302,156727,155195],{},[19,156729,156730],{},"精度控制：",[93,156732,156734],{"className":30369,"code":156733,"language":30371,"meta":23,"style":23},"price = 12.3456\nprint(\"%.2f\" % price)\n",[99,156735,156736,156745],{"__ignoreMap":23},[102,156737,156738,156740,156742],{"class":104,"line":105},[102,156739,146663],{"class":112},[102,156741,158],{"class":108},[102,156743,156744],{"class":161}," 12.3456\n",[102,156746,156747,156749,156751,156753,156756,156758,156760],{"class":104,"line":24},[102,156748,30406],{"class":161},[102,156750,113],{"class":112},[102,156752,364],{"class":217},[102,156754,156755],{"class":161},"%.2f",[102,156757,364],{"class":217},[102,156759,156063],{"class":108},[102,156761,156762],{"class":112}," price)\n",[73,156764,156766],{"id":156765},"_2102-format方法","2.10.2 format方法",[93,156768,156770],{"className":30369,"code":156769,"language":30371,"meta":23,"style":23},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[99,156771,156772,156780,156788,156792,156811,156831],{"__ignoreMap":23},[102,156773,156774,156776,156778],{"class":104,"line":105},[102,156775,146518],{"class":112},[102,156777,158],{"class":108},[102,156779,149335],{"class":217},[102,156781,156782,156784,156786],{"class":104,"line":24},[102,156783,146528],{"class":112},[102,156785,158],{"class":108},[102,156787,146533],{"class":161},[102,156789,156790],{"class":104,"line":1168},[102,156791,2389],{"emptyLinePlaceholder":30},[102,156793,156794,156796,156798,156800,156802,156804,156806,156808],{"class":104,"line":1183},[102,156795,30406],{"class":161},[102,156797,113],{"class":112},[102,156799,156664],{"class":217},[102,156801,32450],{"class":161},[102,156803,156670],{"class":217},[102,156805,32450],{"class":161},[102,156807,364],{"class":217},[102,156809,156810],{"class":112},".format(name, age))\n",[102,156812,156813,156815,156817,156819,156822,156824,156827,156829],{"class":104,"line":1189},[102,156814,30406],{"class":161},[102,156816,113],{"class":112},[102,156818,156664],{"class":217},[102,156820,156821],{"class":161},"{0}",[102,156823,156670],{"class":217},[102,156825,156826],{"class":161},"{1}",[102,156828,364],{"class":217},[102,156830,156810],{"class":112},[102,156832,156833,156835,156837,156839,156842,156844,156847,156849,156852,156854,156856,156859,156861,156863],{"class":104,"line":1203},[102,156834,30406],{"class":161},[102,156836,113],{"class":112},[102,156838,156664],{"class":217},[102,156840,156841],{"class":161},"{name}",[102,156843,156670],{"class":217},[102,156845,156846],{"class":161},"{age}",[102,156848,364],{"class":217},[102,156850,156851],{"class":112},".format(",[102,156853,79801],{"class":5206},[102,156855,158],{"class":108},[102,156857,156858],{"class":112},"name, ",[102,156860,70212],{"class":5206},[102,156862,158],{"class":108},[102,156864,156865],{"class":112},"age))\n",[73,156867,156869],{"id":156868},"_2103-f-string","2.10.3 f-string",[19,156871,156872],{},"推荐写法：",[93,156874,156876],{"className":30369,"code":156875,"language":30371,"meta":23,"style":23},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[99,156877,156878,156886,156894,156902,156906],{"__ignoreMap":23},[102,156879,156880,156882,156884],{"class":104,"line":105},[102,156881,146518],{"class":112},[102,156883,158],{"class":108},[102,156885,149335],{"class":217},[102,156887,156888,156890,156892],{"class":104,"line":24},[102,156889,146528],{"class":112},[102,156891,158],{"class":108},[102,156893,146533],{"class":161},[102,156895,156896,156898,156900],{"class":104,"line":1168},[102,156897,155340],{"class":112},[102,156899,158],{"class":108},[102,156901,156651],{"class":161},[102,156903,156904],{"class":104,"line":1183},[102,156905,2389],{"emptyLinePlaceholder":30},[102,156907,156908,156910,156912,156914,156916,156918,156920,156922,156924,156926,156928,156930,156932,156934,156937,156940,156942,156944],{"class":104,"line":1189},[102,156909,30406],{"class":161},[102,156911,113],{"class":112},[102,156913,165],{"class":108},[102,156915,156664],{"class":217},[102,156917,1009],{"class":161},[102,156919,79801],{"class":112},[102,156921,1059],{"class":161},[102,156923,156670],{"class":217},[102,156925,1009],{"class":161},[102,156927,70212],{"class":112},[102,156929,1059],{"class":161},[102,156931,156676],{"class":217},[102,156933,1009],{"class":161},[102,156935,156936],{"class":112},"score",[102,156938,156939],{"class":108},":.1f",[102,156941,1059],{"class":161},[102,156943,364],{"class":217},[102,156945,119],{"class":112},[19,156947,156948],{},"表达式也可以放进去：",[93,156950,156952],{"className":30369,"code":156951,"language":30371,"meta":23,"style":23},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[99,156953,156954,156962,156970],{"__ignoreMap":23},[102,156955,156956,156958,156960],{"class":104,"line":105},[102,156957,146663],{"class":112},[102,156959,158],{"class":108},[102,156961,146668],{"class":161},[102,156963,156964,156966,156968],{"class":104,"line":24},[102,156965,146673],{"class":112},[102,156967,158],{"class":108},[102,156969,54418],{"class":161},[102,156971,156972,156974,156976,156978,156981,156983,156985,156987,156990,156992,156995],{"class":104,"line":1168},[102,156973,30406],{"class":161},[102,156975,113],{"class":112},[102,156977,165],{"class":108},[102,156979,156980],{"class":217},"\"总价:",[102,156982,1009],{"class":161},[102,156984,146663],{"class":112},[102,156986,568],{"class":108},[102,156988,156989],{"class":112}," count",[102,156991,1059],{"class":161},[102,156993,156994],{"class":217},"元\"",[102,156996,119],{"class":112},[14,156998,157000],{"id":156999},"_211-input输入","2.11 input输入",[19,157002,157003,157006],{},[99,157004,157005],{},"input()"," 会暂停程序，等待用户输入。",[93,157008,157010],{"className":30369,"code":157009,"language":30371,"meta":23,"style":23},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[99,157011,157012,157026],{"__ignoreMap":23},[102,157013,157014,157016,157018,157020,157022,157024],{"class":104,"line":105},[102,157015,146518],{"class":112},[102,157017,158],{"class":108},[102,157019,60596],{"class":161},[102,157021,113],{"class":112},[102,157023,152361],{"class":217},[102,157025,119],{"class":112},[102,157027,157028,157030,157032,157034,157037,157039,157041,157043,157045],{"class":104,"line":24},[102,157029,30406],{"class":161},[102,157031,113],{"class":112},[102,157033,165],{"class":108},[102,157035,157036],{"class":217},"\"你好，",[102,157038,1009],{"class":161},[102,157040,79801],{"class":112},[102,157042,1059],{"class":161},[102,157044,364],{"class":217},[102,157046,119],{"class":112},[19,157048,157049],{},"输入整数：",[93,157051,157053],{"className":30369,"code":157052,"language":30371,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[99,157054,157055,157073],{"__ignoreMap":23},[102,157056,157057,157059,157061,157063,157065,157067,157069,157071],{"class":104,"line":105},[102,157058,146528],{"class":112},[102,157060,158],{"class":108},[102,157062,2371],{"class":161},[102,157064,113],{"class":112},[102,157066,53812],{"class":161},[102,157068,113],{"class":112},[102,157070,152376],{"class":217},[102,157072,30488],{"class":112},[102,157074,157075,157077,157079,157081,157084,157086,157088,157090,157093,157095],{"class":104,"line":24},[102,157076,30406],{"class":161},[102,157078,113],{"class":112},[102,157080,165],{"class":108},[102,157082,157083],{"class":217},"\"明年你",[102,157085,1009],{"class":161},[102,157087,146528],{"class":112},[102,157089,594],{"class":108},[102,157091,157092],{"class":161}," 1}",[102,157094,149386],{"class":217},[102,157096,119],{"class":112},[19,157098,157099],{},"输入小数：",[93,157101,157103],{"className":30369,"code":157102,"language":30371,"meta":23,"style":23},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[99,157104,157105,157124],{"__ignoreMap":23},[102,157106,157107,157109,157111,157113,157115,157117,157119,157122],{"class":104,"line":105},[102,157108,155313],{"class":112},[102,157110,158],{"class":108},[102,157112,109788],{"class":161},[102,157114,113],{"class":112},[102,157116,53812],{"class":161},[102,157118,113],{"class":112},[102,157120,157121],{"class":217},"\"请输入身高:\"",[102,157123,30488],{"class":112},[102,157125,157126,157128,157130,157132,157135,157137,157139,157142,157144,157147],{"class":104,"line":24},[102,157127,30406],{"class":161},[102,157129,113],{"class":112},[102,157131,165],{"class":108},[102,157133,157134],{"class":217},"\"身高:",[102,157136,1009],{"class":161},[102,157138,24972],{"class":112},[102,157140,157141],{"class":108},":.2f",[102,157143,1059],{"class":161},[102,157145,157146],{"class":217},"米\"",[102,157148,119],{"class":112},[14,157150,157152],{"id":157151},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157154,123283],{},[56,157156,157157,157160,157163,157166],{},[59,157158,157159],{},"输入商品单价。",[59,157161,157162],{},"输入购买数量。",[59,157164,157165],{},"输入折扣，例如 0.8 表示八折。",[59,157167,157168],{},"输出最终金额，保留两位小数。",[19,157170,10025],{},[93,157172,157174],{"className":30369,"code":157173,"language":30371,"meta":23,"style":23},"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",[99,157175,157176,157195,157214,157234,157238,157258,157262,157285,157306,157328],{"__ignoreMap":23},[102,157177,157178,157180,157182,157184,157186,157188,157190,157193],{"class":104,"line":105},[102,157179,146663],{"class":112},[102,157181,158],{"class":108},[102,157183,109788],{"class":161},[102,157185,113],{"class":112},[102,157187,53812],{"class":161},[102,157189,113],{"class":112},[102,157191,157192],{"class":217},"\"请输入商品单价:\"",[102,157194,30488],{"class":112},[102,157196,157197,157199,157201,157203,157205,157207,157209,157212],{"class":104,"line":24},[102,157198,146673],{"class":112},[102,157200,158],{"class":108},[102,157202,2371],{"class":161},[102,157204,113],{"class":112},[102,157206,53812],{"class":161},[102,157208,113],{"class":112},[102,157210,157211],{"class":217},"\"请输入购买数量:\"",[102,157213,30488],{"class":112},[102,157215,157216,157219,157221,157223,157225,157227,157229,157232],{"class":104,"line":1168},[102,157217,157218],{"class":112},"discount ",[102,157220,158],{"class":108},[102,157222,109788],{"class":161},[102,157224,113],{"class":112},[102,157226,53812],{"class":161},[102,157228,113],{"class":112},[102,157230,157231],{"class":217},"\"请输入折扣:\"",[102,157233,30488],{"class":112},[102,157235,157236],{"class":104,"line":1183},[102,157237,2389],{"emptyLinePlaceholder":30},[102,157239,157240,157243,157245,157248,157250,157253,157255],{"class":104,"line":1189},[102,157241,157242],{"class":112},"total ",[102,157244,158],{"class":108},[102,157246,157247],{"class":112}," price ",[102,157249,568],{"class":108},[102,157251,157252],{"class":112}," count ",[102,157254,568],{"class":108},[102,157256,157257],{"class":112}," discount\n",[102,157259,157260],{"class":104,"line":1203},[102,157261,2389],{"emptyLinePlaceholder":30},[102,157263,157264,157266,157268,157270,157273,157275,157277,157279,157281,157283],{"class":104,"line":1209},[102,157265,30406],{"class":161},[102,157267,113],{"class":112},[102,157269,165],{"class":108},[102,157271,157272],{"class":217},"\"商品单价:",[102,157274,1009],{"class":161},[102,157276,79806],{"class":112},[102,157278,157141],{"class":108},[102,157280,1059],{"class":161},[102,157282,364],{"class":217},[102,157284,119],{"class":112},[102,157286,157287,157289,157291,157293,157296,157298,157300,157302,157304],{"class":104,"line":1300},[102,157288,30406],{"class":161},[102,157290,113],{"class":112},[102,157292,165],{"class":108},[102,157294,157295],{"class":217},"\"购买数量:",[102,157297,1009],{"class":161},[102,157299,84425],{"class":112},[102,157301,1059],{"class":161},[102,157303,364],{"class":217},[102,157305,119],{"class":112},[102,157307,157308,157310,157312,157314,157317,157319,157322,157324,157326],{"class":104,"line":1306},[102,157309,30406],{"class":161},[102,157311,113],{"class":112},[102,157313,165],{"class":108},[102,157315,157316],{"class":217},"\"折扣:",[102,157318,1009],{"class":161},[102,157320,157321],{"class":112},"discount",[102,157323,1059],{"class":161},[102,157325,364],{"class":217},[102,157327,119],{"class":112},[102,157329,157330,157332,157334,157336,157339,157341,157344,157346,157348,157350],{"class":104,"line":1318},[102,157331,30406],{"class":161},[102,157333,113],{"class":112},[102,157335,165],{"class":108},[102,157337,157338],{"class":217},"\"应付金额:",[102,157340,1009],{"class":161},[102,157342,157343],{"class":112},"total",[102,157345,157141],{"class":108},[102,157347,1059],{"class":161},[102,157349,156994],{"class":217},[102,157351,119],{"class":112},[14,157353,157355],{"id":157354},"_213-易错点","2.13 易错点",[56,157357,157358,157363,157369,157377,157380],{},[59,157359,157360,157362],{},[99,157361,157005],{}," 的结果是字符串，做运算前要转换。",[59,157364,157365,157366,28376],{},"字符串拼接时，数字要先 ",[99,157367,157368],{},"str()",[59,157370,157371,157373,157374,157376],{},[99,157372,158],{}," 是赋值，",[99,157375,2938],{}," 是比较。",[59,157378,157379],{},"Python 没有自增自减运算符。",[59,157381,157382],{},"浮点数计算可能有精度误差：",[93,157384,157386],{"className":30369,"code":157385,"language":30371,"meta":23,"style":23},"print(0.1 + 0.2)\n",[99,157387,157388],{"__ignoreMap":23},[102,157389,157390,157392,157394,157396,157398,157401],{"class":104,"line":105},[102,157391,30406],{"class":161},[102,157393,113],{"class":112},[102,157395,86201],{"class":161},[102,157397,45557],{"class":108},[102,157399,157400],{"class":161}," 0.2",[102,157402,119],{"class":112},[19,157404,157405,157406,157409],{},"金额计算如果要求严格，可以后续学习 ",[99,157407,157408],{},"decimal"," 模块。",[14,157411,157413],{"id":157412},"_214-本章练习","2.14 本章练习",[56,157415,157416,157419,157422,157425,157428],{},[59,157417,157418],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[59,157420,157421],{},"输入圆的半径，计算面积，保留两位小数。",[59,157423,157424],{},"输入工资和奖金，计算总收入。",[59,157426,157427],{},"输入摄氏温度，转换为华氏温度。",[59,157429,157430],{},"写一个 BMI 计算程序：",[93,157432,157435],{"className":157433,"code":157434,"language":5177,"meta":23},[5175],"BMI = 体重kg \u002F 身高m ** 2\n",[99,157436,157434],{"__ignoreMap":23},[5116,157438,157439],{},"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":23,"searchDepth":24,"depth":24,"links":157441},[157442,157443,157444,157445,157446,157447,157448,157454,157455,157456,157461,157462,157463,157464],{"id":155003,"depth":24,"text":155004},{"id":155112,"depth":24,"text":155113},{"id":155283,"depth":24,"text":155284},{"id":155360,"depth":24,"text":155361},{"id":50722,"depth":24,"text":50723},{"id":155666,"depth":24,"text":155667},{"id":155892,"depth":24,"text":155893,"children":157449},[157450,157451,157452,157453],{"id":155896,"depth":1168,"text":155897},{"id":156090,"depth":1168,"text":156091},{"id":156178,"depth":1168,"text":156179},{"id":156284,"depth":1168,"text":156285},{"id":156393,"depth":24,"text":156394},{"id":156551,"depth":24,"text":156552},{"id":156616,"depth":24,"text":156617,"children":157457},[157458,157459,157460],{"id":156620,"depth":1168,"text":156621},{"id":156765,"depth":1168,"text":156766},{"id":156868,"depth":1168,"text":156869},{"id":156999,"depth":24,"text":157000},{"id":157151,"depth":24,"text":157152},{"id":157354,"depth":24,"text":157355},{"id":157412,"depth":24,"text":157413},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154995,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157471,"title":157472,"body":157473,"description":27,"extension":28,"meta":159109,"navigation":30,"path":159110,"seo":159111,"stem":159112,"__hash__":159113},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157474,"toc":159090},[157475,157478,157482,157485,157500,157503,157531,157535,157585,157587,157603,157606,157632,157635,157639,157706,157709,157725,157729,157732,157850,157853,157860,157909,157915,157919,157922,158035,158038,158042,158046,158049,158099,158103,158106,158156,158160,158163,158201,158205,158208,158254,158257,158292,158296,158301,158304,158350,158352,158419,158423,158429,158540,158549,158553,158555,158566,158568,158734,158738,158740,158754,158756,158970,158974,158993,159010,159013,159059,159063,159087],[10,157476,157472],{"id":157477},"_3-判断语句",[14,157479,157481],{"id":157480},"_31-布尔值","3.1 布尔值",[19,157483,157484],{},"判断语句依赖布尔值：",[93,157486,157488],{"className":30369,"code":157487,"language":30371,"meta":23,"style":23},"True\nFalse\n",[99,157489,157490,157495],{"__ignoreMap":23},[102,157491,157492],{"class":104,"line":105},[102,157493,157494],{"class":161},"True\n",[102,157496,157497],{"class":104,"line":24},[102,157498,157499],{"class":161},"False\n",[19,157501,157502],{},"比较表达式会产生布尔值：",[93,157504,157506],{"className":30369,"code":157505,"language":30371,"meta":23,"style":23},"age = 18\nprint(age >= 18)  # True\n",[99,157507,157508,157516],{"__ignoreMap":23},[102,157509,157510,157512,157514],{"class":104,"line":105},[102,157511,146528],{"class":112},[102,157513,158],{"class":108},[102,157515,146533],{"class":161},[102,157517,157518,157520,157522,157524,157526,157528],{"class":104,"line":24},[102,157519,30406],{"class":161},[102,157521,155750],{"class":112},[102,157523,1699],{"class":108},[102,157525,156267],{"class":161},[102,157527,45799],{"class":112},[102,157529,157530],{"class":171},"# True\n",[14,157532,157534],{"id":157533},"_32-if基础语法","3.2 if基础语法",[93,157536,157538],{"className":30369,"code":157537,"language":30371,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[99,157539,157540,157558,157562,157574],{"__ignoreMap":23},[102,157541,157542,157544,157546,157548,157550,157552,157554,157556],{"class":104,"line":105},[102,157543,146528],{"class":112},[102,157545,158],{"class":108},[102,157547,2371],{"class":161},[102,157549,113],{"class":112},[102,157551,53812],{"class":161},[102,157553,113],{"class":112},[102,157555,152376],{"class":217},[102,157557,30488],{"class":112},[102,157559,157560],{"class":104,"line":24},[102,157561,2389],{"emptyLinePlaceholder":30},[102,157563,157564,157566,157568,157570,157572],{"class":104,"line":1168},[102,157565,1520],{"class":108},[102,157567,15697],{"class":112},[102,157569,1699],{"class":108},[102,157571,156267],{"class":161},[102,157573,3728],{"class":112},[102,157575,157576,157578,157580,157583],{"class":104,"line":1183},[102,157577,31290],{"class":161},[102,157579,113],{"class":112},[102,157581,157582],{"class":217},"\"可以进入网吧\"",[102,157584,119],{"class":112},[19,157586,9015],{},[56,157588,157589,157594,157597,157600],{},[59,157590,157591,157593],{},[99,157592,1520],{}," 后面是条件表达式。",[59,157595,157596],{},"条件后面必须写冒号。",[59,157598,157599],{},"条件成立时执行缩进代码块。",[59,157601,157602],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157604,157605],{},"错误示例：",[93,157607,157609],{"className":30369,"code":157608,"language":30371,"meta":23,"style":23},"if age >= 18\n    print(\"可以进入\")\n",[99,157610,157611,157621],{"__ignoreMap":23},[102,157612,157613,157615,157617,157619],{"class":104,"line":105},[102,157614,1520],{"class":108},[102,157616,15697],{"class":112},[102,157618,1699],{"class":108},[102,157620,146533],{"class":161},[102,157622,157623,157625,157627,157630],{"class":104,"line":24},[102,157624,31290],{"class":161},[102,157626,113],{"class":112},[102,157628,157629],{"class":217},"\"可以进入\"",[102,157631,119],{"class":112},[19,157633,157634],{},"缺少冒号。",[14,157636,157638],{"id":157637},"_33-if-else","3.3 if else",[93,157640,157642],{"className":30369,"code":157641,"language":30371,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[99,157643,157644,157662,157666,157678,157689,157695],{"__ignoreMap":23},[102,157645,157646,157648,157650,157652,157654,157656,157658,157660],{"class":104,"line":105},[102,157647,146528],{"class":112},[102,157649,158],{"class":108},[102,157651,2371],{"class":161},[102,157653,113],{"class":112},[102,157655,53812],{"class":161},[102,157657,113],{"class":112},[102,157659,152376],{"class":217},[102,157661,30488],{"class":112},[102,157663,157664],{"class":104,"line":24},[102,157665,2389],{"emptyLinePlaceholder":30},[102,157667,157668,157670,157672,157674,157676],{"class":104,"line":1168},[102,157669,1520],{"class":108},[102,157671,15697],{"class":112},[102,157673,1699],{"class":108},[102,157675,156267],{"class":161},[102,157677,3728],{"class":112},[102,157679,157680,157682,157684,157687],{"class":104,"line":1183},[102,157681,31290],{"class":161},[102,157683,113],{"class":112},[102,157685,157686],{"class":217},"\"成年人\"",[102,157688,119],{"class":112},[102,157690,157691,157693],{"class":104,"line":1189},[102,157692,1690],{"class":108},[102,157694,3728],{"class":112},[102,157696,157697,157699,157701,157704],{"class":104,"line":1203},[102,157698,31290],{"class":161},[102,157700,113],{"class":112},[102,157702,157703],{"class":217},"\"未成年人\"",[102,157705,119],{"class":112},[19,157707,157708],{},"执行逻辑：",[56,157710,157711,157717,157722],{},[59,157712,157713,157714,157716],{},"条件成立，执行 ",[99,157715,1520],{}," 代码块。",[59,157718,157719,157720,157716],{},"条件不成立，执行 ",[99,157721,1690],{},[59,157723,157724],{},"两个代码块只会执行其中一个。",[14,157726,157728],{"id":157727},"_34-if-elif-else","3.4 if elif else",[19,157730,157731],{},"多条件判断：",[93,157733,157735],{"className":30369,"code":157734,"language":30371,"meta":23,"style":23},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[99,157736,157737,157755,157759,157773,157784,157798,157809,157822,157833,157839],{"__ignoreMap":23},[102,157738,157739,157741,157743,157745,157747,157749,157751,157753],{"class":104,"line":105},[102,157740,155340],{"class":112},[102,157742,158],{"class":108},[102,157744,2371],{"class":161},[102,157746,113],{"class":112},[102,157748,53812],{"class":161},[102,157750,113],{"class":112},[102,157752,152391],{"class":217},[102,157754,30488],{"class":112},[102,157756,157757],{"class":104,"line":24},[102,157758,2389],{"emptyLinePlaceholder":30},[102,157760,157761,157763,157766,157768,157771],{"class":104,"line":1168},[102,157762,1520],{"class":108},[102,157764,157765],{"class":112}," score ",[102,157767,1699],{"class":108},[102,157769,157770],{"class":161}," 90",[102,157772,3728],{"class":112},[102,157774,157775,157777,157779,157782],{"class":104,"line":1183},[102,157776,31290],{"class":161},[102,157778,113],{"class":112},[102,157780,157781],{"class":217},"\"优秀\"",[102,157783,119],{"class":112},[102,157785,157786,157789,157791,157793,157796],{"class":104,"line":1189},[102,157787,157788],{"class":108},"elif",[102,157790,157765],{"class":112},[102,157792,1699],{"class":108},[102,157794,157795],{"class":161}," 80",[102,157797,3728],{"class":112},[102,157799,157800,157802,157804,157807],{"class":104,"line":1203},[102,157801,31290],{"class":161},[102,157803,113],{"class":112},[102,157805,157806],{"class":217},"\"良好\"",[102,157808,119],{"class":112},[102,157810,157811,157813,157815,157817,157820],{"class":104,"line":1209},[102,157812,157788],{"class":108},[102,157814,157765],{"class":112},[102,157816,1699],{"class":108},[102,157818,157819],{"class":161}," 60",[102,157821,3728],{"class":112},[102,157823,157824,157826,157828,157831],{"class":104,"line":1300},[102,157825,31290],{"class":161},[102,157827,113],{"class":112},[102,157829,157830],{"class":217},"\"及格\"",[102,157832,119],{"class":112},[102,157834,157835,157837],{"class":104,"line":1306},[102,157836,1690],{"class":108},[102,157838,3728],{"class":112},[102,157840,157841,157843,157845,157848],{"class":104,"line":1318},[102,157842,31290],{"class":161},[102,157844,113],{"class":112},[102,157846,157847],{"class":217},"\"不及格\"",[102,157849,119],{"class":112},[19,157851,157852],{},"注意判断顺序很重要。",[19,157854,157855,157856,157859],{},"如果把 ",[99,157857,157858],{},"score >= 60"," 放在最前面：",[93,157861,157863],{"className":30369,"code":157862,"language":30371,"meta":23,"style":23},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[99,157864,157865,157877,157887,157899],{"__ignoreMap":23},[102,157866,157867,157869,157871,157873,157875],{"class":104,"line":105},[102,157868,1520],{"class":108},[102,157870,157765],{"class":112},[102,157872,1699],{"class":108},[102,157874,157819],{"class":161},[102,157876,3728],{"class":112},[102,157878,157879,157881,157883,157885],{"class":104,"line":24},[102,157880,31290],{"class":161},[102,157882,113],{"class":112},[102,157884,157830],{"class":217},[102,157886,119],{"class":112},[102,157888,157889,157891,157893,157895,157897],{"class":104,"line":1168},[102,157890,157788],{"class":108},[102,157892,157765],{"class":112},[102,157894,1699],{"class":108},[102,157896,157770],{"class":161},[102,157898,3728],{"class":112},[102,157900,157901,157903,157905,157907],{"class":104,"line":1183},[102,157902,31290],{"class":161},[102,157904,113],{"class":112},[102,157906,157781],{"class":217},[102,157908,119],{"class":112},[19,157910,157911,157912,157914],{},"成绩 95 会先满足 ",[99,157913,157858],{},"，后面的优秀分支就不会执行。",[14,157916,157918],{"id":157917},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,157920,157921],{},"嵌套判断就是在一个判断内部再写判断。",[93,157923,157925],{"className":30369,"code":157924,"language":30371,"meta":23,"style":23},"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",[99,157926,157927,157945,157960,157964,157976,157990,158000,158007,158018,158024],{"__ignoreMap":23},[102,157928,157929,157931,157933,157935,157937,157939,157941,157943],{"class":104,"line":105},[102,157930,146528],{"class":112},[102,157932,158],{"class":108},[102,157934,2371],{"class":161},[102,157936,113],{"class":112},[102,157938,53812],{"class":161},[102,157940,113],{"class":112},[102,157942,152376],{"class":217},[102,157944,30488],{"class":112},[102,157946,157947,157949,157951,157953,157955,157958],{"class":104,"line":24},[102,157948,156343],{"class":112},[102,157950,158],{"class":108},[102,157952,60596],{"class":161},[102,157954,113],{"class":112},[102,157956,157957],{"class":217},"\"是否有票(y\u002Fn):\"",[102,157959,119],{"class":112},[102,157961,157962],{"class":104,"line":1168},[102,157963,2389],{"emptyLinePlaceholder":30},[102,157965,157966,157968,157970,157972,157974],{"class":104,"line":1183},[102,157967,1520],{"class":108},[102,157969,15697],{"class":112},[102,157971,1699],{"class":108},[102,157973,156267],{"class":161},[102,157975,3728],{"class":112},[102,157977,157978,157980,157983,157985,157988],{"class":104,"line":1189},[102,157979,3090],{"class":108},[102,157981,157982],{"class":112}," has_ticket ",[102,157984,2938],{"class":108},[102,157986,157987],{"class":217}," \"y\"",[102,157989,3728],{"class":112},[102,157991,157992,157994,157996,157998],{"class":104,"line":1203},[102,157993,32442],{"class":161},[102,157995,113],{"class":112},[102,157997,157629],{"class":217},[102,157999,119],{"class":112},[102,158001,158002,158005],{"class":104,"line":1209},[102,158003,158004],{"class":108},"    else",[102,158006,3728],{"class":112},[102,158008,158009,158011,158013,158016],{"class":104,"line":1300},[102,158010,32442],{"class":161},[102,158012,113],{"class":112},[102,158014,158015],{"class":217},"\"请先买票\"",[102,158017,119],{"class":112},[102,158019,158020,158022],{"class":104,"line":1306},[102,158021,1690],{"class":108},[102,158023,3728],{"class":112},[102,158025,158026,158028,158030,158033],{"class":104,"line":1318},[102,158027,31290],{"class":161},[102,158029,113],{"class":112},[102,158031,158032],{"class":217},"\"未成年人禁止进入\"",[102,158034,119],{"class":112},[19,158036,158037],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158039,158041],{"id":158040},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[73,158043,158045],{"id":158044},"_361-and","3.6.1 and",[19,158047,158048],{},"两个条件都成立才成立。",[93,158050,158052],{"className":30369,"code":158051,"language":30371,"meta":23,"style":23},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[99,158053,158054,158062,158070,158074,158089],{"__ignoreMap":23},[102,158055,158056,158058,158060],{"class":104,"line":105},[102,158057,146528],{"class":112},[102,158059,158],{"class":108},[102,158061,88056],{"class":161},[102,158063,158064,158066,158068],{"class":104,"line":24},[102,158065,156343],{"class":112},[102,158067,158],{"class":108},[102,158069,153581],{"class":161},[102,158071,158072],{"class":104,"line":1168},[102,158073,2389],{"emptyLinePlaceholder":30},[102,158075,158076,158078,158080,158082,158084,158086],{"class":104,"line":1183},[102,158077,1520],{"class":108},[102,158079,15697],{"class":112},[102,158081,1699],{"class":108},[102,158083,156267],{"class":161},[102,158085,120420],{"class":108},[102,158087,158088],{"class":112}," has_ticket:\n",[102,158090,158091,158093,158095,158097],{"class":104,"line":1189},[102,158092,31290],{"class":161},[102,158094,113],{"class":112},[102,158096,157629],{"class":217},[102,158098,119],{"class":112},[73,158100,158102],{"id":158101},"_362-or","3.6.2 or",[19,158104,158105],{},"只要一个条件成立就成立。",[93,158107,158109],{"className":30369,"code":158108,"language":30371,"meta":23,"style":23},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[99,158110,158111,158120,158129,158133,158145],{"__ignoreMap":23},[102,158112,158113,158116,158118],{"class":104,"line":105},[102,158114,158115],{"class":112},"is_vip ",[102,158117,158],{"class":108},[102,158119,125798],{"class":161},[102,158121,158122,158125,158127],{"class":104,"line":24},[102,158123,158124],{"class":112},"coupon ",[102,158126,158],{"class":108},[102,158128,153581],{"class":161},[102,158130,158131],{"class":104,"line":1168},[102,158132,2389],{"emptyLinePlaceholder":30},[102,158134,158135,158137,158140,158142],{"class":104,"line":1183},[102,158136,1520],{"class":108},[102,158138,158139],{"class":112}," is_vip ",[102,158141,115081],{"class":108},[102,158143,158144],{"class":112}," coupon:\n",[102,158146,158147,158149,158151,158154],{"class":104,"line":1189},[102,158148,31290],{"class":161},[102,158150,113],{"class":112},[102,158152,158153],{"class":217},"\"可以享受优惠\"",[102,158155,119],{"class":112},[73,158157,158159],{"id":158158},"_363-not","3.6.3 not",[19,158161,158162],{},"取反。",[93,158164,158166],{"className":30369,"code":158165,"language":30371,"meta":23,"style":23},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[99,158167,158168,158177,158181,158190],{"__ignoreMap":23},[102,158169,158170,158173,158175],{"class":104,"line":105},[102,158171,158172],{"class":112},"is_closed ",[102,158174,158],{"class":108},[102,158176,125798],{"class":161},[102,158178,158179],{"class":104,"line":24},[102,158180,2389],{"emptyLinePlaceholder":30},[102,158182,158183,158185,158187],{"class":104,"line":1168},[102,158184,1520],{"class":108},[102,158186,38921],{"class":108},[102,158188,158189],{"class":112}," is_closed:\n",[102,158191,158192,158194,158196,158199],{"class":104,"line":1183},[102,158193,31290],{"class":161},[102,158195,113],{"class":112},[102,158197,158198],{"class":217},"\"店铺营业中\"",[102,158200,119],{"class":112},[14,158202,158204],{"id":158203},"_37-链式比较","3.7 链式比较",[19,158206,158207],{},"Python 支持链式比较：",[93,158209,158211],{"className":30369,"code":158210,"language":30371,"meta":23,"style":23},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[99,158212,158213,158222,158226,158243],{"__ignoreMap":23},[102,158214,158215,158217,158219],{"class":104,"line":105},[102,158216,155340],{"class":112},[102,158218,158],{"class":108},[102,158220,158221],{"class":161}," 85\n",[102,158223,158224],{"class":104,"line":24},[102,158225,2389],{"emptyLinePlaceholder":30},[102,158227,158228,158230,158232,158235,158237,158239,158241],{"class":104,"line":1168},[102,158229,1520],{"class":108},[102,158231,4082],{"class":161},[102,158233,158234],{"class":108}," \u003C=",[102,158236,157765],{"class":112},[102,158238,1577],{"class":108},[102,158240,5744],{"class":161},[102,158242,3728],{"class":112},[102,158244,158245,158247,158249,158252],{"class":104,"line":1183},[102,158246,31290],{"class":161},[102,158248,113],{"class":112},[102,158250,158251],{"class":217},"\"成绩合法\"",[102,158253,119],{"class":112},[19,158255,158256],{},"等价于：",[93,158258,158260],{"className":30369,"code":158259,"language":30371,"meta":23,"style":23},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[99,158261,158262,158282],{"__ignoreMap":23},[102,158263,158264,158266,158268,158270,158272,158274,158276,158278,158280],{"class":104,"line":105},[102,158265,1520],{"class":108},[102,158267,157765],{"class":112},[102,158269,1699],{"class":108},[102,158271,4082],{"class":161},[102,158273,120420],{"class":108},[102,158275,157765],{"class":112},[102,158277,1577],{"class":108},[102,158279,5744],{"class":161},[102,158281,3728],{"class":112},[102,158283,158284,158286,158288,158290],{"class":104,"line":24},[102,158285,31290],{"class":161},[102,158287,113],{"class":112},[102,158289,158251],{"class":217},[102,158291,119],{"class":112},[14,158293,158295],{"id":158294},"_38-真值和假值","3.8 真值和假值",[19,158297,116458,158298,158300],{},[99,158299,1520],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158302,158303],{},"假值：",[93,158305,158307],{"className":30369,"code":158306,"language":30371,"meta":23,"style":23},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[99,158308,158309,158313,158318,158322,158326,158331,158335,158339,158344],{"__ignoreMap":23},[102,158310,158311],{"class":104,"line":105},[102,158312,157499],{"class":161},[102,158314,158315],{"class":104,"line":24},[102,158316,158317],{"class":161},"None\n",[102,158319,158320],{"class":104,"line":1168},[102,158321,3074],{"class":161},[102,158323,158324],{"class":104,"line":1183},[102,158325,32333],{"class":161},[102,158327,158328],{"class":104,"line":1189},[102,158329,158330],{"class":217},"\"\"\n",[102,158332,158333],{"class":104,"line":1203},[102,158334,32348],{"class":112},[102,158336,158337],{"class":104,"line":1209},[102,158338,1965],{"class":112},[102,158340,158341],{"class":104,"line":1300},[102,158342,158343],{"class":112},"{}\n",[102,158345,158346,158348],{"class":104,"line":1306},[102,158347,155272],{"class":161},[102,158349,1965],{"class":112},[19,158351,15125],{},[93,158353,158355],{"className":30369,"code":158354,"language":30371,"meta":23,"style":23},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[99,158356,158357,158371,158375,158382,158402,158408],{"__ignoreMap":23},[102,158358,158359,158361,158363,158365,158367,158369],{"class":104,"line":105},[102,158360,146518],{"class":112},[102,158362,158],{"class":108},[102,158364,60596],{"class":161},[102,158366,113],{"class":112},[102,158368,152361],{"class":217},[102,158370,119],{"class":112},[102,158372,158373],{"class":104,"line":24},[102,158374,2389],{"emptyLinePlaceholder":30},[102,158376,158377,158379],{"class":104,"line":1168},[102,158378,1520],{"class":108},[102,158380,158381],{"class":112}," name:\n",[102,158383,158384,158386,158388,158390,158392,158394,158396,158398,158400],{"class":104,"line":1183},[102,158385,31290],{"class":161},[102,158387,113],{"class":112},[102,158389,165],{"class":108},[102,158391,157036],{"class":217},[102,158393,1009],{"class":161},[102,158395,79801],{"class":112},[102,158397,1059],{"class":161},[102,158399,364],{"class":217},[102,158401,119],{"class":112},[102,158403,158404,158406],{"class":104,"line":1189},[102,158405,1690],{"class":108},[102,158407,3728],{"class":112},[102,158409,158410,158412,158414,158417],{"class":104,"line":1203},[102,158411,31290],{"class":161},[102,158413,113],{"class":112},[102,158415,158416],{"class":217},"\"姓名不能为空\"",[102,158418,119],{"class":112},[14,158420,158422],{"id":158421},"_39-match语句","3.9 match语句",[19,158424,158425,158426,158428],{},"Python 3.10 开始支持 ",[99,158427,71256],{},"。它适合处理固定选项。",[93,158430,158432],{"className":30369,"code":158431,"language":30371,"meta":23,"style":23},"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",[99,158433,158434,158450,158454,158461,158471,158482,158491,158502,158511,158522,158529],{"__ignoreMap":23},[102,158435,158436,158439,158441,158443,158445,158448],{"class":104,"line":105},[102,158437,158438],{"class":112},"command ",[102,158440,158],{"class":108},[102,158442,60596],{"class":161},[102,158444,113],{"class":112},[102,158446,158447],{"class":217},"\"请输入命令:\"",[102,158449,119],{"class":112},[102,158451,158452],{"class":104,"line":24},[102,158453,2389],{"emptyLinePlaceholder":30},[102,158455,158456,158458],{"class":104,"line":1168},[102,158457,71256],{"class":108},[102,158459,158460],{"class":112}," command:\n",[102,158462,158463,158466,158469],{"class":104,"line":1183},[102,158464,158465],{"class":108},"    case",[102,158467,158468],{"class":217}," \"start\"",[102,158470,3728],{"class":112},[102,158472,158473,158475,158477,158480],{"class":104,"line":1189},[102,158474,32442],{"class":161},[102,158476,113],{"class":112},[102,158478,158479],{"class":217},"\"启动\"",[102,158481,119],{"class":112},[102,158483,158484,158486,158489],{"class":104,"line":1203},[102,158485,158465],{"class":108},[102,158487,158488],{"class":217}," \"stop\"",[102,158490,3728],{"class":112},[102,158492,158493,158495,158497,158500],{"class":104,"line":1209},[102,158494,32442],{"class":161},[102,158496,113],{"class":112},[102,158498,158499],{"class":217},"\"停止\"",[102,158501,119],{"class":112},[102,158503,158504,158506,158509],{"class":104,"line":1300},[102,158505,158465],{"class":108},[102,158507,158508],{"class":217}," \"restart\"",[102,158510,3728],{"class":112},[102,158512,158513,158515,158517,158520],{"class":104,"line":1306},[102,158514,32442],{"class":161},[102,158516,113],{"class":112},[102,158518,158519],{"class":217},"\"重启\"",[102,158521,119],{"class":112},[102,158523,158524,158526],{"class":104,"line":1318},[102,158525,158465],{"class":108},[102,158527,158528],{"class":112}," _:\n",[102,158530,158531,158533,158535,158538],{"class":104,"line":1601},[102,158532,32442],{"class":161},[102,158534,113],{"class":112},[102,158536,158537],{"class":217},"\"未知命令\"",[102,158539,119],{"class":112},[19,158541,158542,158543,158545,158546,158548],{},"入门阶段掌握 ",[99,158544,154640],{}," 更重要，",[99,158547,71256],{}," 可以作为补充。",[14,158550,158552],{"id":158551},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158554,123283],{},[56,158556,158557,158560,158563],{},[59,158558,158559],{},"输入成绩。",[59,158561,158562],{},"判断成绩是否合法。",[59,158564,158565],{},"输出等级。",[19,158567,10025],{},[93,158569,158571],{"className":30369,"code":158570,"language":30371,"meta":23,"style":23},"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",[99,158572,158573,158591,158595,158613,158624,158636,158647,158659,158670,158683,158694,158706,158717,158723],{"__ignoreMap":23},[102,158574,158575,158577,158579,158581,158583,158585,158587,158589],{"class":104,"line":105},[102,158576,155340],{"class":112},[102,158578,158],{"class":108},[102,158580,109788],{"class":161},[102,158582,113],{"class":112},[102,158584,53812],{"class":161},[102,158586,113],{"class":112},[102,158588,152391],{"class":217},[102,158590,30488],{"class":112},[102,158592,158593],{"class":104,"line":24},[102,158594,2389],{"emptyLinePlaceholder":30},[102,158596,158597,158599,158601,158603,158605,158607,158609,158611],{"class":104,"line":1168},[102,158598,1520],{"class":108},[102,158600,38921],{"class":108},[102,158602,4082],{"class":161},[102,158604,158234],{"class":108},[102,158606,157765],{"class":112},[102,158608,1577],{"class":108},[102,158610,5744],{"class":161},[102,158612,3728],{"class":112},[102,158614,158615,158617,158619,158622],{"class":104,"line":1183},[102,158616,31290],{"class":161},[102,158618,113],{"class":112},[102,158620,158621],{"class":217},"\"成绩不合法\"",[102,158623,119],{"class":112},[102,158625,158626,158628,158630,158632,158634],{"class":104,"line":1189},[102,158627,157788],{"class":108},[102,158629,157765],{"class":112},[102,158631,1699],{"class":108},[102,158633,157770],{"class":161},[102,158635,3728],{"class":112},[102,158637,158638,158640,158642,158645],{"class":104,"line":1203},[102,158639,31290],{"class":161},[102,158641,113],{"class":112},[102,158643,158644],{"class":217},"\"等级:A\"",[102,158646,119],{"class":112},[102,158648,158649,158651,158653,158655,158657],{"class":104,"line":1209},[102,158650,157788],{"class":108},[102,158652,157765],{"class":112},[102,158654,1699],{"class":108},[102,158656,157795],{"class":161},[102,158658,3728],{"class":112},[102,158660,158661,158663,158665,158668],{"class":104,"line":1300},[102,158662,31290],{"class":161},[102,158664,113],{"class":112},[102,158666,158667],{"class":217},"\"等级:B\"",[102,158669,119],{"class":112},[102,158671,158672,158674,158676,158678,158681],{"class":104,"line":1306},[102,158673,157788],{"class":108},[102,158675,157765],{"class":112},[102,158677,1699],{"class":108},[102,158679,158680],{"class":161}," 70",[102,158682,3728],{"class":112},[102,158684,158685,158687,158689,158692],{"class":104,"line":1318},[102,158686,31290],{"class":161},[102,158688,113],{"class":112},[102,158690,158691],{"class":217},"\"等级:C\"",[102,158693,119],{"class":112},[102,158695,158696,158698,158700,158702,158704],{"class":104,"line":1601},[102,158697,157788],{"class":108},[102,158699,157765],{"class":112},[102,158701,1699],{"class":108},[102,158703,157819],{"class":161},[102,158705,3728],{"class":112},[102,158707,158708,158710,158712,158715],{"class":104,"line":1606},[102,158709,31290],{"class":161},[102,158711,113],{"class":112},[102,158713,158714],{"class":217},"\"等级:D\"",[102,158716,119],{"class":112},[102,158718,158719,158721],{"class":104,"line":1612},[102,158720,1690],{"class":108},[102,158722,3728],{"class":112},[102,158724,158725,158727,158729,158732],{"class":104,"line":1617},[102,158726,31290],{"class":161},[102,158728,113],{"class":112},[102,158730,158731],{"class":217},"\"等级:E\"",[102,158733,119],{"class":112},[14,158735,158737],{"id":158736},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158739,123283],{},[56,158741,158742,158745,158748,158751],{},[59,158743,158744],{},"输入消费金额。",[59,158746,158747],{},"输入会员等级，普通、银卡、金卡。",[59,158749,158750],{},"普通不打折，银卡 9 折，金卡 8 折。",[59,158752,158753],{},"满 500 再减 50。",[19,158755,10025],{},[93,158757,158759],{"className":30369,"code":158758,"language":30371,"meta":23,"style":23},"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",[99,158760,158761,158781,158797,158801,158809,158813,158827,158837,158850,158859,158872,158880,158886,158897,158901,158915,158919,158933,158943,158947],{"__ignoreMap":23},[102,158762,158763,158766,158768,158770,158772,158774,158776,158779],{"class":104,"line":105},[102,158764,158765],{"class":112},"amount ",[102,158767,158],{"class":108},[102,158769,109788],{"class":161},[102,158771,113],{"class":112},[102,158773,53812],{"class":161},[102,158775,113],{"class":112},[102,158777,158778],{"class":217},"\"请输入消费金额:\"",[102,158780,30488],{"class":112},[102,158782,158783,158786,158788,158790,158792,158795],{"class":104,"line":24},[102,158784,158785],{"class":112},"level ",[102,158787,158],{"class":108},[102,158789,60596],{"class":161},[102,158791,113],{"class":112},[102,158793,158794],{"class":217},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[102,158796,119],{"class":112},[102,158798,158799],{"class":104,"line":1168},[102,158800,2389],{"emptyLinePlaceholder":30},[102,158802,158803,158805,158807],{"class":104,"line":1183},[102,158804,157218],{"class":112},[102,158806,158],{"class":108},[102,158808,55690],{"class":161},[102,158810,158811],{"class":104,"line":1189},[102,158812,2389],{"emptyLinePlaceholder":30},[102,158814,158815,158817,158820,158822,158825],{"class":104,"line":1203},[102,158816,1520],{"class":108},[102,158818,158819],{"class":112}," level ",[102,158821,2938],{"class":108},[102,158823,158824],{"class":217}," \"银卡\"",[102,158826,3728],{"class":112},[102,158828,158829,158832,158834],{"class":104,"line":1209},[102,158830,158831],{"class":112},"    discount ",[102,158833,158],{"class":108},[102,158835,158836],{"class":161}," 0.9\n",[102,158838,158839,158841,158843,158845,158848],{"class":104,"line":1300},[102,158840,157788],{"class":108},[102,158842,158819],{"class":112},[102,158844,2938],{"class":108},[102,158846,158847],{"class":217}," \"金卡\"",[102,158849,3728],{"class":112},[102,158851,158852,158854,158856],{"class":104,"line":1306},[102,158853,158831],{"class":112},[102,158855,158],{"class":108},[102,158857,158858],{"class":161}," 0.8\n",[102,158860,158861,158863,158865,158867,158870],{"class":104,"line":1318},[102,158862,157788],{"class":108},[102,158864,158819],{"class":112},[102,158866,2938],{"class":108},[102,158868,158869],{"class":217}," \"普通\"",[102,158871,3728],{"class":112},[102,158873,158874,158876,158878],{"class":104,"line":1601},[102,158875,158831],{"class":112},[102,158877,158],{"class":108},[102,158879,55690],{"class":161},[102,158881,158882,158884],{"class":104,"line":1606},[102,158883,1690],{"class":108},[102,158885,3728],{"class":112},[102,158887,158888,158890,158892,158895],{"class":104,"line":1612},[102,158889,31290],{"class":161},[102,158891,113],{"class":112},[102,158893,158894],{"class":217},"\"会员等级输入错误，按普通会员计算\"",[102,158896,119],{"class":112},[102,158898,158899],{"class":104,"line":1617},[102,158900,2389],{"emptyLinePlaceholder":30},[102,158902,158903,158906,158908,158911,158913],{"class":104,"line":1631},[102,158904,158905],{"class":112},"pay ",[102,158907,158],{"class":108},[102,158909,158910],{"class":112}," amount ",[102,158912,568],{"class":108},[102,158914,157257],{"class":112},[102,158916,158917],{"class":104,"line":1636},[102,158918,2389],{"emptyLinePlaceholder":30},[102,158920,158921,158923,158926,158928,158931],{"class":104,"line":1642},[102,158922,1520],{"class":108},[102,158924,158925],{"class":112}," pay ",[102,158927,1699],{"class":108},[102,158929,158930],{"class":161}," 500",[102,158932,3728],{"class":112},[102,158934,158935,158938,158940],{"class":104,"line":1663},[102,158936,158937],{"class":112},"    pay ",[102,158939,150234],{"class":108},[102,158941,158942],{"class":161}," 50\n",[102,158944,158945],{"class":104,"line":1668},[102,158946,2389],{"emptyLinePlaceholder":30},[102,158948,158949,158951,158953,158955,158957,158959,158962,158964,158966,158968],{"class":104,"line":1682},[102,158950,30406],{"class":161},[102,158952,113],{"class":112},[102,158954,165],{"class":108},[102,158956,157338],{"class":217},[102,158958,1009],{"class":161},[102,158960,158961],{"class":112},"pay",[102,158963,157141],{"class":108},[102,158965,1059],{"class":161},[102,158967,156994],{"class":217},[102,158969,119],{"class":112},[14,158971,158973],{"id":158972},"_312-易错点","3.12 易错点",[56,158975,158976,158979,158982,158985,158990],{},[59,158977,158978],{},"冒号不能漏。",[59,158980,158981],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[59,158983,158984],{},"多分支判断要注意顺序。",[59,158986,158987,158988,28376],{},"判断相等用 ",[99,158989,2938],{},[59,158991,158992],{},"字符串比较区分大小写：",[93,158994,158996],{"className":30369,"code":158995,"language":30371,"meta":23,"style":23},"\"Y\" == \"y\"  # False\n",[99,158997,158998],{"__ignoreMap":23},[102,158999,159000,159003,159005,159007],{"class":104,"line":105},[102,159001,159002],{"class":217},"\"Y\"",[102,159004,101550],{"class":108},[102,159006,157987],{"class":217},[102,159008,159009],{"class":171},"  # False\n",[19,159011,159012],{},"可转换后再判断：",[93,159014,159016],{"className":30369,"code":159015,"language":30371,"meta":23,"style":23},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[99,159017,159018,159035,159048],{"__ignoreMap":23},[102,159019,159020,159023,159025,159027,159029,159032],{"class":104,"line":105},[102,159021,159022],{"class":112},"answer ",[102,159024,158],{"class":108},[102,159026,60596],{"class":161},[102,159028,113],{"class":112},[102,159030,159031],{"class":217},"\"是否继续(y\u002Fn):\"",[102,159033,159034],{"class":112},").lower()\n",[102,159036,159037,159039,159042,159044,159046],{"class":104,"line":24},[102,159038,1520],{"class":108},[102,159040,159041],{"class":112}," answer ",[102,159043,2938],{"class":108},[102,159045,157987],{"class":217},[102,159047,3728],{"class":112},[102,159049,159050,159052,159054,159057],{"class":104,"line":1168},[102,159051,31290],{"class":161},[102,159053,113],{"class":112},[102,159055,159056],{"class":217},"\"继续\"",[102,159058,119],{"class":112},[14,159060,159062],{"id":159061},"_313-本章练习","3.13 本章练习",[56,159064,159065,159068,159071,159074,159084],{},[59,159066,159067],{},"输入年龄，判断是否成年。",[59,159069,159070],{},"输入年份，判断是否为闰年。",[59,159072,159073],{},"输入三个数字，输出最大值。",[59,159075,159076,159077,159080,159081,159083],{},"写登录判断：用户名是 ",[99,159078,159079],{},"admin"," 且密码是 ",[99,159082,15074],{}," 才登录成功。",[59,159085,159086],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5116,159088,159089],{},"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":23,"searchDepth":24,"depth":24,"links":159091},[159092,159093,159094,159095,159096,159097,159102,159103,159104,159105,159106,159107,159108],{"id":157480,"depth":24,"text":157481},{"id":157533,"depth":24,"text":157534},{"id":157637,"depth":24,"text":157638},{"id":157727,"depth":24,"text":157728},{"id":157917,"depth":24,"text":157918},{"id":158040,"depth":24,"text":158041,"children":159098},[159099,159100,159101],{"id":158044,"depth":1168,"text":158045},{"id":158101,"depth":1168,"text":158102},{"id":158158,"depth":1168,"text":158159},{"id":158203,"depth":24,"text":158204},{"id":158294,"depth":24,"text":158295},{"id":158421,"depth":24,"text":158422},{"id":158551,"depth":24,"text":158552},{"id":158736,"depth":24,"text":158737},{"id":158972,"depth":24,"text":158973},{"id":159061,"depth":24,"text":159062},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157472,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159115,"title":159116,"body":159117,"description":27,"extension":28,"meta":160886,"navigation":30,"path":160887,"seo":160888,"stem":160889,"__hash__":160890},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159118,"toc":160866},[159119,159122,159126,159132,159135,159152,159156,159158,159175,159177,159222,159224,159241,159245,159248,159314,159317,159335,159339,159500,159509,159513,159517,159522,159569,159571,159577,159581,159586,159633,159635,159641,159645,159650,159686,159689,159736,159740,159746,159804,159809,159840,159845,159849,159904,159907,159979,159982,160041,160045,160048,160123,160126,160130,160236,160239,160265,160269,160281,160350,160353,160445,160449,160451,160462,160464,160594,160598,160800,160808,160812,160842,160846,160863],[10,159120,159116],{"id":159121},"_4-循环语句",[14,159123,159125],{"id":159124},"_41-为什么需要循环","4.1 为什么需要循环",[19,159127,159128,159129,159131],{},"如果要输出 1 到 100，不应该写 100 行 ",[99,159130,146454],{},"，而应该用循环。",[19,159133,159134],{},"循环适合处理重复任务：",[56,159136,159137,159140,159143,159146,159149],{},[59,159138,159139],{},"重复输出。",[59,159141,159142],{},"重复输入。",[59,159144,159145],{},"遍历数据。",[59,159147,159148],{},"持续执行菜单。",[59,159150,159151],{},"批量处理文件或数据。",[14,159153,159155],{"id":159154},"_42-while循环","4.2 while循环",[19,159157,5171],{},[93,159159,159161],{"className":30369,"code":159160,"language":30371,"meta":23,"style":23},"while 条件:\n    循环体\n",[99,159162,159163,159170],{"__ignoreMap":23},[102,159164,159165,159167],{"class":104,"line":105},[102,159166,108654],{"class":108},[102,159168,159169],{"class":112}," 条件:\n",[102,159171,159172],{"class":104,"line":24},[102,159173,159174],{"class":112},"    循环体\n",[19,159176,15125],{},[93,159178,159180],{"className":30369,"code":159179,"language":30371,"meta":23,"style":23},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[99,159181,159182,159190,159194,159206,159213],{"__ignoreMap":23},[102,159183,159184,159186,159188],{"class":104,"line":105},[102,159185,100139],{"class":112},[102,159187,158],{"class":108},[102,159189,55690],{"class":161},[102,159191,159192],{"class":104,"line":24},[102,159193,2389],{"emptyLinePlaceholder":30},[102,159195,159196,159198,159200,159202,159204],{"class":104,"line":1168},[102,159197,108654],{"class":108},[102,159199,9428],{"class":112},[102,159201,1577],{"class":108},[102,159203,2137],{"class":161},[102,159205,3728],{"class":112},[102,159207,159208,159210],{"class":104,"line":1183},[102,159209,31290],{"class":161},[102,159211,159212],{"class":112},"(i)\n",[102,159214,159215,159218,159220],{"class":104,"line":1189},[102,159216,159217],{"class":112},"    i ",[102,159219,9467],{"class":108},[102,159221,55690],{"class":161},[19,159223,80920],{},[56,159225,159226,159232,159235,159238],{},[59,159227,159228,159229,28376],{},"判断条件 ",[99,159230,159231],{},"i \u003C= 5",[59,159233,159234],{},"条件成立，执行循环体。",[59,159236,159237],{},"执行完后回到条件判断。",[59,159239,159240],{},"条件不成立，退出循环。",[14,159242,159244],{"id":159243},"_43-while累加","4.3 while累加",[19,159246,159247],{},"计算 1 到 100 的和：",[93,159249,159251],{"className":30369,"code":159250,"language":30371,"meta":23,"style":23},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[99,159252,159253,159261,159269,159273,159285,159295,159303,159307],{"__ignoreMap":23},[102,159254,159255,159257,159259],{"class":104,"line":105},[102,159256,100139],{"class":112},[102,159258,158],{"class":108},[102,159260,55690],{"class":161},[102,159262,159263,159265,159267],{"class":104,"line":24},[102,159264,157242],{"class":112},[102,159266,158],{"class":108},[102,159268,47324],{"class":161},[102,159270,159271],{"class":104,"line":1168},[102,159272,2389],{"emptyLinePlaceholder":30},[102,159274,159275,159277,159279,159281,159283],{"class":104,"line":1183},[102,159276,108654],{"class":108},[102,159278,9428],{"class":112},[102,159280,1577],{"class":108},[102,159282,5744],{"class":161},[102,159284,3728],{"class":112},[102,159286,159287,159290,159292],{"class":104,"line":1189},[102,159288,159289],{"class":112},"    total ",[102,159291,9467],{"class":108},[102,159293,159294],{"class":112}," i\n",[102,159296,159297,159299,159301],{"class":104,"line":1203},[102,159298,159217],{"class":112},[102,159300,9467],{"class":108},[102,159302,55690],{"class":161},[102,159304,159305],{"class":104,"line":1209},[102,159306,2389],{"emptyLinePlaceholder":30},[102,159308,159309,159311],{"class":104,"line":1300},[102,159310,30406],{"class":161},[102,159312,159313],{"class":112},"(total)\n",[19,159315,159316],{},"核心思想：",[56,159318,159319,159324,159329],{},[59,159320,159321,159323],{},[99,159322,554],{}," 控制循环次数。",[59,159325,159326,159328],{},[99,159327,157343],{}," 保存累加结果。",[59,159330,159331,159332,159334],{},"每轮循环都要更新 ",[99,159333,554],{},"，否则可能死循环。",[14,159336,159338],{"id":159337},"_44-while猜数字","4.4 while猜数字",[93,159340,159342],{"className":30369,"code":159341,"language":30371,"meta":23,"style":23},"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",[99,159343,159344,159350,159354,159371,159379,159383,159391,159411,159420,159424,159436,159447,159457,159468,159474,159496],{"__ignoreMap":23},[102,159345,159346,159348],{"class":104,"line":105},[102,159347,30383],{"class":108},[102,159349,45319],{"class":112},[102,159351,159352],{"class":104,"line":24},[102,159353,2389],{"emptyLinePlaceholder":30},[102,159355,159356,159358,159360,159363,159365,159367,159369],{"class":104,"line":1168},[102,159357,159022],{"class":112},[102,159359,158],{"class":108},[102,159361,159362],{"class":112}," random.randint(",[102,159364,330],{"class":161},[102,159366,12425],{"class":112},[102,159368,424],{"class":161},[102,159370,119],{"class":112},[102,159372,159373,159375,159377],{"class":104,"line":1183},[102,159374,146673],{"class":112},[102,159376,158],{"class":108},[102,159378,47324],{"class":161},[102,159380,159381],{"class":104,"line":1189},[102,159382,2389],{"emptyLinePlaceholder":30},[102,159384,159385,159387,159389],{"class":104,"line":1203},[102,159386,108654],{"class":108},[102,159388,95283],{"class":161},[102,159390,3728],{"class":112},[102,159392,159393,159396,159398,159400,159402,159404,159406,159409],{"class":104,"line":1209},[102,159394,159395],{"class":112},"    guess ",[102,159397,158],{"class":108},[102,159399,2371],{"class":161},[102,159401,113],{"class":112},[102,159403,53812],{"class":161},[102,159405,113],{"class":112},[102,159407,159408],{"class":217},"\"请输入1到100之间的数字:\"",[102,159410,30488],{"class":112},[102,159412,159413,159416,159418],{"class":104,"line":1300},[102,159414,159415],{"class":112},"    count ",[102,159417,9467],{"class":108},[102,159419,55690],{"class":161},[102,159421,159422],{"class":104,"line":1306},[102,159423,2389],{"emptyLinePlaceholder":30},[102,159425,159426,159428,159431,159433],{"class":104,"line":1318},[102,159427,3090],{"class":108},[102,159429,159430],{"class":112}," guess ",[102,159432,1073],{"class":108},[102,159434,159435],{"class":112}," answer:\n",[102,159437,159438,159440,159442,159445],{"class":104,"line":1601},[102,159439,32442],{"class":161},[102,159441,113],{"class":112},[102,159443,159444],{"class":217},"\"猜大了\"",[102,159446,119],{"class":112},[102,159448,159449,159451,159453,159455],{"class":104,"line":1606},[102,159450,39284],{"class":108},[102,159452,159430],{"class":112},[102,159454,1023],{"class":108},[102,159456,159435],{"class":112},[102,159458,159459,159461,159463,159466],{"class":104,"line":1612},[102,159460,32442],{"class":161},[102,159462,113],{"class":112},[102,159464,159465],{"class":217},"\"猜小了\"",[102,159467,119],{"class":112},[102,159469,159470,159472],{"class":104,"line":1617},[102,159471,158004],{"class":108},[102,159473,3728],{"class":112},[102,159475,159476,159478,159480,159482,159485,159487,159489,159491,159494],{"class":104,"line":1631},[102,159477,32442],{"class":161},[102,159479,113],{"class":112},[102,159481,165],{"class":108},[102,159483,159484],{"class":217},"\"猜对了，一共猜了",[102,159486,1009],{"class":161},[102,159488,84425],{"class":112},[102,159490,1059],{"class":161},[102,159492,159493],{"class":217},"次\"",[102,159495,119],{"class":112},[102,159497,159498],{"class":104,"line":1636},[102,159499,31618],{"class":108},[19,159501,159502,159505,159506,159508],{},[99,159503,159504],{},"while True"," 表示无限循环，通常配合 ",[99,159507,2042],{}," 使用。",[14,159510,159512],{"id":159511},"_45-break和continue","4.5 break和continue",[73,159514,159516],{"id":159515},"_451-break","4.5.1 break",[19,159518,159519,159521],{},[99,159520,2042],{}," 直接结束整个循环。",[93,159523,159525],{"className":30369,"code":159524,"language":30371,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[99,159526,159527,159547,159559,159563],{"__ignoreMap":23},[102,159528,159529,159531,159533,159535,159537,159539,159541,159543,159545],{"class":104,"line":105},[102,159530,3014],{"class":108},[102,159532,9428],{"class":112},[102,159534,26034],{"class":108},[102,159536,32434],{"class":161},[102,159538,113],{"class":112},[102,159540,330],{"class":161},[102,159542,12425],{"class":112},[102,159544,457],{"class":161},[102,159546,30777],{"class":112},[102,159548,159549,159551,159553,159555,159557],{"class":104,"line":24},[102,159550,3090],{"class":108},[102,159552,9428],{"class":112},[102,159554,2938],{"class":108},[102,159556,78061],{"class":161},[102,159558,3728],{"class":112},[102,159560,159561],{"class":104,"line":1168},[102,159562,31618],{"class":108},[102,159564,159565,159567],{"class":104,"line":1183},[102,159566,31290],{"class":161},[102,159568,159212],{"class":112},[19,159570,146439],{},[93,159572,159575],{"className":159573,"code":159574,"language":5177,"meta":23},[5175],"1\n2\n",[99,159576,159574],{"__ignoreMap":23},[73,159578,159580],{"id":159579},"_452-continue","4.5.2 continue",[19,159582,159583,159585],{},[99,159584,154654],{}," 跳过本轮剩余代码，进入下一轮循环。",[93,159587,159589],{"className":30369,"code":159588,"language":30371,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[99,159590,159591,159611,159623,159627],{"__ignoreMap":23},[102,159592,159593,159595,159597,159599,159601,159603,159605,159607,159609],{"class":104,"line":105},[102,159594,3014],{"class":108},[102,159596,9428],{"class":112},[102,159598,26034],{"class":108},[102,159600,32434],{"class":161},[102,159602,113],{"class":112},[102,159604,330],{"class":161},[102,159606,12425],{"class":112},[102,159608,457],{"class":161},[102,159610,30777],{"class":112},[102,159612,159613,159615,159617,159619,159621],{"class":104,"line":24},[102,159614,3090],{"class":108},[102,159616,9428],{"class":112},[102,159618,2938],{"class":108},[102,159620,78061],{"class":161},[102,159622,3728],{"class":112},[102,159624,159625],{"class":104,"line":1168},[102,159626,148494],{"class":108},[102,159628,159629,159631],{"class":104,"line":1183},[102,159630,31290],{"class":161},[102,159632,159212],{"class":112},[19,159634,146439],{},[93,159636,159639],{"className":159637,"code":159638,"language":5177,"meta":23},[5175],"1\n2\n4\n5\n",[99,159640,159638],{"__ignoreMap":23},[14,159642,159644],{"id":159643},"_46-for循环","4.6 for循环",[19,159646,159647,159649],{},[99,159648,3014],{}," 常用于遍历序列。",[93,159651,159653],{"className":30369,"code":159652,"language":30371,"meta":23,"style":23},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[99,159654,159655,159664,159668,159679],{"__ignoreMap":23},[102,159656,159657,159659,159661],{"class":104,"line":105},[102,159658,146518],{"class":112},[102,159660,158],{"class":108},[102,159662,159663],{"class":217}," \"python\"\n",[102,159665,159666],{"class":104,"line":24},[102,159667,2389],{"emptyLinePlaceholder":30},[102,159669,159670,159672,159675,159677],{"class":104,"line":1168},[102,159671,3014],{"class":108},[102,159673,159674],{"class":112}," ch ",[102,159676,26034],{"class":108},[102,159678,158381],{"class":112},[102,159680,159681,159683],{"class":104,"line":1183},[102,159682,31290],{"class":161},[102,159684,159685],{"class":112},"(ch)\n",[19,159687,159688],{},"遍历列表：",[93,159690,159692],{"className":30369,"code":159691,"language":30371,"meta":23,"style":23},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[99,159693,159694,159716,159720,159730],{"__ignoreMap":23},[102,159695,159696,159699,159701,159703,159705,159707,159709,159711,159714],{"class":104,"line":105},[102,159697,159698],{"class":112},"students ",[102,159700,158],{"class":108},[102,159702,52217],{"class":112},[102,159704,149870],{"class":217},[102,159706,12425],{"class":112},[102,159708,150918],{"class":217},[102,159710,12425],{"class":112},[102,159712,159713],{"class":217},"\"小刚\"",[102,159715,33237],{"class":112},[102,159717,159718],{"class":104,"line":24},[102,159719,2389],{"emptyLinePlaceholder":30},[102,159721,159722,159724,159726,159728],{"class":104,"line":1168},[102,159723,3014],{"class":108},[102,159725,152119],{"class":112},[102,159727,26034],{"class":108},[102,159729,152124],{"class":112},[102,159731,159732,159734],{"class":104,"line":1183},[102,159733,31290],{"class":161},[102,159735,150024],{"class":112},[14,159737,159739],{"id":159738},"_47-range函数","4.7 range函数",[19,159741,159742,159745],{},[99,159743,159744],{},"range()"," 用于生成整数序列。",[93,159747,159749],{"className":30369,"code":159748,"language":30371,"meta":23,"style":23},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[99,159750,159751,159765,159783],{"__ignoreMap":23},[102,159752,159753,159755,159757,159759,159762],{"class":104,"line":105},[102,159754,33407],{"class":161},[102,159756,113],{"class":112},[102,159758,432],{"class":161},[102,159760,159761],{"class":112},")          ",[102,159763,159764],{"class":171},"# 0,1,2,3,4\n",[102,159766,159767,159769,159771,159773,159775,159777,159780],{"class":104,"line":24},[102,159768,33407],{"class":161},[102,159770,113],{"class":112},[102,159772,330],{"class":161},[102,159774,12425],{"class":112},[102,159776,432],{"class":161},[102,159778,159779],{"class":112},")       ",[102,159781,159782],{"class":171},"# 1,2,3,4\n",[102,159784,159785,159787,159789,159791,159793,159795,159797,159799,159801],{"class":104,"line":1168},[102,159786,33407],{"class":161},[102,159788,113],{"class":112},[102,159790,330],{"class":161},[102,159792,12425],{"class":112},[102,159794,559],{"class":161},[102,159796,12425],{"class":112},[102,159798,190],{"class":161},[102,159800,155643],{"class":112},[102,159802,159803],{"class":171},"# 1,3,5,7,9\n",[19,159805,159806,159807,24609],{},"配合 ",[99,159808,3014],{},[93,159810,159812],{"className":30369,"code":159811,"language":30371,"meta":23,"style":23},"for i in range(1, 6):\n    print(i)\n",[99,159813,159814,159834],{"__ignoreMap":23},[102,159815,159816,159818,159820,159822,159824,159826,159828,159830,159832],{"class":104,"line":105},[102,159817,3014],{"class":108},[102,159819,9428],{"class":112},[102,159821,26034],{"class":108},[102,159823,32434],{"class":161},[102,159825,113],{"class":112},[102,159827,330],{"class":161},[102,159829,12425],{"class":112},[102,159831,457],{"class":161},[102,159833,30777],{"class":112},[102,159835,159836,159838],{"class":104,"line":24},[102,159837,31290],{"class":161},[102,159839,159212],{"class":112},[19,159841,9015,159842,159844],{},[99,159843,33407],{}," 的结束值不包含在内。",[14,159846,159848],{"id":159847},"_48-for循环求和","4.8 for循环求和",[93,159850,159852],{"className":30369,"code":159851,"language":30371,"meta":23,"style":23},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[99,159853,159854,159862,159866,159886,159894,159898],{"__ignoreMap":23},[102,159855,159856,159858,159860],{"class":104,"line":105},[102,159857,157242],{"class":112},[102,159859,158],{"class":108},[102,159861,47324],{"class":161},[102,159863,159864],{"class":104,"line":24},[102,159865,2389],{"emptyLinePlaceholder":30},[102,159867,159868,159870,159872,159874,159876,159878,159880,159882,159884],{"class":104,"line":1168},[102,159869,3014],{"class":108},[102,159871,9428],{"class":112},[102,159873,26034],{"class":108},[102,159875,32434],{"class":161},[102,159877,113],{"class":112},[102,159879,330],{"class":161},[102,159881,12425],{"class":112},[102,159883,450],{"class":161},[102,159885,30777],{"class":112},[102,159887,159888,159890,159892],{"class":104,"line":1183},[102,159889,159289],{"class":112},[102,159891,9467],{"class":108},[102,159893,159294],{"class":112},[102,159895,159896],{"class":104,"line":1189},[102,159897,2389],{"emptyLinePlaceholder":30},[102,159899,159900,159902],{"class":104,"line":1203},[102,159901,30406],{"class":161},[102,159903,159313],{"class":112},[19,159905,159906],{},"求偶数和：",[93,159908,159910],{"className":30369,"code":159909,"language":30371,"meta":23,"style":23},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[99,159911,159912,159920,159924,159944,159960,159969,159973],{"__ignoreMap":23},[102,159913,159914,159916,159918],{"class":104,"line":105},[102,159915,157242],{"class":112},[102,159917,158],{"class":108},[102,159919,47324],{"class":161},[102,159921,159922],{"class":104,"line":24},[102,159923,2389],{"emptyLinePlaceholder":30},[102,159925,159926,159928,159930,159932,159934,159936,159938,159940,159942],{"class":104,"line":1168},[102,159927,3014],{"class":108},[102,159929,9428],{"class":112},[102,159931,26034],{"class":108},[102,159933,32434],{"class":161},[102,159935,113],{"class":112},[102,159937,330],{"class":161},[102,159939,12425],{"class":112},[102,159941,450],{"class":161},[102,159943,30777],{"class":112},[102,159945,159946,159948,159950,159952,159954,159956,159958],{"class":104,"line":1183},[102,159947,3090],{"class":108},[102,159949,9428],{"class":112},[102,159951,441],{"class":108},[102,159953,14745],{"class":161},[102,159955,101550],{"class":108},[102,159957,4082],{"class":161},[102,159959,3728],{"class":112},[102,159961,159962,159965,159967],{"class":104,"line":1189},[102,159963,159964],{"class":112},"        total ",[102,159966,9467],{"class":108},[102,159968,159294],{"class":112},[102,159970,159971],{"class":104,"line":1203},[102,159972,2389],{"emptyLinePlaceholder":30},[102,159974,159975,159977],{"class":104,"line":1209},[102,159976,30406],{"class":161},[102,159978,159313],{"class":112},[19,159980,159981],{},"也可以：",[93,159983,159985],{"className":30369,"code":159984,"language":30371,"meta":23,"style":23},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[99,159986,159987,159995,159999,160023,160031,160035],{"__ignoreMap":23},[102,159988,159989,159991,159993],{"class":104,"line":105},[102,159990,157242],{"class":112},[102,159992,158],{"class":108},[102,159994,47324],{"class":161},[102,159996,159997],{"class":104,"line":24},[102,159998,2389],{"emptyLinePlaceholder":30},[102,160000,160001,160003,160005,160007,160009,160011,160013,160015,160017,160019,160021],{"class":104,"line":1168},[102,160002,3014],{"class":108},[102,160004,9428],{"class":112},[102,160006,26034],{"class":108},[102,160008,32434],{"class":161},[102,160010,113],{"class":112},[102,160012,190],{"class":161},[102,160014,12425],{"class":112},[102,160016,450],{"class":161},[102,160018,12425],{"class":112},[102,160020,190],{"class":161},[102,160022,30777],{"class":112},[102,160024,160025,160027,160029],{"class":104,"line":1183},[102,160026,159289],{"class":112},[102,160028,9467],{"class":108},[102,160030,159294],{"class":112},[102,160032,160033],{"class":104,"line":1189},[102,160034,2389],{"emptyLinePlaceholder":30},[102,160036,160037,160039],{"class":104,"line":1203},[102,160038,30406],{"class":161},[102,160040,159313],{"class":112},[14,160042,160044],{"id":160043},"_49-循环嵌套","4.9 循环嵌套",[19,160046,160047],{},"嵌套循环就是循环里面再写循环。",[93,160049,160051],{"className":30369,"code":160050,"language":30371,"meta":23,"style":23},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[99,160052,160053,160073,160093],{"__ignoreMap":23},[102,160054,160055,160057,160059,160061,160063,160065,160067,160069,160071],{"class":104,"line":105},[102,160056,3014],{"class":108},[102,160058,9428],{"class":112},[102,160060,26034],{"class":108},[102,160062,32434],{"class":161},[102,160064,113],{"class":112},[102,160066,330],{"class":161},[102,160068,12425],{"class":112},[102,160070,406],{"class":161},[102,160072,30777],{"class":112},[102,160074,160075,160077,160079,160081,160083,160085,160087,160089,160091],{"class":104,"line":24},[102,160076,3190],{"class":108},[102,160078,9490],{"class":112},[102,160080,26034],{"class":108},[102,160082,32434],{"class":161},[102,160084,113],{"class":112},[102,160086,330],{"class":161},[102,160088,12425],{"class":112},[102,160090,406],{"class":161},[102,160092,30777],{"class":112},[102,160094,160095,160097,160099,160101,160104,160106,160108,160110,160113,160115,160117,160119,160121],{"class":104,"line":1168},[102,160096,32442],{"class":161},[102,160098,113],{"class":112},[102,160100,165],{"class":108},[102,160102,160103],{"class":217},"\"i=",[102,160105,1009],{"class":161},[102,160107,554],{"class":112},[102,160109,1059],{"class":161},[102,160111,160112],{"class":217},", j=",[102,160114,1009],{"class":161},[102,160116,580],{"class":112},[102,160118,1059],{"class":161},[102,160120,364],{"class":217},[102,160122,119],{"class":112},[19,160124,160125],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160127,160129],{"id":160128},"_410-九九乘法表","4.10 九九乘法表",[93,160131,160133],{"className":30369,"code":160132,"language":30371,"meta":23,"style":23},"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",[99,160134,160135,160155,160178,160230],{"__ignoreMap":23},[102,160136,160137,160139,160141,160143,160145,160147,160149,160151,160153],{"class":104,"line":105},[102,160138,3014],{"class":108},[102,160140,9428],{"class":112},[102,160142,26034],{"class":108},[102,160144,32434],{"class":161},[102,160146,113],{"class":112},[102,160148,330],{"class":161},[102,160150,12425],{"class":112},[102,160152,559],{"class":161},[102,160154,30777],{"class":112},[102,160156,160157,160159,160161,160163,160165,160167,160169,160172,160174,160176],{"class":104,"line":24},[102,160158,3190],{"class":108},[102,160160,9490],{"class":112},[102,160162,26034],{"class":108},[102,160164,32434],{"class":161},[102,160166,113],{"class":112},[102,160168,330],{"class":161},[102,160170,160171],{"class":112},", i ",[102,160173,594],{"class":108},[102,160175,25109],{"class":161},[102,160177,30777],{"class":112},[102,160179,160180,160182,160184,160186,160188,160190,160192,160194,160196,160198,160200,160202,160204,160206,160208,160210,160212,160214,160216,160218,160220,160222,160224,160226,160228],{"class":104,"line":1168},[102,160181,32442],{"class":161},[102,160183,113],{"class":112},[102,160185,165],{"class":108},[102,160187,364],{"class":217},[102,160189,1009],{"class":161},[102,160191,580],{"class":112},[102,160193,1059],{"class":161},[102,160195,568],{"class":217},[102,160197,1009],{"class":161},[102,160199,554],{"class":112},[102,160201,1059],{"class":161},[102,160203,158],{"class":217},[102,160205,1009],{"class":161},[102,160207,100139],{"class":112},[102,160209,568],{"class":108},[102,160211,3399],{"class":112},[102,160213,1059],{"class":161},[102,160215,364],{"class":217},[102,160217,12425],{"class":112},[102,160219,45792],{"class":5206},[102,160221,158],{"class":108},[102,160223,364],{"class":217},[102,160225,1219],{"class":161},[102,160227,364],{"class":217},[102,160229,119],{"class":112},[102,160231,160232,160234],{"class":104,"line":1183},[102,160233,31290],{"class":161},[102,160235,1965],{"class":112},[19,160237,160238],{},"关键点：",[56,160240,160241,160247,160253,160259],{},[59,160242,160243,160244,160246],{},"外层 ",[99,160245,554],{}," 控制行。",[59,160248,160249,160250,160252],{},"内层 ",[99,160251,580],{}," 控制列。",[59,160254,160255,160256,160258],{},"每行结束后用 ",[99,160257,146454],{}," 换行。",[59,160260,160261,160264],{},[99,160262,160263],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160266,160268],{"id":160267},"_411-循环else","4.11 循环else",[19,160270,160271,160272,160274,160275,160277,160278,160280],{},"Python 的循环可以带 ",[99,160273,1690],{},"。当循环正常结束时执行 ",[99,160276,1690],{},"，如果被 ",[99,160279,2042],{}," 打断，则不执行。",[93,160282,160284],{"className":30369,"code":160283,"language":30371,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[99,160285,160286,160306,160318,160329,160333,160339],{"__ignoreMap":23},[102,160287,160288,160290,160292,160294,160296,160298,160300,160302,160304],{"class":104,"line":105},[102,160289,3014],{"class":108},[102,160291,9428],{"class":112},[102,160293,26034],{"class":108},[102,160295,32434],{"class":161},[102,160297,113],{"class":112},[102,160299,330],{"class":161},[102,160301,12425],{"class":112},[102,160303,457],{"class":161},[102,160305,30777],{"class":112},[102,160307,160308,160310,160312,160314,160316],{"class":104,"line":24},[102,160309,3090],{"class":108},[102,160311,9428],{"class":112},[102,160313,2938],{"class":108},[102,160315,2027],{"class":161},[102,160317,3728],{"class":112},[102,160319,160320,160322,160324,160327],{"class":104,"line":1168},[102,160321,32442],{"class":161},[102,160323,113],{"class":112},[102,160325,160326],{"class":217},"\"找到了\"",[102,160328,119],{"class":112},[102,160330,160331],{"class":104,"line":1183},[102,160332,31618],{"class":108},[102,160334,160335,160337],{"class":104,"line":1189},[102,160336,1690],{"class":108},[102,160338,3728],{"class":112},[102,160340,160341,160343,160345,160348],{"class":104,"line":1203},[102,160342,31290],{"class":161},[102,160344,113],{"class":112},[102,160346,160347],{"class":217},"\"没找到\"",[102,160349,119],{"class":112},[19,160351,160352],{},"常用于搜索。",[93,160354,160356],{"className":30369,"code":160355,"language":30371,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[99,160357,160358,160379,160388,160392,160404,160415,160425,160429,160435],{"__ignoreMap":23},[102,160359,160360,160363,160365,160367,160369,160371,160373,160375,160377],{"class":104,"line":105},[102,160361,160362],{"class":112},"names ",[102,160364,158],{"class":108},[102,160366,52217],{"class":112},[102,160368,149870],{"class":217},[102,160370,12425],{"class":112},[102,160372,150918],{"class":217},[102,160374,12425],{"class":112},[102,160376,159713],{"class":217},[102,160378,33237],{"class":112},[102,160380,160381,160383,160385],{"class":104,"line":24},[102,160382,111569],{"class":112},[102,160384,158],{"class":108},[102,160386,160387],{"class":217}," \"小李\"\n",[102,160389,160390],{"class":104,"line":1168},[102,160391,2389],{"emptyLinePlaceholder":30},[102,160393,160394,160396,160399,160401],{"class":104,"line":1183},[102,160395,3014],{"class":108},[102,160397,160398],{"class":112}," name ",[102,160400,26034],{"class":108},[102,160402,160403],{"class":112}," names:\n",[102,160405,160406,160408,160410,160412],{"class":104,"line":1189},[102,160407,3090],{"class":108},[102,160409,160398],{"class":112},[102,160411,2938],{"class":108},[102,160413,160414],{"class":112}," target:\n",[102,160416,160417,160419,160421,160423],{"class":104,"line":1203},[102,160418,32442],{"class":161},[102,160420,113],{"class":112},[102,160422,160326],{"class":217},[102,160424,119],{"class":112},[102,160426,160427],{"class":104,"line":1209},[102,160428,31618],{"class":108},[102,160430,160431,160433],{"class":104,"line":1300},[102,160432,1690],{"class":108},[102,160434,3728],{"class":112},[102,160436,160437,160439,160441,160443],{"class":104,"line":1306},[102,160438,31290],{"class":161},[102,160440,113],{"class":112},[102,160442,160347],{"class":217},[102,160444,119],{"class":112},[14,160446,160448],{"id":160447},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160450,123283],{},[56,160452,160453,160456,160459],{},[59,160454,160455],{},"用户最多输入 3 次密码。",[59,160457,160458],{},"密码正确则登录成功。",[59,160460,160461],{},"3 次都错误则锁定账号。",[19,160463,10025],{},[93,160465,160467],{"className":30369,"code":160466,"language":30371,"meta":23,"style":23},"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",[99,160468,160469,160479,160483,160499,160515,160519,160531,160542,160546,160552,160577,160583],{"__ignoreMap":23},[102,160470,160471,160474,160476],{"class":104,"line":105},[102,160472,160473],{"class":112},"password ",[102,160475,158],{"class":108},[102,160477,160478],{"class":217}," \"123456\"\n",[102,160480,160481],{"class":104,"line":24},[102,160482,2389],{"emptyLinePlaceholder":30},[102,160484,160485,160487,160489,160491,160493,160495,160497],{"class":104,"line":1168},[102,160486,3014],{"class":108},[102,160488,9428],{"class":112},[102,160490,26034],{"class":108},[102,160492,32434],{"class":161},[102,160494,113],{"class":112},[102,160496,184],{"class":161},[102,160498,30777],{"class":112},[102,160500,160501,160504,160506,160508,160510,160513],{"class":104,"line":1183},[102,160502,160503],{"class":112},"    user_password ",[102,160505,158],{"class":108},[102,160507,60596],{"class":161},[102,160509,113],{"class":112},[102,160511,160512],{"class":217},"\"请输入密码:\"",[102,160514,119],{"class":112},[102,160516,160517],{"class":104,"line":1189},[102,160518,2389],{"emptyLinePlaceholder":30},[102,160520,160521,160523,160526,160528],{"class":104,"line":1203},[102,160522,3090],{"class":108},[102,160524,160525],{"class":112}," user_password ",[102,160527,2938],{"class":108},[102,160529,160530],{"class":112}," password:\n",[102,160532,160533,160535,160537,160540],{"class":104,"line":1209},[102,160534,32442],{"class":161},[102,160536,113],{"class":112},[102,160538,160539],{"class":217},"\"登录成功\"",[102,160541,119],{"class":112},[102,160543,160544],{"class":104,"line":1300},[102,160545,31618],{"class":108},[102,160547,160548,160550],{"class":104,"line":1306},[102,160549,158004],{"class":108},[102,160551,3728],{"class":112},[102,160553,160554,160556,160558,160560,160563,160566,160568,160570,160572,160575],{"class":104,"line":1318},[102,160555,32442],{"class":161},[102,160557,113],{"class":112},[102,160559,165],{"class":108},[102,160561,160562],{"class":217},"\"密码错误，还剩",[102,160564,160565],{"class":161},"{2",[102,160567,52262],{"class":108},[102,160569,3021],{"class":112},[102,160571,1059],{"class":161},[102,160573,160574],{"class":217},"次机会\"",[102,160576,119],{"class":112},[102,160578,160579,160581],{"class":104,"line":1601},[102,160580,1690],{"class":108},[102,160582,3728],{"class":112},[102,160584,160585,160587,160589,160592],{"class":104,"line":1606},[102,160586,31290],{"class":161},[102,160588,113],{"class":112},[102,160590,160591],{"class":217},"\"账号已锁定\"",[102,160593,119],{"class":112},[14,160595,160597],{"id":160596},"_413-小案例菜单程序","4.13 小案例：菜单程序",[93,160599,160601],{"className":30369,"code":160600,"language":30371,"meta":23,"style":23},"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",[99,160602,160603,160611,160622,160633,160644,160655,160666,160670,160685,160689,160701,160712,160724,160735,160747,160758,160770,160780,160784,160790],{"__ignoreMap":23},[102,160604,160605,160607,160609],{"class":104,"line":105},[102,160606,108654],{"class":108},[102,160608,95283],{"class":161},[102,160610,3728],{"class":112},[102,160612,160613,160615,160617,160620],{"class":104,"line":24},[102,160614,31290],{"class":161},[102,160616,113],{"class":112},[102,160618,160619],{"class":217},"\"====== 菜单 ======\"",[102,160621,119],{"class":112},[102,160623,160624,160626,160628,160631],{"class":104,"line":1168},[102,160625,31290],{"class":161},[102,160627,113],{"class":112},[102,160629,160630],{"class":217},"\"1. 查询余额\"",[102,160632,119],{"class":112},[102,160634,160635,160637,160639,160642],{"class":104,"line":1183},[102,160636,31290],{"class":161},[102,160638,113],{"class":112},[102,160640,160641],{"class":217},"\"2. 存款\"",[102,160643,119],{"class":112},[102,160645,160646,160648,160650,160653],{"class":104,"line":1189},[102,160647,31290],{"class":161},[102,160649,113],{"class":112},[102,160651,160652],{"class":217},"\"3. 取款\"",[102,160654,119],{"class":112},[102,160656,160657,160659,160661,160664],{"class":104,"line":1203},[102,160658,31290],{"class":161},[102,160660,113],{"class":112},[102,160662,160663],{"class":217},"\"0. 退出\"",[102,160665,119],{"class":112},[102,160667,160668],{"class":104,"line":1209},[102,160669,2389],{"emptyLinePlaceholder":30},[102,160671,160672,160675,160677,160679,160681,160683],{"class":104,"line":1300},[102,160673,160674],{"class":112},"    choice ",[102,160676,158],{"class":108},[102,160678,60596],{"class":161},[102,160680,113],{"class":112},[102,160682,153055],{"class":217},[102,160684,119],{"class":112},[102,160686,160687],{"class":104,"line":1306},[102,160688,2389],{"emptyLinePlaceholder":30},[102,160690,160691,160693,160695,160697,160699],{"class":104,"line":1318},[102,160692,3090],{"class":108},[102,160694,153068],{"class":112},[102,160696,2938],{"class":108},[102,160698,153073],{"class":217},[102,160700,3728],{"class":112},[102,160702,160703,160705,160707,160710],{"class":104,"line":1601},[102,160704,32442],{"class":161},[102,160706,113],{"class":112},[102,160708,160709],{"class":217},"\"余额为1000元\"",[102,160711,119],{"class":112},[102,160713,160714,160716,160718,160720,160722],{"class":104,"line":1606},[102,160715,39284],{"class":108},[102,160717,153068],{"class":112},[102,160719,2938],{"class":108},[102,160721,153092],{"class":217},[102,160723,3728],{"class":112},[102,160725,160726,160728,160730,160733],{"class":104,"line":1612},[102,160727,32442],{"class":161},[102,160729,113],{"class":112},[102,160731,160732],{"class":217},"\"存款功能\"",[102,160734,119],{"class":112},[102,160736,160737,160739,160741,160743,160745],{"class":104,"line":1617},[102,160738,39284],{"class":108},[102,160740,153068],{"class":112},[102,160742,2938],{"class":108},[102,160744,153110],{"class":217},[102,160746,3728],{"class":112},[102,160748,160749,160751,160753,160756],{"class":104,"line":1631},[102,160750,32442],{"class":161},[102,160752,113],{"class":112},[102,160754,160755],{"class":217},"\"取款功能\"",[102,160757,119],{"class":112},[102,160759,160760,160762,160764,160766,160768],{"class":104,"line":1636},[102,160761,39284],{"class":108},[102,160763,153068],{"class":112},[102,160765,2938],{"class":108},[102,160767,153164],{"class":217},[102,160769,3728],{"class":112},[102,160771,160772,160774,160776,160778],{"class":104,"line":1642},[102,160773,32442],{"class":161},[102,160775,113],{"class":112},[102,160777,153175],{"class":217},[102,160779,119],{"class":112},[102,160781,160782],{"class":104,"line":1663},[102,160783,31618],{"class":108},[102,160785,160786,160788],{"class":104,"line":1668},[102,160787,158004],{"class":108},[102,160789,3728],{"class":112},[102,160791,160792,160794,160796,160798],{"class":104,"line":1682},[102,160793,32442],{"class":161},[102,160795,113],{"class":112},[102,160797,153196],{"class":217},[102,160799,119],{"class":112},[19,160801,160802,160803,160805,160806,28376],{},"菜单类程序通常使用 ",[99,160804,159504],{},"，用户选择退出时 ",[99,160807,2042],{},[14,160809,160811],{"id":160810},"_414-易错点","4.14 易错点",[56,160813,160814,160819,160825,160833,160839],{},[59,160815,160816,160818],{},[99,160817,108654],{}," 循环必须更新控制变量。",[59,160820,160821,160824],{},[99,160822,160823],{},"range(1, 10)"," 不包含 10。",[59,160826,160827,160829,160830,160832],{},[99,160828,2042],{}," 结束整个循环，",[99,160831,154654],{}," 只跳过本轮。",[59,160834,160835,160836,160838],{},"嵌套循环中，",[99,160837,2042],{}," 只跳出当前所在的一层循环。",[59,160840,160841],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,160843,160845],{"id":160844},"_415-本章练习","4.15 本章练习",[56,160847,160848,160851,160854,160857,160860],{},[59,160849,160850],{},"输出 1 到 100。",[59,160852,160853],{},"计算 1 到 100 的偶数和。",[59,160855,160856],{},"输出 100 以内能被 3 和 5 同时整除的数。",[59,160858,160859],{},"编写猜数字游戏，限制最多猜 7 次。",[59,160861,160862],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5116,160864,160865],{},"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":23,"searchDepth":24,"depth":24,"links":160867},[160868,160869,160870,160871,160872,160876,160877,160878,160879,160880,160881,160882,160883,160884,160885],{"id":159124,"depth":24,"text":159125},{"id":159154,"depth":24,"text":159155},{"id":159243,"depth":24,"text":159244},{"id":159337,"depth":24,"text":159338},{"id":159511,"depth":24,"text":159512,"children":160873},[160874,160875],{"id":159515,"depth":1168,"text":159516},{"id":159579,"depth":1168,"text":159580},{"id":159643,"depth":24,"text":159644},{"id":159738,"depth":24,"text":159739},{"id":159847,"depth":24,"text":159848},{"id":160043,"depth":24,"text":160044},{"id":160128,"depth":24,"text":160129},{"id":160267,"depth":24,"text":160268},{"id":160447,"depth":24,"text":160448},{"id":160596,"depth":24,"text":160597},{"id":160810,"depth":24,"text":160811},{"id":160844,"depth":24,"text":160845},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159116,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160892,"title":160893,"body":160894,"description":27,"extension":28,"meta":162899,"navigation":30,"path":162900,"seo":162901,"stem":162902,"__hash__":162903},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160895,"toc":162879},[160896,160899,160903,160906,160909,160923,160926,160940,160944,160946,160965,160967,161014,161016,161030,161034,161108,161111,161115,161118,161177,161185,161188,161241,161244,161248,161253,161308,161316,161366,161370,161375,161383,161482,161488,161492,161497,161500,161511,161552,161565,161569,161572,161608,161611,161624,161627,161687,161691,161695,161698,161749,161753,161756,161803,161809,161875,161878,161882,161885,162001,162004,162008,162011,162117,162121,162124,162162,162165,162207,162210,162270,162273,162277,162741,162744,162748,162775,162781,162842,162846,162876],[10,160897,160893],{"id":160898},"_5-函数基础",[14,160900,160902],{"id":160901},"_51-为什么需要函数","5.1 为什么需要函数",[19,160904,160905],{},"函数用于封装一段可以重复使用的代码。",[19,160907,160908],{},"不使用函数的问题：",[56,160910,160911,160914,160917,160920],{},[59,160912,160913],{},"重复代码多。",[59,160915,160916],{},"修改逻辑时容易漏改。",[59,160918,160919],{},"主流程不清晰。",[59,160921,160922],{},"程序越写越长，难以维护。",[19,160924,160925],{},"使用函数后的好处：",[56,160927,160928,160931,160934,160937],{},[59,160929,160930],{},"提高复用性。",[59,160932,160933],{},"提高可读性。",[59,160935,160936],{},"便于调试。",[59,160938,160939],{},"便于分工。",[14,160941,160943],{"id":160942},"_52-函数定义","5.2 函数定义",[19,160945,5171],{},[93,160947,160949],{"className":30369,"code":160948,"language":30371,"meta":23,"style":23},"def 函数名():\n    函数体\n",[99,160950,160951,160960],{"__ignoreMap":23},[102,160952,160953,160955,160958],{"class":104,"line":105},[102,160954,31938],{"class":108},[102,160956,160957],{"class":1952}," 函数名",[102,160959,31944],{"class":112},[102,160961,160962],{"class":104,"line":24},[102,160963,160964],{"class":112},"    函数体\n",[19,160966,15125],{},[93,160968,160970],{"className":30369,"code":160969,"language":30371,"meta":23,"style":23},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[99,160971,160972,160981,160991,161001,161005,161009],{"__ignoreMap":23},[102,160973,160974,160976,160979],{"class":104,"line":105},[102,160975,31938],{"class":108},[102,160977,160978],{"class":1952}," say_hello",[102,160980,31944],{"class":112},[102,160982,160983,160985,160987,160989],{"class":104,"line":24},[102,160984,31290],{"class":161},[102,160986,113],{"class":112},[102,160988,5834],{"class":217},[102,160990,119],{"class":112},[102,160992,160993,160995,160997,160999],{"class":104,"line":1168},[102,160994,31290],{"class":161},[102,160996,113],{"class":112},[102,160998,146621],{"class":217},[102,161000,119],{"class":112},[102,161002,161003],{"class":104,"line":1183},[102,161004,2389],{"emptyLinePlaceholder":30},[102,161006,161007],{"class":104,"line":1189},[102,161008,2389],{"emptyLinePlaceholder":30},[102,161010,161011],{"class":104,"line":1203},[102,161012,161013],{"class":112},"say_hello()\n",[19,161015,9015],{},[56,161017,161018,161021,161024,161027],{},[59,161019,161020],{},"函数必须先定义，再调用。",[59,161022,161023],{},"函数名遵循变量命名规则。",[59,161025,161026],{},"函数体需要缩进。",[59,161028,161029],{},"函数不调用就不会执行。",[14,161031,161033],{"id":161032},"_53-函数调用","5.3 函数调用",[93,161035,161037],{"className":30369,"code":161036,"language":30371,"meta":23,"style":23},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[99,161038,161039,161048,161059,161070,161081,161091,161095,161099,161104],{"__ignoreMap":23},[102,161040,161041,161043,161046],{"class":104,"line":105},[102,161042,31938],{"class":108},[102,161044,161045],{"class":1952}," print_menu",[102,161047,31944],{"class":112},[102,161049,161050,161052,161054,161057],{"class":104,"line":24},[102,161051,31290],{"class":161},[102,161053,113],{"class":112},[102,161055,161056],{"class":217},"\"1. 查询\"",[102,161058,119],{"class":112},[102,161060,161061,161063,161065,161068],{"class":104,"line":1168},[102,161062,31290],{"class":161},[102,161064,113],{"class":112},[102,161066,161067],{"class":217},"\"2. 添加\"",[102,161069,119],{"class":112},[102,161071,161072,161074,161076,161079],{"class":104,"line":1183},[102,161073,31290],{"class":161},[102,161075,113],{"class":112},[102,161077,161078],{"class":217},"\"3. 删除\"",[102,161080,119],{"class":112},[102,161082,161083,161085,161087,161089],{"class":104,"line":1189},[102,161084,31290],{"class":161},[102,161086,113],{"class":112},[102,161088,160663],{"class":217},[102,161090,119],{"class":112},[102,161092,161093],{"class":104,"line":1203},[102,161094,2389],{"emptyLinePlaceholder":30},[102,161096,161097],{"class":104,"line":1209},[102,161098,2389],{"emptyLinePlaceholder":30},[102,161100,161101],{"class":104,"line":1300},[102,161102,161103],{"class":112},"print_menu()\n",[102,161105,161106],{"class":104,"line":1306},[102,161107,161103],{"class":112},[19,161109,161110],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161112,161114],{"id":161113},"_54-参数","5.4 参数",[19,161116,161117],{},"参数用于向函数传递数据。",[93,161119,161121],{"className":30369,"code":161120,"language":30371,"meta":23,"style":23},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[99,161122,161123,161132,161152,161156,161160,161169],{"__ignoreMap":23},[102,161124,161125,161127,161129],{"class":104,"line":105},[102,161126,31938],{"class":108},[102,161128,160978],{"class":1952},[102,161130,161131],{"class":112},"(name):\n",[102,161133,161134,161136,161138,161140,161142,161144,161146,161148,161150],{"class":104,"line":24},[102,161135,31290],{"class":161},[102,161137,113],{"class":112},[102,161139,165],{"class":108},[102,161141,157036],{"class":217},[102,161143,1009],{"class":161},[102,161145,79801],{"class":112},[102,161147,1059],{"class":161},[102,161149,364],{"class":217},[102,161151,119],{"class":112},[102,161153,161154],{"class":104,"line":1168},[102,161155,2389],{"emptyLinePlaceholder":30},[102,161157,161158],{"class":104,"line":1183},[102,161159,2389],{"emptyLinePlaceholder":30},[102,161161,161162,161165,161167],{"class":104,"line":1189},[102,161163,161164],{"class":112},"say_hello(",[102,161166,149870],{"class":217},[102,161168,119],{"class":112},[102,161170,161171,161173,161175],{"class":104,"line":1203},[102,161172,161164],{"class":112},[102,161174,150918],{"class":217},[102,161176,119],{"class":112},[19,161178,161179,161181,161182,161184],{},[99,161180,79801],{}," 是形参，",[99,161183,149870],{}," 是实参。",[19,161186,161187],{},"多个参数：",[93,161189,161191],{"className":30369,"code":161190,"language":30371,"meta":23,"style":23},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[99,161192,161193,161201,161214,161220,161224,161228],{"__ignoreMap":23},[102,161194,161195,161197,161199],{"class":104,"line":105},[102,161196,31938],{"class":108},[102,161198,5199],{"class":1952},[102,161200,151075],{"class":112},[102,161202,161203,161206,161208,161210,161212],{"class":104,"line":24},[102,161204,161205],{"class":112},"    result ",[102,161207,158],{"class":108},[102,161209,10859],{"class":112},[102,161211,594],{"class":108},[102,161213,151086],{"class":112},[102,161215,161216,161218],{"class":104,"line":1168},[102,161217,31290],{"class":161},[102,161219,76576],{"class":112},[102,161221,161222],{"class":104,"line":1183},[102,161223,2389],{"emptyLinePlaceholder":30},[102,161225,161226],{"class":104,"line":1189},[102,161227,2389],{"emptyLinePlaceholder":30},[102,161229,161230,161233,161235,161237,161239],{"class":104,"line":1203},[102,161231,161232],{"class":112},"add(",[102,161234,559],{"class":161},[102,161236,12425],{"class":112},[102,161238,813],{"class":161},[102,161240,119],{"class":112},[19,161242,161243],{},"调用时参数数量必须匹配。",[14,161245,161247],{"id":161246},"_55-返回值","5.5 返回值",[19,161249,161250,161252],{},[99,161251,17036],{}," 用于把函数内部的结果返回给调用者。",[93,161254,161256],{"className":30369,"code":161255,"language":30371,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[99,161257,161258,161266,161276,161280,161284,161302],{"__ignoreMap":23},[102,161259,161260,161262,161264],{"class":104,"line":105},[102,161261,31938],{"class":108},[102,161263,5199],{"class":1952},[102,161265,151075],{"class":112},[102,161267,161268,161270,161272,161274],{"class":104,"line":24},[102,161269,4079],{"class":108},[102,161271,10859],{"class":112},[102,161273,594],{"class":108},[102,161275,151086],{"class":112},[102,161277,161278],{"class":104,"line":1168},[102,161279,2389],{"emptyLinePlaceholder":30},[102,161281,161282],{"class":104,"line":1183},[102,161283,2389],{"emptyLinePlaceholder":30},[102,161285,161286,161289,161291,161294,161296,161298,161300],{"class":104,"line":1189},[102,161287,161288],{"class":112},"result ",[102,161290,158],{"class":108},[102,161292,161293],{"class":112}," add(",[102,161295,559],{"class":161},[102,161297,12425],{"class":112},[102,161299,813],{"class":161},[102,161301,119],{"class":112},[102,161303,161304,161306],{"class":104,"line":1203},[102,161305,30406],{"class":161},[102,161307,76576],{"class":112},[19,161309,161310,161311,161313,161314,28376],{},"如果函数没有写 ",[99,161312,17036],{},"，默认返回 ",[99,161315,95677],{},[93,161317,161319],{"className":30369,"code":161318,"language":30371,"meta":23,"style":23},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[99,161320,161321,161329,161339,161343,161347,161356],{"__ignoreMap":23},[102,161322,161323,161325,161327],{"class":104,"line":105},[102,161324,31938],{"class":108},[102,161326,160978],{"class":1952},[102,161328,31944],{"class":112},[102,161330,161331,161333,161335,161337],{"class":104,"line":24},[102,161332,31290],{"class":161},[102,161334,113],{"class":112},[102,161336,5834],{"class":217},[102,161338,119],{"class":112},[102,161340,161341],{"class":104,"line":1168},[102,161342,2389],{"emptyLinePlaceholder":30},[102,161344,161345],{"class":104,"line":1183},[102,161346,2389],{"emptyLinePlaceholder":30},[102,161348,161349,161351,161353],{"class":104,"line":1189},[102,161350,161288],{"class":112},[102,161352,158],{"class":108},[102,161354,161355],{"class":112}," say_hello()\n",[102,161357,161358,161360,161363],{"class":104,"line":1203},[102,161359,30406],{"class":161},[102,161361,161362],{"class":112},"(result)  ",[102,161364,161365],{"class":171},"# None\n",[14,161367,161369],{"id":161368},"_56-return的作用","5.6 return的作用",[19,161371,161372,161374],{},[99,161373,17036],{}," 有两个作用：",[56,161376,161377,161380],{},[59,161378,161379],{},"返回结果。",[59,161381,161382],{},"结束函数。",[93,161384,161386],{"className":30369,"code":161385,"language":30371,"meta":23,"style":23},"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",[99,161387,161388,161398,161410,161417,161421,161433,161440,161444,161451,161455,161459,161470],{"__ignoreMap":23},[102,161389,161390,161392,161395],{"class":104,"line":105},[102,161391,31938],{"class":108},[102,161393,161394],{"class":1952}," check_age",[102,161396,161397],{"class":112},"(age):\n",[102,161399,161400,161402,161404,161406,161408],{"class":104,"line":24},[102,161401,3090],{"class":108},[102,161403,15697],{"class":112},[102,161405,1023],{"class":108},[102,161407,4082],{"class":161},[102,161409,3728],{"class":112},[102,161411,161412,161414],{"class":104,"line":1168},[102,161413,14742],{"class":108},[102,161415,161416],{"class":217}," \"年龄不合法\"\n",[102,161418,161419],{"class":104,"line":1183},[102,161420,2389],{"emptyLinePlaceholder":30},[102,161422,161423,161425,161427,161429,161431],{"class":104,"line":1189},[102,161424,3090],{"class":108},[102,161426,15697],{"class":112},[102,161428,1699],{"class":108},[102,161430,156267],{"class":161},[102,161432,3728],{"class":112},[102,161434,161435,161437],{"class":104,"line":1203},[102,161436,14742],{"class":108},[102,161438,161439],{"class":217}," \"成年人\"\n",[102,161441,161442],{"class":104,"line":1209},[102,161443,2389],{"emptyLinePlaceholder":30},[102,161445,161446,161448],{"class":104,"line":1300},[102,161447,4079],{"class":108},[102,161449,161450],{"class":217}," \"未成年人\"\n",[102,161452,161453],{"class":104,"line":1306},[102,161454,2389],{"emptyLinePlaceholder":30},[102,161456,161457],{"class":104,"line":1318},[102,161458,2389],{"emptyLinePlaceholder":30},[102,161460,161461,161463,161466,161468],{"class":104,"line":1601},[102,161462,30406],{"class":161},[102,161464,161465],{"class":112},"(check_age(",[102,161467,813],{"class":161},[102,161469,30488],{"class":112},[102,161471,161472,161474,161476,161478,161480],{"class":104,"line":1606},[102,161473,30406],{"class":161},[102,161475,161465],{"class":112},[102,161477,645],{"class":108},[102,161479,330],{"class":161},[102,161481,30488],{"class":112},[19,161483,161484,161485,161487],{},"函数执行到 ",[99,161486,17036],{}," 后，后面的代码不会继续执行。",[14,161489,161491],{"id":161490},"_57-none","5.7 None",[19,161493,161494,161496],{},[99,161495,95677],{}," 表示空值或没有结果。",[19,161498,161499],{},"常见使用场景：",[56,161501,161502,161505,161508],{},[59,161503,161504],{},"函数没有返回值。",[59,161506,161507],{},"变量暂时没有具体值。",[59,161509,161510],{},"表示查询不到结果。",[93,161512,161514],{"className":30369,"code":161513,"language":30371,"meta":23,"style":23},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[99,161515,161516,161524,161528,161541],{"__ignoreMap":23},[102,161517,161518,161520,161522],{"class":104,"line":105},[102,161519,161288],{"class":112},[102,161521,158],{"class":108},[102,161523,152154],{"class":161},[102,161525,161526],{"class":104,"line":24},[102,161527,2389],{"emptyLinePlaceholder":30},[102,161529,161530,161532,161535,161537,161539],{"class":104,"line":1168},[102,161531,1520],{"class":108},[102,161533,161534],{"class":112}," result ",[102,161536,38918],{"class":108},[102,161538,38924],{"class":161},[102,161540,3728],{"class":112},[102,161542,161543,161545,161547,161550],{"class":104,"line":1183},[102,161544,31290],{"class":161},[102,161546,113],{"class":112},[102,161548,161549],{"class":217},"\"没有数据\"",[102,161551,119],{"class":112},[19,161553,161554,161555,161557,161558,161561,161562,28376],{},"判断 ",[99,161556,95677],{}," 推荐使用 ",[99,161559,161560],{},"is None","，不要写成 ",[99,161563,161564],{},"== None",[14,161566,161568],{"id":161567},"_58-函数文档字符串","5.8 函数文档字符串",[19,161570,161571],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[93,161573,161575],{"className":30369,"code":161574,"language":30371,"meta":23,"style":23},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[99,161576,161577,161587,161592],{"__ignoreMap":23},[102,161578,161579,161581,161584],{"class":104,"line":105},[102,161580,31938],{"class":108},[102,161582,161583],{"class":1952}," calculate_bmi",[102,161585,161586],{"class":112},"(weight, height):\n",[102,161588,161589],{"class":104,"line":24},[102,161590,161591],{"class":217},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[102,161593,161594,161596,161599,161601,161604,161606],{"class":104,"line":1168},[102,161595,4079],{"class":108},[102,161597,161598],{"class":112}," weight ",[102,161600,697],{"class":108},[102,161602,161603],{"class":112}," height ",[102,161605,10651],{"class":108},[102,161607,47714],{"class":161},[19,161609,161610],{},"查看说明：",[93,161612,161614],{"className":30369,"code":161613,"language":30371,"meta":23,"style":23},"help(calculate_bmi)\n",[99,161615,161616],{"__ignoreMap":23},[102,161617,161618,161621],{"class":104,"line":105},[102,161619,161620],{"class":161},"help",[102,161622,161623],{"class":112},"(calculate_bmi)\n",[19,161625,161626],{},"较完整的写法：",[93,161628,161630],{"className":30369,"code":161629,"language":30371,"meta":23,"style":23},"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",[99,161631,161632,161640,161645,161650,161654,161659,161664,161669,161673],{"__ignoreMap":23},[102,161633,161634,161636,161638],{"class":104,"line":105},[102,161635,31938],{"class":108},[102,161637,161583],{"class":1952},[102,161639,161586],{"class":112},[102,161641,161642],{"class":104,"line":24},[102,161643,161644],{"class":217},"    \"\"\"\n",[102,161646,161647],{"class":104,"line":1168},[102,161648,161649],{"class":217},"    计算BMI。\n",[102,161651,161652],{"class":104,"line":1183},[102,161653,2389],{"emptyLinePlaceholder":30},[102,161655,161656],{"class":104,"line":1189},[102,161657,161658],{"class":217},"    :param weight: 体重，单位kg\n",[102,161660,161661],{"class":104,"line":1203},[102,161662,161663],{"class":217},"    :param height: 身高，单位m\n",[102,161665,161666],{"class":104,"line":1209},[102,161667,161668],{"class":217},"    :return: BMI数值\n",[102,161670,161671],{"class":104,"line":1300},[102,161672,161644],{"class":217},[102,161674,161675,161677,161679,161681,161683,161685],{"class":104,"line":1306},[102,161676,4079],{"class":108},[102,161678,161598],{"class":112},[102,161680,697],{"class":108},[102,161682,161603],{"class":112},[102,161684,10651],{"class":108},[102,161686,47714],{"class":161},[14,161688,161690],{"id":161689},"_59-变量作用域","5.9 变量作用域",[73,161692,161694],{"id":161693},"_591-局部变量","5.9.1 局部变量",[19,161696,161697],{},"在函数内部定义的变量，只能在函数内部使用。",[93,161699,161701],{"className":30369,"code":161700,"language":30371,"meta":23,"style":23},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[99,161702,161703,161712,161720,161726,161730,161734,161739],{"__ignoreMap":23},[102,161704,161705,161707,161710],{"class":104,"line":105},[102,161706,31938],{"class":108},[102,161708,161709],{"class":1952}," test",[102,161711,31944],{"class":112},[102,161713,161714,161716,161718],{"class":104,"line":24},[102,161715,45584],{"class":112},[102,161717,158],{"class":108},[102,161719,58419],{"class":161},[102,161721,161722,161724],{"class":104,"line":1168},[102,161723,31290],{"class":161},[102,161725,126],{"class":112},[102,161727,161728],{"class":104,"line":1183},[102,161729,2389],{"emptyLinePlaceholder":30},[102,161731,161732],{"class":104,"line":1189},[102,161733,2389],{"emptyLinePlaceholder":30},[102,161735,161736],{"class":104,"line":1203},[102,161737,161738],{"class":112},"test()\n",[102,161740,161741,161743,161746],{"class":104,"line":1209},[102,161742,30406],{"class":161},[102,161744,161745],{"class":112},"(num)  ",[102,161747,161748],{"class":171},"# 报错\n",[73,161750,161752],{"id":161751},"_592-全局变量","5.9.2 全局变量",[19,161754,161755],{},"在函数外部定义的变量，可以在函数内部读取。",[93,161757,161759],{"className":30369,"code":161758,"language":30371,"meta":23,"style":23},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[99,161760,161761,161769,161773,161777,161785,161791,161795,161799],{"__ignoreMap":23},[102,161762,161763,161765,161767],{"class":104,"line":105},[102,161764,146518],{"class":112},[102,161766,158],{"class":108},[102,161768,149335],{"class":217},[102,161770,161771],{"class":104,"line":24},[102,161772,2389],{"emptyLinePlaceholder":30},[102,161774,161775],{"class":104,"line":1168},[102,161776,2389],{"emptyLinePlaceholder":30},[102,161778,161779,161781,161783],{"class":104,"line":1183},[102,161780,31938],{"class":108},[102,161782,160978],{"class":1952},[102,161784,31944],{"class":112},[102,161786,161787,161789],{"class":104,"line":1189},[102,161788,31290],{"class":161},[102,161790,150642],{"class":112},[102,161792,161793],{"class":104,"line":1203},[102,161794,2389],{"emptyLinePlaceholder":30},[102,161796,161797],{"class":104,"line":1209},[102,161798,2389],{"emptyLinePlaceholder":30},[102,161800,161801],{"class":104,"line":1300},[102,161802,161013],{"class":112},[19,161804,161805,161806,28376],{},"如果要在函数内部修改全局变量，需要 ",[99,161807,161808],{},"global",[93,161810,161812],{"className":30369,"code":161811,"language":30371,"meta":23,"style":23},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[99,161813,161814,161822,161826,161830,161839,161847,161855,161859,161863,161868],{"__ignoreMap":23},[102,161815,161816,161818,161820],{"class":104,"line":105},[102,161817,146673],{"class":112},[102,161819,158],{"class":108},[102,161821,47324],{"class":161},[102,161823,161824],{"class":104,"line":24},[102,161825,2389],{"emptyLinePlaceholder":30},[102,161827,161828],{"class":104,"line":1168},[102,161829,2389],{"emptyLinePlaceholder":30},[102,161831,161832,161834,161837],{"class":104,"line":1183},[102,161833,31938],{"class":108},[102,161835,161836],{"class":1952}," add_count",[102,161838,31944],{"class":112},[102,161840,161841,161844],{"class":104,"line":1189},[102,161842,161843],{"class":108},"    global",[102,161845,161846],{"class":112}," count\n",[102,161848,161849,161851,161853],{"class":104,"line":1203},[102,161850,159415],{"class":112},[102,161852,9467],{"class":108},[102,161854,55690],{"class":161},[102,161856,161857],{"class":104,"line":1209},[102,161858,2389],{"emptyLinePlaceholder":30},[102,161860,161861],{"class":104,"line":1300},[102,161862,2389],{"emptyLinePlaceholder":30},[102,161864,161865],{"class":104,"line":1306},[102,161866,161867],{"class":112},"add_count()\n",[102,161869,161870,161872],{"class":104,"line":1318},[102,161871,30406],{"class":161},[102,161873,161874],{"class":112},"(count)\n",[19,161876,161877],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,161879,161881],{"id":161880},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,161883,161884],{},"一个函数中可以调用另一个函数。",[93,161886,161888],{"className":30369,"code":161887,"language":30371,"meta":23,"style":23},"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",[99,161889,161890,161899,161913,161917,161921,161930,161935,161955,161976,161980,161984,161988],{"__ignoreMap":23},[102,161891,161892,161894,161897],{"class":104,"line":105},[102,161893,31938],{"class":108},[102,161895,161896],{"class":1952}," print_line",[102,161898,31944],{"class":112},[102,161900,161901,161903,161905,161907,161909,161911],{"class":104,"line":24},[102,161902,31290],{"class":161},[102,161904,113],{"class":112},[102,161906,32474],{"class":217},[102,161908,6508],{"class":108},[102,161910,78656],{"class":161},[102,161912,119],{"class":112},[102,161914,161915],{"class":104,"line":1168},[102,161916,2389],{"emptyLinePlaceholder":30},[102,161918,161919],{"class":104,"line":1183},[102,161920,2389],{"emptyLinePlaceholder":30},[102,161922,161923,161925,161928],{"class":104,"line":1189},[102,161924,31938],{"class":108},[102,161926,161927],{"class":1952}," print_info",[102,161929,149357],{"class":112},[102,161931,161932],{"class":104,"line":1203},[102,161933,161934],{"class":112},"    print_line()\n",[102,161936,161937,161939,161941,161943,161945,161947,161949,161951,161953],{"class":104,"line":1209},[102,161938,31290],{"class":161},[102,161940,113],{"class":112},[102,161942,165],{"class":108},[102,161944,156664],{"class":217},[102,161946,1009],{"class":161},[102,161948,79801],{"class":112},[102,161950,1059],{"class":161},[102,161952,364],{"class":217},[102,161954,119],{"class":112},[102,161956,161957,161959,161961,161963,161966,161968,161970,161972,161974],{"class":104,"line":1300},[102,161958,31290],{"class":161},[102,161960,113],{"class":112},[102,161962,165],{"class":108},[102,161964,161965],{"class":217},"\"年龄:",[102,161967,1009],{"class":161},[102,161969,70212],{"class":112},[102,161971,1059],{"class":161},[102,161973,364],{"class":217},[102,161975,119],{"class":112},[102,161977,161978],{"class":104,"line":1306},[102,161979,161934],{"class":112},[102,161981,161982],{"class":104,"line":1318},[102,161983,2389],{"emptyLinePlaceholder":30},[102,161985,161986],{"class":104,"line":1601},[102,161987,2389],{"emptyLinePlaceholder":30},[102,161989,161990,161993,161995,161997,161999],{"class":104,"line":1606},[102,161991,161992],{"class":112},"print_info(",[102,161994,149870],{"class":217},[102,161996,12425],{"class":112},[102,161998,763],{"class":161},[102,162000,119],{"class":112},[19,162002,162003],{},"这种方式可以把小功能组合成大功能。",[14,162005,162007],{"id":162006},"_511-参数检查","5.11 参数检查",[19,162009,162010],{},"函数内部可以检查参数是否合法。",[93,162012,162014],{"className":30369,"code":162013,"language":30371,"meta":23,"style":23},"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",[99,162015,162016,162025,162037,162043,162053,162057,162061,162078,162082,162094,162105,162111],{"__ignoreMap":23},[102,162017,162018,162020,162023],{"class":104,"line":105},[102,162019,31938],{"class":108},[102,162021,162022],{"class":1952}," divide",[102,162024,151075],{"class":112},[102,162026,162027,162029,162031,162033,162035],{"class":104,"line":24},[102,162028,3090],{"class":108},[102,162030,10872],{"class":112},[102,162032,2938],{"class":108},[102,162034,4082],{"class":161},[102,162036,3728],{"class":112},[102,162038,162039,162041],{"class":104,"line":1168},[102,162040,14742],{"class":108},[102,162042,152154],{"class":161},[102,162044,162045,162047,162049,162051],{"class":104,"line":1183},[102,162046,4079],{"class":108},[102,162048,10859],{"class":112},[102,162050,697],{"class":108},[102,162052,151086],{"class":112},[102,162054,162055],{"class":104,"line":1189},[102,162056,2389],{"emptyLinePlaceholder":30},[102,162058,162059],{"class":104,"line":1203},[102,162060,2389],{"emptyLinePlaceholder":30},[102,162062,162063,162065,162067,162070,162072,162074,162076],{"class":104,"line":1209},[102,162064,161288],{"class":112},[102,162066,158],{"class":108},[102,162068,162069],{"class":112}," divide(",[102,162071,559],{"class":161},[102,162073,12425],{"class":112},[102,162075,304],{"class":161},[102,162077,119],{"class":112},[102,162079,162080],{"class":104,"line":1300},[102,162081,2389],{"emptyLinePlaceholder":30},[102,162083,162084,162086,162088,162090,162092],{"class":104,"line":1306},[102,162085,1520],{"class":108},[102,162087,161534],{"class":112},[102,162089,38918],{"class":108},[102,162091,38924],{"class":161},[102,162093,3728],{"class":112},[102,162095,162096,162098,162100,162103],{"class":104,"line":1318},[102,162097,31290],{"class":161},[102,162099,113],{"class":112},[102,162101,162102],{"class":217},"\"除数不能为0\"",[102,162104,119],{"class":112},[102,162106,162107,162109],{"class":104,"line":1601},[102,162108,1690],{"class":108},[102,162110,3728],{"class":112},[102,162112,162113,162115],{"class":104,"line":1606},[102,162114,31290],{"class":161},[102,162116,76576],{"class":112},[14,162118,162120],{"id":162119},"_512-类型提示","5.12 类型提示",[19,162122,162123],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[93,162125,162127],{"className":30369,"code":162126,"language":30371,"meta":23,"style":23},"def add(a: int, b: int) -> int:\n    return a + b\n",[99,162128,162129,162152],{"__ignoreMap":23},[102,162130,162131,162133,162135,162138,162140,162143,162145,162148,162150],{"class":104,"line":105},[102,162132,31938],{"class":108},[102,162134,5199],{"class":1952},[102,162136,162137],{"class":112},"(a: ",[102,162139,116],{"class":161},[102,162141,162142],{"class":112},", b: ",[102,162144,116],{"class":161},[102,162146,162147],{"class":112},") -> ",[102,162149,116],{"class":161},[102,162151,3728],{"class":112},[102,162153,162154,162156,162158,162160],{"class":104,"line":24},[102,162155,4079],{"class":108},[102,162157,10859],{"class":112},[102,162159,594],{"class":108},[102,162161,151086],{"class":112},[19,162163,162164],{},"字符串参数：",[93,162166,162168],{"className":30369,"code":162167,"language":30371,"meta":23,"style":23},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[99,162169,162170,162187],{"__ignoreMap":23},[102,162171,162172,162174,162176,162179,162181,162183,162185],{"class":104,"line":105},[102,162173,31938],{"class":108},[102,162175,160978],{"class":1952},[102,162177,162178],{"class":112},"(name: ",[102,162180,1288],{"class":161},[102,162182,162147],{"class":112},[102,162184,95677],{"class":161},[102,162186,3728],{"class":112},[102,162188,162189,162191,162193,162195,162197,162199,162201,162203,162205],{"class":104,"line":24},[102,162190,31290],{"class":161},[102,162192,113],{"class":112},[102,162194,165],{"class":108},[102,162196,157036],{"class":217},[102,162198,1009],{"class":161},[102,162200,79801],{"class":112},[102,162202,1059],{"class":161},[102,162204,364],{"class":217},[102,162206,119],{"class":112},[19,162208,162209],{},"列表参数：",[93,162211,162213],{"className":30369,"code":162212,"language":30371,"meta":23,"style":23},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[99,162214,162215,162234,162242,162254,162263],{"__ignoreMap":23},[102,162216,162217,162219,162222,162225,162227,162230,162232],{"class":104,"line":105},[102,162218,31938],{"class":108},[102,162220,162221],{"class":1952}," get_total",[102,162223,162224],{"class":112},"(numbers: list[",[102,162226,116],{"class":161},[102,162228,162229],{"class":112},"]) -> ",[102,162231,116],{"class":161},[102,162233,3728],{"class":112},[102,162235,162236,162238,162240],{"class":104,"line":24},[102,162237,159289],{"class":112},[102,162239,158],{"class":108},[102,162241,47324],{"class":161},[102,162243,162244,162246,162249,162251],{"class":104,"line":1168},[102,162245,3190],{"class":108},[102,162247,162248],{"class":112}," number ",[102,162250,26034],{"class":108},[102,162252,162253],{"class":112}," numbers:\n",[102,162255,162256,162258,162260],{"class":104,"line":1183},[102,162257,159964],{"class":112},[102,162259,9467],{"class":108},[102,162261,162262],{"class":112}," number\n",[102,162264,162265,162267],{"class":104,"line":1189},[102,162266,4079],{"class":108},[102,162268,162269],{"class":112}," total\n",[19,162271,162272],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162274,162276],{"id":162275},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[93,162278,162280],{"className":30369,"code":162279,"language":30371,"meta":23,"style":23},"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",[99,162281,162282,162292,162296,162300,162308,162319,162329,162339,162349,162359,162363,162367,162376,162398,162402,162406,162415,162421,162441,162453,162464,162468,162477,162488,162493,162497,162501,162510,162516,162535,162547,162557,162561,162572,162582,162586,162594,162605,162609,162613,162617,162625,162630,162644,162648,162660,162665,162677,162682,162694,162699,162711,162721,162725,162731],{"__ignoreMap":23},[102,162283,162284,162287,162289],{"class":104,"line":105},[102,162285,162286],{"class":112},"balance ",[102,162288,158],{"class":108},[102,162290,162291],{"class":161}," 1000\n",[102,162293,162294],{"class":104,"line":24},[102,162295,2389],{"emptyLinePlaceholder":30},[102,162297,162298],{"class":104,"line":1168},[102,162299,2389],{"emptyLinePlaceholder":30},[102,162301,162302,162304,162306],{"class":104,"line":1183},[102,162303,31938],{"class":108},[102,162305,152015],{"class":1952},[102,162307,31944],{"class":112},[102,162309,162310,162312,162314,162317],{"class":104,"line":1189},[102,162311,31290],{"class":161},[102,162313,113],{"class":112},[102,162315,162316],{"class":217},"\"====== ATM ======\"",[102,162318,119],{"class":112},[102,162320,162321,162323,162325,162327],{"class":104,"line":1203},[102,162322,31290],{"class":161},[102,162324,113],{"class":112},[102,162326,160630],{"class":217},[102,162328,119],{"class":112},[102,162330,162331,162333,162335,162337],{"class":104,"line":1209},[102,162332,31290],{"class":161},[102,162334,113],{"class":112},[102,162336,160641],{"class":217},[102,162338,119],{"class":112},[102,162340,162341,162343,162345,162347],{"class":104,"line":1300},[102,162342,31290],{"class":161},[102,162344,113],{"class":112},[102,162346,160652],{"class":217},[102,162348,119],{"class":112},[102,162350,162351,162353,162355,162357],{"class":104,"line":1306},[102,162352,31290],{"class":161},[102,162354,113],{"class":112},[102,162356,160663],{"class":217},[102,162358,119],{"class":112},[102,162360,162361],{"class":104,"line":1318},[102,162362,2389],{"emptyLinePlaceholder":30},[102,162364,162365],{"class":104,"line":1601},[102,162366,2389],{"emptyLinePlaceholder":30},[102,162368,162369,162371,162374],{"class":104,"line":1606},[102,162370,31938],{"class":108},[102,162372,162373],{"class":1952}," show_balance",[102,162375,31944],{"class":112},[102,162377,162378,162380,162382,162384,162387,162389,162392,162394,162396],{"class":104,"line":1612},[102,162379,31290],{"class":161},[102,162381,113],{"class":112},[102,162383,165],{"class":108},[102,162385,162386],{"class":217},"\"当前余额:",[102,162388,1009],{"class":161},[102,162390,162391],{"class":112},"balance",[102,162393,1059],{"class":161},[102,162395,156994],{"class":217},[102,162397,119],{"class":112},[102,162399,162400],{"class":104,"line":1617},[102,162401,2389],{"emptyLinePlaceholder":30},[102,162403,162404],{"class":104,"line":1631},[102,162405,2389],{"emptyLinePlaceholder":30},[102,162407,162408,162410,162413],{"class":104,"line":1636},[102,162409,31938],{"class":108},[102,162411,162412],{"class":1952}," save_money",[102,162414,31944],{"class":112},[102,162416,162417,162419],{"class":104,"line":1642},[102,162418,161843],{"class":108},[102,162420,150081],{"class":112},[102,162422,162423,162426,162428,162430,162432,162434,162436,162439],{"class":104,"line":1663},[102,162424,162425],{"class":112},"    money ",[102,162427,158],{"class":108},[102,162429,109788],{"class":161},[102,162431,113],{"class":112},[102,162433,53812],{"class":161},[102,162435,113],{"class":112},[102,162437,162438],{"class":217},"\"请输入存款金额:\"",[102,162440,30488],{"class":112},[102,162442,162443,162445,162447,162449,162451],{"class":104,"line":1668},[102,162444,3090],{"class":108},[102,162446,150124],{"class":112},[102,162448,1577],{"class":108},[102,162450,4082],{"class":161},[102,162452,3728],{"class":112},[102,162454,162455,162457,162459,162462],{"class":104,"line":1682},[102,162456,32442],{"class":161},[102,162458,113],{"class":112},[102,162460,162461],{"class":217},"\"金额必须大于0\"",[102,162463,119],{"class":112},[102,162465,162466],{"class":104,"line":1687},[102,162467,152343],{"class":108},[102,162469,162470,162473,162475],{"class":104,"line":1716},[102,162471,162472],{"class":112},"    balance ",[102,162474,9467],{"class":108},[102,162476,150157],{"class":112},[102,162478,162479,162481,162483,162486],{"class":104,"line":1721},[102,162480,31290],{"class":161},[102,162482,113],{"class":112},[102,162484,162485],{"class":217},"\"存款成功\"",[102,162487,119],{"class":112},[102,162489,162490],{"class":104,"line":1738},[102,162491,162492],{"class":112},"    show_balance()\n",[102,162494,162495],{"class":104,"line":1743},[102,162496,2389],{"emptyLinePlaceholder":30},[102,162498,162499],{"class":104,"line":1748},[102,162500,2389],{"emptyLinePlaceholder":30},[102,162502,162503,162505,162508],{"class":104,"line":1753},[102,162504,31938],{"class":108},[102,162506,162507],{"class":1952}," withdraw_money",[102,162509,31944],{"class":112},[102,162511,162512,162514],{"class":104,"line":1767},[102,162513,161843],{"class":108},[102,162515,150081],{"class":112},[102,162517,162518,162520,162522,162524,162526,162528,162530,162533],{"class":104,"line":1772},[102,162519,162425],{"class":112},[102,162521,158],{"class":108},[102,162523,109788],{"class":161},[102,162525,113],{"class":112},[102,162527,53812],{"class":161},[102,162529,113],{"class":112},[102,162531,162532],{"class":217},"\"请输入取款金额:\"",[102,162534,30488],{"class":112},[102,162536,162537,162539,162541,162543,162545],{"class":104,"line":2566},[102,162538,3090],{"class":108},[102,162540,150124],{"class":112},[102,162542,1577],{"class":108},[102,162544,4082],{"class":161},[102,162546,3728],{"class":112},[102,162548,162549,162551,162553,162555],{"class":104,"line":2580},[102,162550,32442],{"class":161},[102,162552,113],{"class":112},[102,162554,162461],{"class":217},[102,162556,119],{"class":112},[102,162558,162559],{"class":104,"line":2588},[102,162560,152343],{"class":108},[102,162562,162563,162565,162567,162569],{"class":104,"line":2593},[102,162564,3090],{"class":108},[102,162566,150124],{"class":112},[102,162568,1073],{"class":108},[102,162570,162571],{"class":112}," balance:\n",[102,162573,162574,162576,162578,162580],{"class":104,"line":2599},[102,162575,32442],{"class":161},[102,162577,113],{"class":112},[102,162579,150219],{"class":217},[102,162581,119],{"class":112},[102,162583,162584],{"class":104,"line":2605},[102,162585,152343],{"class":108},[102,162587,162588,162590,162592],{"class":104,"line":2610},[102,162589,162472],{"class":112},[102,162591,150234],{"class":108},[102,162593,150157],{"class":112},[102,162595,162596,162598,162600,162603],{"class":104,"line":7938},[102,162597,31290],{"class":161},[102,162599,113],{"class":112},[102,162601,162602],{"class":217},"\"取款成功\"",[102,162604,119],{"class":112},[102,162606,162607],{"class":104,"line":7962},[102,162608,162492],{"class":112},[102,162610,162611],{"class":104,"line":7967},[102,162612,2389],{"emptyLinePlaceholder":30},[102,162614,162615],{"class":104,"line":7973},[102,162616,2389],{"emptyLinePlaceholder":30},[102,162618,162619,162621,162623],{"class":104,"line":8000},[102,162620,108654],{"class":108},[102,162622,95283],{"class":161},[102,162624,3728],{"class":112},[102,162626,162627],{"class":104,"line":8005},[102,162628,162629],{"class":112},"    show_menu()\n",[102,162631,162632,162634,162636,162638,162640,162642],{"class":104,"line":8011},[102,162633,160674],{"class":112},[102,162635,158],{"class":108},[102,162637,60596],{"class":161},[102,162639,113],{"class":112},[102,162641,153055],{"class":217},[102,162643,119],{"class":112},[102,162645,162646],{"class":104,"line":8023},[102,162647,2389],{"emptyLinePlaceholder":30},[102,162649,162650,162652,162654,162656,162658],{"class":104,"line":8035},[102,162651,3090],{"class":108},[102,162653,153068],{"class":112},[102,162655,2938],{"class":108},[102,162657,153073],{"class":217},[102,162659,3728],{"class":112},[102,162661,162662],{"class":104,"line":8047},[102,162663,162664],{"class":112},"        show_balance()\n",[102,162666,162667,162669,162671,162673,162675],{"class":104,"line":9706},[102,162668,39284],{"class":108},[102,162670,153068],{"class":112},[102,162672,2938],{"class":108},[102,162674,153092],{"class":217},[102,162676,3728],{"class":112},[102,162678,162679],{"class":104,"line":9731},[102,162680,162681],{"class":112},"        save_money()\n",[102,162683,162684,162686,162688,162690,162692],{"class":104,"line":9754},[102,162685,39284],{"class":108},[102,162687,153068],{"class":112},[102,162689,2938],{"class":108},[102,162691,153110],{"class":217},[102,162693,3728],{"class":112},[102,162695,162696],{"class":104,"line":9778},[102,162697,162698],{"class":112},"        withdraw_money()\n",[102,162700,162701,162703,162705,162707,162709],{"class":104,"line":9783},[102,162702,39284],{"class":108},[102,162704,153068],{"class":112},[102,162706,2938],{"class":108},[102,162708,153164],{"class":217},[102,162710,3728],{"class":112},[102,162712,162713,162715,162717,162719],{"class":104,"line":9788},[102,162714,32442],{"class":161},[102,162716,113],{"class":112},[102,162718,153175],{"class":217},[102,162720,119],{"class":112},[102,162722,162723],{"class":104,"line":9793},[102,162724,31618],{"class":108},[102,162726,162727,162729],{"class":104,"line":9802},[102,162728,158004],{"class":108},[102,162730,3728],{"class":112},[102,162732,162733,162735,162737,162739],{"class":104,"line":9807},[102,162734,32442],{"class":161},[102,162736,113],{"class":112},[102,162738,153196],{"class":217},[102,162740,119],{"class":112},[19,162742,162743],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162745,162747],{"id":162746},"_514-易错点","5.14 易错点",[56,162749,162750,162753,162756,162761,162766,162769],{},[59,162751,162752],{},"函数定义后必须调用才会执行。",[59,162754,162755],{},"函数名后面有括号才是调用。",[59,162757,162758,162760],{},[99,162759,17036],{}," 后面的代码不会执行。",[59,162762,162763,162764,28376],{},"没有返回值的函数默认返回 ",[99,162765,95677],{},[59,162767,162768],{},"局部变量不能在函数外部访问。",[59,162770,162771,162772,162774],{},"不要滥用 ",[99,162773,161808],{},"，更好的方式是让函数返回新值。",[19,162776,162777,162778,162780],{},"例如不用 ",[99,162779,161808],{}," 改写存款：",[93,162782,162784],{"className":30369,"code":162783,"language":30371,"meta":23,"style":23},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[99,162785,162786,162795,162806,162810,162814,162822,162835],{"__ignoreMap":23},[102,162787,162788,162790,162792],{"class":104,"line":105},[102,162789,31938],{"class":108},[102,162791,162412],{"class":1952},[102,162793,162794],{"class":112},"(balance, money):\n",[102,162796,162797,162799,162802,162804],{"class":104,"line":24},[102,162798,4079],{"class":108},[102,162800,162801],{"class":112}," balance ",[102,162803,594],{"class":108},[102,162805,150157],{"class":112},[102,162807,162808],{"class":104,"line":1168},[102,162809,2389],{"emptyLinePlaceholder":30},[102,162811,162812],{"class":104,"line":1183},[102,162813,2389],{"emptyLinePlaceholder":30},[102,162815,162816,162818,162820],{"class":104,"line":1189},[102,162817,162286],{"class":112},[102,162819,158],{"class":108},[102,162821,162291],{"class":161},[102,162823,162824,162826,162828,162831,162833],{"class":104,"line":1203},[102,162825,162286],{"class":112},[102,162827,158],{"class":108},[102,162829,162830],{"class":112}," save_money(balance, ",[102,162832,1711],{"class":161},[102,162834,119],{"class":112},[102,162836,162837,162839],{"class":104,"line":1209},[102,162838,30406],{"class":161},[102,162840,162841],{"class":112},"(balance)\n",[14,162843,162845],{"id":162844},"_515-本章练习","5.15 本章练习",[56,162847,162848,162855,162861,162867,162873],{},[59,162849,162850,162851,162854],{},"定义函数 ",[99,162852,162853],{},"print_student(name, age)","，输出学生信息。",[59,162856,162850,162857,162860],{},[99,162858,162859],{},"get_max(a, b, c)","，返回三个数中的最大值。",[59,162862,162850,162863,162866],{},[99,162864,162865],{},"is_even(num)","，判断一个数是否为偶数。",[59,162868,162850,162869,162872],{},[99,162870,162871],{},"calculate_bmi(weight, height)","，返回 BMI。",[59,162874,162875],{},"把第 4 章的菜单程序拆分成多个函数。",[5116,162877,162878],{},"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":23,"searchDepth":24,"depth":24,"links":162880},[162881,162882,162883,162884,162885,162886,162887,162888,162889,162893,162894,162895,162896,162897,162898],{"id":160901,"depth":24,"text":160902},{"id":160942,"depth":24,"text":160943},{"id":161032,"depth":24,"text":161033},{"id":161113,"depth":24,"text":161114},{"id":161246,"depth":24,"text":161247},{"id":161368,"depth":24,"text":161369},{"id":161490,"depth":24,"text":161491},{"id":161567,"depth":24,"text":161568},{"id":161689,"depth":24,"text":161690,"children":162890},[162891,162892],{"id":161693,"depth":1168,"text":161694},{"id":161751,"depth":1168,"text":161752},{"id":161880,"depth":24,"text":161881},{"id":162006,"depth":24,"text":162007},{"id":162119,"depth":24,"text":162120},{"id":162275,"depth":24,"text":162276},{"id":162746,"depth":24,"text":162747},{"id":162844,"depth":24,"text":162845},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160893,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162905,"title":162906,"body":162907,"description":27,"extension":28,"meta":165951,"navigation":30,"path":165952,"seo":165953,"stem":165954,"__hash__":165955},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162908,"toc":165932},[162909,162912,162916,162919,162922,163026,163029,163033,163036,163116,163119,163123,163126,163186,163189,163225,163228,163243,163247,163320,163323,163378,163381,163451,163454,163538,163548,163606,163610,163655,163658,163684,163687,163793,163797,163800,163842,163845,163909,163912,163916,163919,163980,163983,164013,164016,164054,164058,164061,164070,164073,164197,164200,164241,164245,164248,164259,164299,164302,164317,164322,164325,164392,164395,164485,164489,164492,164540,164543,164570,164572,164602,164605,164625,164628,164659,164662,164695,164699,164702,164726,164729,164753,164756,164780,164784,164787,164917,164920,165000,165003,165078,165082,165085,165135,165138,165180,165183,165207,165209,165233,165236,165291,165294,165360,165364,165367,165370,165408,165411,165464,165467,165513,165516,165549,165552,165556,165875,165879,165908,165912,165929],[10,162910,162906],{"id":162911},"_6-数据容器",[14,162913,162915],{"id":162914},"_61-什么是数据容器","6.1 什么是数据容器",[19,162917,162918],{},"数据容器用于一次保存多个数据。",[19,162920,162921],{},"常见容器：",[250,162923,162924,162941],{},[253,162925,162926],{},[256,162927,162928,162930,162933,162936,162939],{},[259,162929,25762],{},[259,162931,162932],{},"是否有序",[259,162934,162935],{},"是否可变",[259,162937,162938],{},"是否允许重复",[259,162940,27483],{},[297,162942,162943,162961,162977,162992,163009],{},[256,162944,162945,162948,162951,162954,162957],{},[302,162946,162947],{},"list列表",[302,162949,162950],{},"有序",[302,162952,162953],{},"可变",[302,162955,162956],{},"允许",[302,162958,162959],{},[99,162960,155239],{},[256,162962,162963,162966,162968,162971,162973],{},[302,162964,162965],{},"tuple元组",[302,162967,162950],{},[302,162969,162970],{},"不可变",[302,162972,162956],{},[302,162974,162975],{},[99,162976,155252],{},[256,162978,162979,162982,162984,162986,162988],{},[302,162980,162981],{},"str字符串",[302,162983,162950],{},[302,162985,162970],{},[302,162987,162956],{},[302,162989,162990],{},[99,162991,155862],{},[256,162993,162994,162997,163000,163002,163005],{},[302,162995,162996],{},"set集合",[302,162998,162999],{},"无序",[302,163001,162953],{},[302,163003,163004],{},"不允许",[302,163006,163007],{},[99,163008,155277],{},[256,163010,163011,163014,163016,163018,163021],{},[302,163012,163013],{},"dict字典",[302,163015,162950],{},[302,163017,162953],{},[302,163019,163020],{},"key不允许重复",[302,163022,163023],{},[99,163024,163025],{},"{\"name\": \"小明\"}",[19,163027,163028],{},"Python 3.7 之后，字典保持插入顺序。",[14,163030,163032],{"id":163031},"_62-列表list","6.2 列表list",[19,163034,163035],{},"列表用于保存一组有顺序的数据。",[93,163037,163039],{"className":30369,"code":163038,"language":30371,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[99,163040,163041,163061,163086,163107],{"__ignoreMap":23},[102,163042,163043,163045,163047,163049,163051,163053,163055,163057,163059],{"class":104,"line":105},[102,163044,160362],{"class":112},[102,163046,158],{"class":108},[102,163048,52217],{"class":112},[102,163050,149870],{"class":217},[102,163052,12425],{"class":112},[102,163054,150918],{"class":217},[102,163056,12425],{"class":112},[102,163058,159713],{"class":217},[102,163060,33237],{"class":112},[102,163062,163063,163066,163068,163070,163072,163074,163076,163078,163080,163082,163084],{"class":104,"line":24},[102,163064,163065],{"class":112},"numbers ",[102,163067,158],{"class":108},[102,163069,52217],{"class":112},[102,163071,330],{"class":161},[102,163073,12425],{"class":112},[102,163075,190],{"class":161},[102,163077,12425],{"class":112},[102,163079,184],{"class":161},[102,163081,12425],{"class":112},[102,163083,406],{"class":161},[102,163085,33237],{"class":112},[102,163087,163088,163091,163093,163095,163097,163099,163101,163103,163105],{"class":104,"line":1168},[102,163089,163090],{"class":112},"mixed ",[102,163092,158],{"class":108},[102,163094,52217],{"class":112},[102,163096,149870],{"class":217},[102,163098,12425],{"class":112},[102,163100,763],{"class":161},[102,163102,12425],{"class":112},[102,163104,31467],{"class":161},[102,163106,33237],{"class":112},[102,163108,163109,163112,163114],{"class":104,"line":1183},[102,163110,163111],{"class":112},"empty ",[102,163113,158],{"class":108},[102,163115,51829],{"class":112},[19,163117,163118],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163120,163122],{"id":163121},"_63-列表索引","6.3 列表索引",[19,163124,163125],{},"正向索引从 0 开始：",[93,163127,163129],{"className":30369,"code":163128,"language":30371,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[99,163130,163131,163151,163155,163166,163176],{"__ignoreMap":23},[102,163132,163133,163135,163137,163139,163141,163143,163145,163147,163149],{"class":104,"line":105},[102,163134,160362],{"class":112},[102,163136,158],{"class":108},[102,163138,52217],{"class":112},[102,163140,149870],{"class":217},[102,163142,12425],{"class":112},[102,163144,150918],{"class":217},[102,163146,12425],{"class":112},[102,163148,159713],{"class":217},[102,163150,33237],{"class":112},[102,163152,163153],{"class":104,"line":24},[102,163154,2389],{"emptyLinePlaceholder":30},[102,163156,163157,163159,163162,163164],{"class":104,"line":1168},[102,163158,30406],{"class":161},[102,163160,163161],{"class":112},"(names[",[102,163163,304],{"class":161},[102,163165,4646],{"class":112},[102,163167,163168,163170,163172,163174],{"class":104,"line":1183},[102,163169,30406],{"class":161},[102,163171,163161],{"class":112},[102,163173,330],{"class":161},[102,163175,4646],{"class":112},[102,163177,163178,163180,163182,163184],{"class":104,"line":1189},[102,163179,30406],{"class":161},[102,163181,163161],{"class":112},[102,163183,190],{"class":161},[102,163185,4646],{"class":112},[19,163187,163188],{},"反向索引从 -1 开始：",[93,163190,163192],{"className":30369,"code":163191,"language":30371,"meta":23,"style":23},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[99,163193,163194,163210],{"__ignoreMap":23},[102,163195,163196,163198,163200,163202,163204,163207],{"class":104,"line":105},[102,163197,30406],{"class":161},[102,163199,163161],{"class":112},[102,163201,645],{"class":108},[102,163203,330],{"class":161},[102,163205,163206],{"class":112},"])  ",[102,163208,163209],{"class":171},"# 小刚\n",[102,163211,163212,163214,163216,163218,163220,163222],{"class":104,"line":24},[102,163213,30406],{"class":161},[102,163215,163161],{"class":112},[102,163217,645],{"class":108},[102,163219,190],{"class":161},[102,163221,163206],{"class":112},[102,163223,163224],{"class":171},"# 小红\n",[19,163226,163227],{},"索引越界会报错：",[93,163229,163231],{"className":30369,"code":163230,"language":30371,"meta":23,"style":23},"print(names[3])\n",[99,163232,163233],{"__ignoreMap":23},[102,163234,163235,163237,163239,163241],{"class":104,"line":105},[102,163236,30406],{"class":161},[102,163238,163161],{"class":112},[102,163240,184],{"class":161},[102,163242,4646],{"class":112},[14,163244,163246],{"id":163245},"_64-列表常用方法","6.4 列表常用方法",[93,163248,163250],{"className":30369,"code":163249,"language":30371,"meta":23,"style":23},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[99,163251,163252,163268,163272,163281,163295,163309,163313],{"__ignoreMap":23},[102,163253,163254,163256,163258,163260,163262,163264,163266],{"class":104,"line":105},[102,163255,160362],{"class":112},[102,163257,158],{"class":108},[102,163259,52217],{"class":112},[102,163261,149870],{"class":217},[102,163263,12425],{"class":112},[102,163265,150918],{"class":217},[102,163267,33237],{"class":112},[102,163269,163270],{"class":104,"line":24},[102,163271,2389],{"emptyLinePlaceholder":30},[102,163273,163274,163277,163279],{"class":104,"line":1168},[102,163275,163276],{"class":112},"names.append(",[102,163278,159713],{"class":217},[102,163280,119],{"class":112},[102,163282,163283,163286,163288,163290,163293],{"class":104,"line":1183},[102,163284,163285],{"class":112},"names.insert(",[102,163287,330],{"class":161},[102,163289,12425],{"class":112},[102,163291,163292],{"class":217},"\"小李\"",[102,163294,119],{"class":112},[102,163296,163297,163300,163302,163304,163307],{"class":104,"line":1189},[102,163298,163299],{"class":112},"names.extend([",[102,163301,8673],{"class":217},[102,163303,12425],{"class":112},[102,163305,163306],{"class":217},"\"小赵\"",[102,163308,4646],{"class":112},[102,163310,163311],{"class":104,"line":1203},[102,163312,2389],{"emptyLinePlaceholder":30},[102,163314,163315,163317],{"class":104,"line":1209},[102,163316,30406],{"class":161},[102,163318,163319],{"class":112},"(names)\n",[19,163321,163322],{},"删除元素：",[93,163324,163326],{"className":30369,"code":163325,"language":30371,"meta":23,"style":23},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[99,163327,163328,163337,163347,163361,163373],{"__ignoreMap":23},[102,163329,163330,163333,163335],{"class":104,"line":105},[102,163331,163332],{"class":112},"names.remove(",[102,163334,150918],{"class":217},[102,163336,119],{"class":112},[102,163338,163339,163342,163344],{"class":104,"line":24},[102,163340,163341],{"class":112},"last ",[102,163343,158],{"class":108},[102,163345,163346],{"class":112}," names.pop()\n",[102,163348,163349,163352,163354,163357,163359],{"class":104,"line":1168},[102,163350,163351],{"class":112},"first ",[102,163353,158],{"class":108},[102,163355,163356],{"class":112}," names.pop(",[102,163358,304],{"class":161},[102,163360,119],{"class":112},[102,163362,163363,163366,163369,163371],{"class":104,"line":1183},[102,163364,163365],{"class":108},"del",[102,163367,163368],{"class":112}," names[",[102,163370,304],{"class":161},[102,163372,33237],{"class":112},[102,163374,163375],{"class":104,"line":1189},[102,163376,163377],{"class":112},"names.clear()\n",[19,163379,163380],{},"查询和统计：",[93,163382,163384],{"className":30369,"code":163383,"language":30371,"meta":23,"style":23},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[99,163385,163386,163414,163418,163429,163440],{"__ignoreMap":23},[102,163387,163388,163390,163392,163394,163396,163398,163400,163402,163404,163406,163408,163410,163412],{"class":104,"line":105},[102,163389,163065],{"class":112},[102,163391,158],{"class":108},[102,163393,52217],{"class":112},[102,163395,330],{"class":161},[102,163397,12425],{"class":112},[102,163399,190],{"class":161},[102,163401,12425],{"class":112},[102,163403,184],{"class":161},[102,163405,12425],{"class":112},[102,163407,190],{"class":161},[102,163409,12425],{"class":112},[102,163411,406],{"class":161},[102,163413,33237],{"class":112},[102,163415,163416],{"class":104,"line":24},[102,163417,2389],{"emptyLinePlaceholder":30},[102,163419,163420,163422,163425,163427],{"class":104,"line":1168},[102,163421,30406],{"class":161},[102,163423,163424],{"class":112},"(numbers.index(",[102,163426,184],{"class":161},[102,163428,30488],{"class":112},[102,163430,163431,163433,163436,163438],{"class":104,"line":1183},[102,163432,30406],{"class":161},[102,163434,163435],{"class":112},"(numbers.count(",[102,163437,190],{"class":161},[102,163439,30488],{"class":112},[102,163441,163442,163444,163446,163448],{"class":104,"line":1189},[102,163443,30406],{"class":161},[102,163445,113],{"class":112},[102,163447,7348],{"class":161},[102,163449,163450],{"class":112},"(numbers))\n",[19,163452,163453],{},"排序：",[93,163455,163457],{"className":30369,"code":163456,"language":30371,"meta":23,"style":23},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[99,163458,163459,163483,163487,163492,163499,163503,163517,163523,163527,163532],{"__ignoreMap":23},[102,163460,163461,163463,163465,163467,163469,163471,163473,163475,163477,163479,163481],{"class":104,"line":105},[102,163462,163065],{"class":112},[102,163464,158],{"class":108},[102,163466,52217],{"class":112},[102,163468,184],{"class":161},[102,163470,12425],{"class":112},[102,163472,330],{"class":161},[102,163474,12425],{"class":112},[102,163476,432],{"class":161},[102,163478,12425],{"class":112},[102,163480,190],{"class":161},[102,163482,33237],{"class":112},[102,163484,163485],{"class":104,"line":24},[102,163486,2389],{"emptyLinePlaceholder":30},[102,163488,163489],{"class":104,"line":1168},[102,163490,163491],{"class":112},"numbers.sort()\n",[102,163493,163494,163496],{"class":104,"line":1183},[102,163495,30406],{"class":161},[102,163497,163498],{"class":112},"(numbers)\n",[102,163500,163501],{"class":104,"line":1189},[102,163502,2389],{"emptyLinePlaceholder":30},[102,163504,163505,163508,163511,163513,163515],{"class":104,"line":1203},[102,163506,163507],{"class":112},"numbers.sort(",[102,163509,163510],{"class":5206},"reverse",[102,163512,158],{"class":108},[102,163514,31467],{"class":161},[102,163516,119],{"class":112},[102,163518,163519,163521],{"class":104,"line":1209},[102,163520,30406],{"class":161},[102,163522,163498],{"class":112},[102,163524,163525],{"class":104,"line":1300},[102,163526,2389],{"emptyLinePlaceholder":30},[102,163528,163529],{"class":104,"line":1306},[102,163530,163531],{"class":112},"numbers.reverse()\n",[102,163533,163534,163536],{"class":104,"line":1318},[102,163535,30406],{"class":161},[102,163537,163498],{"class":112},[19,163539,163540,163543,163544,163547],{},[99,163541,163542],{},"sort()"," 会修改原列表，",[99,163545,163546],{},"sorted()"," 返回新列表。",[93,163549,163551],{"className":30369,"code":163550,"language":30371,"meta":23,"style":23},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[99,163552,163553,163577,163589,163593,163599],{"__ignoreMap":23},[102,163554,163555,163557,163559,163561,163563,163565,163567,163569,163571,163573,163575],{"class":104,"line":105},[102,163556,163065],{"class":112},[102,163558,158],{"class":108},[102,163560,52217],{"class":112},[102,163562,184],{"class":161},[102,163564,12425],{"class":112},[102,163566,330],{"class":161},[102,163568,12425],{"class":112},[102,163570,432],{"class":161},[102,163572,12425],{"class":112},[102,163574,190],{"class":161},[102,163576,33237],{"class":112},[102,163578,163579,163582,163584,163587],{"class":104,"line":24},[102,163580,163581],{"class":112},"new_numbers ",[102,163583,158],{"class":108},[102,163585,163586],{"class":161}," sorted",[102,163588,163498],{"class":112},[102,163590,163591],{"class":104,"line":1168},[102,163592,2389],{"emptyLinePlaceholder":30},[102,163594,163595,163597],{"class":104,"line":1183},[102,163596,30406],{"class":161},[102,163598,163498],{"class":112},[102,163600,163601,163603],{"class":104,"line":1189},[102,163602,30406],{"class":161},[102,163604,163605],{"class":112},"(new_numbers)\n",[14,163607,163609],{"id":163608},"_65-列表遍历","6.5 列表遍历",[93,163611,163613],{"className":30369,"code":163612,"language":30371,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[99,163614,163615,163635,163639,163649],{"__ignoreMap":23},[102,163616,163617,163619,163621,163623,163625,163627,163629,163631,163633],{"class":104,"line":105},[102,163618,160362],{"class":112},[102,163620,158],{"class":108},[102,163622,52217],{"class":112},[102,163624,149870],{"class":217},[102,163626,12425],{"class":112},[102,163628,150918],{"class":217},[102,163630,12425],{"class":112},[102,163632,159713],{"class":217},[102,163634,33237],{"class":112},[102,163636,163637],{"class":104,"line":24},[102,163638,2389],{"emptyLinePlaceholder":30},[102,163640,163641,163643,163645,163647],{"class":104,"line":1168},[102,163642,3014],{"class":108},[102,163644,160398],{"class":112},[102,163646,26034],{"class":108},[102,163648,160403],{"class":112},[102,163650,163651,163653],{"class":104,"line":1183},[102,163652,31290],{"class":161},[102,163654,150642],{"class":112},[19,163656,163657],{},"需要索引时：",[93,163659,163661],{"className":30369,"code":163660,"language":30371,"meta":23,"style":23},"for index, name in enumerate(names):\n    print(index, name)\n",[99,163662,163663,163677],{"__ignoreMap":23},[102,163664,163665,163667,163670,163672,163674],{"class":104,"line":105},[102,163666,3014],{"class":108},[102,163668,163669],{"class":112}," index, name ",[102,163671,26034],{"class":108},[102,163673,31597],{"class":161},[102,163675,163676],{"class":112},"(names):\n",[102,163678,163679,163681],{"class":104,"line":24},[102,163680,31290],{"class":161},[102,163682,163683],{"class":112},"(index, name)\n",[19,163685,163686],{},"统计总分：",[93,163688,163690],{"className":30369,"code":163689,"language":30371,"meta":23,"style":23},"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",[99,163691,163692,163717,163725,163729,163740,163748,163752,163769],{"__ignoreMap":23},[102,163693,163694,163697,163699,163701,163703,163705,163707,163709,163711,163713,163715],{"class":104,"line":105},[102,163695,163696],{"class":112},"scores ",[102,163698,158],{"class":108},[102,163700,52217],{"class":112},[102,163702,975],{"class":161},[102,163704,12425],{"class":112},[102,163706,849],{"class":161},[102,163708,12425],{"class":112},[102,163710,367],{"class":161},[102,163712,12425],{"class":112},[102,163714,674],{"class":161},[102,163716,33237],{"class":112},[102,163718,163719,163721,163723],{"class":104,"line":24},[102,163720,157242],{"class":112},[102,163722,158],{"class":108},[102,163724,47324],{"class":161},[102,163726,163727],{"class":104,"line":1168},[102,163728,2389],{"emptyLinePlaceholder":30},[102,163730,163731,163733,163735,163737],{"class":104,"line":1183},[102,163732,3014],{"class":108},[102,163734,157765],{"class":112},[102,163736,26034],{"class":108},[102,163738,163739],{"class":112}," scores:\n",[102,163741,163742,163744,163746],{"class":104,"line":1189},[102,163743,159289],{"class":112},[102,163745,9467],{"class":108},[102,163747,1568],{"class":112},[102,163749,163750],{"class":104,"line":1203},[102,163751,2389],{"emptyLinePlaceholder":30},[102,163753,163754,163757,163759,163762,163764,163766],{"class":104,"line":1209},[102,163755,163756],{"class":112},"avg ",[102,163758,158],{"class":108},[102,163760,163761],{"class":112}," total ",[102,163763,697],{"class":108},[102,163765,7321],{"class":161},[102,163767,163768],{"class":112},"(scores)\n",[102,163770,163771,163773,163775,163777,163780,163782,163785,163787,163789,163791],{"class":104,"line":1300},[102,163772,30406],{"class":161},[102,163774,113],{"class":112},[102,163776,165],{"class":108},[102,163778,163779],{"class":217},"\"平均分:",[102,163781,1009],{"class":161},[102,163783,163784],{"class":112},"avg",[102,163786,157141],{"class":108},[102,163788,1059],{"class":161},[102,163790,364],{"class":217},[102,163792,119],{"class":112},[14,163794,163796],{"id":163795},"_66-元组tuple","6.6 元组tuple",[19,163798,163799],{},"元组和列表类似，但不可修改。",[93,163801,163803],{"className":30369,"code":163802,"language":30371,"meta":23,"style":23},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[99,163804,163805,163822],{"__ignoreMap":23},[102,163806,163807,163810,163812,163814,163816,163818,163820],{"class":104,"line":105},[102,163808,163809],{"class":112},"point ",[102,163811,158],{"class":108},[102,163813,1647],{"class":112},[102,163815,559],{"class":161},[102,163817,12425],{"class":112},[102,163819,813],{"class":161},[102,163821,119],{"class":112},[102,163823,163824,163826,163828,163830,163832,163834,163836,163838,163840],{"class":104,"line":24},[102,163825,116305],{"class":112},[102,163827,158],{"class":108},[102,163829,1647],{"class":112},[102,163831,149870],{"class":217},[102,163833,12425],{"class":112},[102,163835,763],{"class":161},[102,163837,12425],{"class":112},[102,163839,69260],{"class":217},[102,163841,119],{"class":112},[19,163843,163844],{},"单元素元组必须加逗号：",[93,163846,163848],{"className":30369,"code":163847,"language":30371,"meta":23,"style":23},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[99,163849,163850,163864,163877,163881,163895],{"__ignoreMap":23},[102,163851,163852,163855,163857,163859,163861],{"class":104,"line":105},[102,163853,163854],{"class":112},"t1 ",[102,163856,158],{"class":108},[102,163858,1647],{"class":112},[102,163860,559],{"class":161},[102,163862,163863],{"class":112},",)\n",[102,163865,163866,163869,163871,163873,163875],{"class":104,"line":24},[102,163867,163868],{"class":112},"t2 ",[102,163870,158],{"class":108},[102,163872,1647],{"class":112},[102,163874,559],{"class":161},[102,163876,119],{"class":112},[102,163878,163879],{"class":104,"line":1168},[102,163880,2389],{"emptyLinePlaceholder":30},[102,163882,163883,163885,163887,163889,163892],{"class":104,"line":1183},[102,163884,30406],{"class":161},[102,163886,113],{"class":112},[102,163888,103098],{"class":161},[102,163890,163891],{"class":112},"(t1))  ",[102,163893,163894],{"class":171},"# tuple\n",[102,163896,163897,163899,163901,163903,163906],{"class":104,"line":1189},[102,163898,30406],{"class":161},[102,163900,113],{"class":112},[102,163902,103098],{"class":161},[102,163904,163905],{"class":112},"(t2))  ",[102,163907,163908],{"class":171},"# int\n",[19,163910,163911],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,163913,163915],{"id":163914},"_67-字符串str","6.7 字符串str",[19,163917,163918],{},"字符串也是序列，可以索引、切片和遍历。",[93,163920,163922],{"className":30369,"code":163921,"language":30371,"meta":23,"style":23},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[99,163923,163924,163932,163936,163947,163959,163963,163974],{"__ignoreMap":23},[102,163925,163926,163928,163930],{"class":104,"line":105},[102,163927,156426],{"class":112},[102,163929,158],{"class":108},[102,163931,159663],{"class":217},[102,163933,163934],{"class":104,"line":24},[102,163935,2389],{"emptyLinePlaceholder":30},[102,163937,163938,163940,163943,163945],{"class":104,"line":1168},[102,163939,30406],{"class":161},[102,163941,163942],{"class":112},"(text[",[102,163944,304],{"class":161},[102,163946,4646],{"class":112},[102,163948,163949,163951,163953,163955,163957],{"class":104,"line":1183},[102,163950,30406],{"class":161},[102,163952,163942],{"class":112},[102,163954,645],{"class":108},[102,163956,330],{"class":161},[102,163958,4646],{"class":112},[102,163960,163961],{"class":104,"line":1189},[102,163962,2389],{"emptyLinePlaceholder":30},[102,163964,163965,163967,163969,163971],{"class":104,"line":1203},[102,163966,3014],{"class":108},[102,163968,159674],{"class":112},[102,163970,26034],{"class":108},[102,163972,163973],{"class":112}," text:\n",[102,163975,163976,163978],{"class":104,"line":1209},[102,163977,31290],{"class":161},[102,163979,159685],{"class":112},[19,163981,163982],{},"字符串不可变：",[93,163984,163986],{"className":30369,"code":163985,"language":30371,"meta":23,"style":23},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[99,163987,163988,163996],{"__ignoreMap":23},[102,163989,163990,163992,163994],{"class":104,"line":105},[102,163991,156426],{"class":112},[102,163993,158],{"class":108},[102,163995,159663],{"class":217},[102,163997,163998,164001,164003,164005,164007,164010],{"class":104,"line":24},[102,163999,164000],{"class":112},"text[",[102,164002,304],{"class":161},[102,164004,4432],{"class":112},[102,164006,158],{"class":108},[102,164008,164009],{"class":217}," \"P\"",[102,164011,164012],{"class":171},"  # 报错\n",[19,164014,164015],{},"如果要得到新字符串：",[93,164017,164019],{"className":30369,"code":164018,"language":30371,"meta":23,"style":23},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[99,164020,164021,164029,164047],{"__ignoreMap":23},[102,164022,164023,164025,164027],{"class":104,"line":105},[102,164024,156426],{"class":112},[102,164026,158],{"class":108},[102,164028,159663],{"class":217},[102,164030,164031,164033,164035,164037,164039,164042,164044],{"class":104,"line":24},[102,164032,156426],{"class":112},[102,164034,158],{"class":108},[102,164036,164009],{"class":217},[102,164038,45557],{"class":108},[102,164040,164041],{"class":112}," text[",[102,164043,330],{"class":161},[102,164045,164046],{"class":112},":]\n",[102,164048,164049,164051],{"class":104,"line":1168},[102,164050,30406],{"class":161},[102,164052,164053],{"class":112},"(text)\n",[14,164055,164057],{"id":164056},"_68-切片","6.8 切片",[19,164059,164060],{},"切片用于从序列中取一部分。",[93,164062,164064],{"className":30369,"code":164063,"language":30371,"meta":23,"style":23},"序列[开始:结束:步长]\n",[99,164065,164066],{"__ignoreMap":23},[102,164067,164068],{"class":104,"line":105},[102,164069,164063],{"class":112},[19,164071,164072],{},"结束位置不包含。",[93,164074,164076],{"className":30369,"code":164075,"language":30371,"meta":23,"style":23},"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",[99,164077,164078,164115,164119,164138,164153,164167,164181],{"__ignoreMap":23},[102,164079,164080,164083,164085,164087,164089,164091,164093,164095,164097,164099,164101,164103,164105,164107,164109,164111,164113],{"class":104,"line":105},[102,164081,164082],{"class":112},"nums ",[102,164084,158],{"class":108},[102,164086,52217],{"class":112},[102,164088,304],{"class":161},[102,164090,12425],{"class":112},[102,164092,330],{"class":161},[102,164094,12425],{"class":112},[102,164096,190],{"class":161},[102,164098,12425],{"class":112},[102,164100,184],{"class":161},[102,164102,12425],{"class":112},[102,164104,406],{"class":161},[102,164106,12425],{"class":112},[102,164108,432],{"class":161},[102,164110,12425],{"class":112},[102,164112,457],{"class":161},[102,164114,33237],{"class":112},[102,164116,164117],{"class":104,"line":24},[102,164118,2389],{"emptyLinePlaceholder":30},[102,164120,164121,164123,164126,164128,164130,164132,164135],{"class":104,"line":1168},[102,164122,30406],{"class":161},[102,164124,164125],{"class":112},"(nums[",[102,164127,330],{"class":161},[102,164129,972],{"class":112},[102,164131,406],{"class":161},[102,164133,164134],{"class":112},"])    ",[102,164136,164137],{"class":171},"# [1, 2, 3]\n",[102,164139,164140,164142,164145,164147,164150],{"class":104,"line":1183},[102,164141,30406],{"class":161},[102,164143,164144],{"class":112},"(nums[:",[102,164146,184],{"class":161},[102,164148,164149],{"class":112},"])     ",[102,164151,164152],{"class":171},"# [0, 1, 2]\n",[102,164154,164155,164157,164159,164161,164164],{"class":104,"line":1189},[102,164156,30406],{"class":161},[102,164158,164125],{"class":112},[102,164160,184],{"class":161},[102,164162,164163],{"class":112},":])     ",[102,164165,164166],{"class":171},"# [3, 4, 5, 6]\n",[102,164168,164169,164171,164174,164176,164178],{"class":104,"line":1203},[102,164170,30406],{"class":161},[102,164172,164173],{"class":112},"(nums[::",[102,164175,190],{"class":161},[102,164177,164134],{"class":112},[102,164179,164180],{"class":171},"# [0, 2, 4, 6]\n",[102,164182,164183,164185,164187,164189,164191,164194],{"class":104,"line":1209},[102,164184,30406],{"class":161},[102,164186,164173],{"class":112},[102,164188,645],{"class":108},[102,164190,330],{"class":161},[102,164192,164193],{"class":112},"])   ",[102,164195,164196],{"class":171},"# 反转\n",[19,164198,164199],{},"字符串切片：",[93,164201,164203],{"className":30369,"code":164202,"language":30371,"meta":23,"style":23},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[99,164204,164205,164214,164228],{"__ignoreMap":23},[102,164206,164207,164209,164211],{"class":104,"line":105},[102,164208,156426],{"class":112},[102,164210,158],{"class":108},[102,164212,164213],{"class":217}," \"abcdef\"\n",[102,164215,164216,164218,164220,164222,164224,164226],{"class":104,"line":24},[102,164217,30406],{"class":161},[102,164219,163942],{"class":112},[102,164221,330],{"class":161},[102,164223,972],{"class":112},[102,164225,406],{"class":161},[102,164227,4646],{"class":112},[102,164229,164230,164232,164235,164237,164239],{"class":104,"line":1168},[102,164231,30406],{"class":161},[102,164233,164234],{"class":112},"(text[::",[102,164236,645],{"class":108},[102,164238,330],{"class":161},[102,164240,4646],{"class":112},[14,164242,164244],{"id":164243},"_69-集合set","6.9 集合set",[19,164246,164247],{},"集合特点：",[56,164249,164250,164253,164256],{},[59,164251,164252],{},"无序。",[59,164254,164255],{},"元素不重复。",[59,164257,164258],{},"可以做交集、并集、差集。",[93,164260,164262],{"className":30369,"code":164261,"language":30371,"meta":23,"style":23},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[99,164263,164264,164292],{"__ignoreMap":23},[102,164265,164266,164268,164270,164272,164274,164276,164278,164280,164282,164284,164286,164288,164290],{"class":104,"line":105},[102,164267,164082],{"class":112},[102,164269,158],{"class":108},[102,164271,4437],{"class":112},[102,164273,330],{"class":161},[102,164275,12425],{"class":112},[102,164277,190],{"class":161},[102,164279,12425],{"class":112},[102,164281,184],{"class":161},[102,164283,12425],{"class":112},[102,164285,184],{"class":161},[102,164287,12425],{"class":112},[102,164289,406],{"class":161},[102,164291,1554],{"class":112},[102,164293,164294,164296],{"class":104,"line":24},[102,164295,30406],{"class":161},[102,164297,164298],{"class":112},"(nums)\n",[19,164300,164301],{},"创建空集合：",[93,164303,164305],{"className":30369,"code":164304,"language":30371,"meta":23,"style":23},"s = set()\n",[99,164306,164307],{"__ignoreMap":23},[102,164308,164309,164311,164313,164315],{"class":104,"line":105},[102,164310,10569],{"class":112},[102,164312,158],{"class":108},[102,164314,119713],{"class":161},[102,164316,1965],{"class":112},[19,164318,9015,164319,164321],{},[99,164320,32450],{}," 是空字典，不是空集合。",[19,164323,164324],{},"集合常用操作：",[93,164326,164328],{"className":30369,"code":164327,"language":30371,"meta":23,"style":23},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[99,164329,164330,164350,164354,164363,164372,164381],{"__ignoreMap":23},[102,164331,164332,164334,164336,164338,164340,164342,164344,164346,164348],{"class":104,"line":105},[102,164333,10569],{"class":112},[102,164335,158],{"class":108},[102,164337,4437],{"class":112},[102,164339,330],{"class":161},[102,164341,12425],{"class":112},[102,164343,190],{"class":161},[102,164345,12425],{"class":112},[102,164347,184],{"class":161},[102,164349,1554],{"class":112},[102,164351,164352],{"class":104,"line":24},[102,164353,2389],{"emptyLinePlaceholder":30},[102,164355,164356,164359,164361],{"class":104,"line":1168},[102,164357,164358],{"class":112},"s.add(",[102,164360,406],{"class":161},[102,164362,119],{"class":112},[102,164364,164365,164368,164370],{"class":104,"line":1183},[102,164366,164367],{"class":112},"s.remove(",[102,164369,190],{"class":161},[102,164371,119],{"class":112},[102,164373,164374,164377,164379],{"class":104,"line":1189},[102,164375,164376],{"class":112},"s.discard(",[102,164378,559],{"class":161},[102,164380,119],{"class":112},[102,164382,164383,164385,164387,164389],{"class":104,"line":1203},[102,164384,30406],{"class":161},[102,164386,113],{"class":112},[102,164388,7348],{"class":161},[102,164390,164391],{"class":112},"(s))\n",[19,164393,164394],{},"交并差：",[93,164396,164398],{"className":30369,"code":164397,"language":30371,"meta":23,"style":23},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[99,164399,164400,164420,164440,164444,164459,164472],{"__ignoreMap":23},[102,164401,164402,164404,164406,164408,164410,164412,164414,164416,164418],{"class":104,"line":105},[102,164403,10909],{"class":112},[102,164405,158],{"class":108},[102,164407,4437],{"class":112},[102,164409,330],{"class":161},[102,164411,12425],{"class":112},[102,164413,190],{"class":161},[102,164415,12425],{"class":112},[102,164417,184],{"class":161},[102,164419,1554],{"class":112},[102,164421,164422,164424,164426,164428,164430,164432,164434,164436,164438],{"class":104,"line":24},[102,164423,10935],{"class":112},[102,164425,158],{"class":108},[102,164427,4437],{"class":112},[102,164429,184],{"class":161},[102,164431,12425],{"class":112},[102,164433,406],{"class":161},[102,164435,12425],{"class":112},[102,164437,432],{"class":161},[102,164439,1554],{"class":112},[102,164441,164442],{"class":104,"line":1168},[102,164443,2389],{"emptyLinePlaceholder":30},[102,164445,164446,164448,164451,164453,164456],{"class":104,"line":1183},[102,164447,30406],{"class":161},[102,164449,164450],{"class":112},"(a ",[102,164452,466],{"class":108},[102,164454,164455],{"class":112}," b)  ",[102,164457,164458],{"class":171},"# 交集\n",[102,164460,164461,164463,164465,164467,164469],{"class":104,"line":1189},[102,164462,30406],{"class":161},[102,164464,164450],{"class":112},[102,164466,1034],{"class":108},[102,164468,164455],{"class":112},[102,164470,164471],{"class":171},"# 并集\n",[102,164473,164474,164476,164478,164480,164482],{"class":104,"line":1203},[102,164475,30406],{"class":161},[102,164477,164450],{"class":112},[102,164479,645],{"class":108},[102,164481,164455],{"class":112},[102,164483,164484],{"class":171},"# 差集\n",[14,164486,164488],{"id":164487},"_610-字典dict","6.10 字典dict",[19,164490,164491],{},"字典通过 key-value 保存数据。",[93,164493,164495],{"className":30369,"code":164494,"language":30371,"meta":23,"style":23},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[99,164496,164497,164505,164515,164526,164536],{"__ignoreMap":23},[102,164498,164499,164501,164503],{"class":104,"line":105},[102,164500,149463],{"class":112},[102,164502,158],{"class":108},[102,164504,15562],{"class":112},[102,164506,164507,164509,164511,164513],{"class":104,"line":24},[102,164508,147002],{"class":217},[102,164510,51428],{"class":112},[102,164512,149870],{"class":217},[102,164514,31457],{"class":112},[102,164516,164517,164520,164522,164524],{"class":104,"line":1168},[102,164518,164519],{"class":217},"    \"age\"",[102,164521,51428],{"class":112},[102,164523,763],{"class":161},[102,164525,31457],{"class":112},[102,164527,164528,164531,164533],{"class":104,"line":1183},[102,164529,164530],{"class":217},"    \"score\"",[102,164532,51428],{"class":112},[102,164534,164535],{"class":161},"95\n",[102,164537,164538],{"class":104,"line":1189},[102,164539,1554],{"class":112},[19,164541,164542],{},"获取值：",[93,164544,164546],{"className":30369,"code":164545,"language":30371,"meta":23,"style":23},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[99,164547,164548,164559],{"__ignoreMap":23},[102,164549,164550,164552,164555,164557],{"class":104,"line":105},[102,164551,30406],{"class":161},[102,164553,164554],{"class":112},"(student[",[102,164556,62670],{"class":217},[102,164558,4646],{"class":112},[102,164560,164561,164563,164566,164568],{"class":104,"line":24},[102,164562,30406],{"class":161},[102,164564,164565],{"class":112},"(student.get(",[102,164567,62670],{"class":217},[102,164569,30488],{"class":112},[19,164571,15378],{},[93,164573,164575],{"className":30369,"code":164574,"language":30371,"meta":23,"style":23},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[99,164576,164577,164590],{"__ignoreMap":23},[102,164578,164579,164581,164584,164587],{"class":104,"line":105},[102,164580,152841],{"class":112},[102,164582,164583],{"class":217},"\"address\"",[102,164585,164586],{"class":112},"]     ",[102,164588,164589],{"class":171},"# key不存在会报错\n",[102,164591,164592,164595,164597,164599],{"class":104,"line":24},[102,164593,164594],{"class":112},"student.get(",[102,164596,164583],{"class":217},[102,164598,13704],{"class":112},[102,164600,164601],{"class":171},"# key不存在返回None\n",[19,164603,164604],{},"设置默认值：",[93,164606,164608],{"className":30369,"code":164607,"language":30371,"meta":23,"style":23},"print(student.get(\"address\", \"未知\"))\n",[99,164609,164610],{"__ignoreMap":23},[102,164611,164612,164614,164616,164618,164620,164623],{"class":104,"line":105},[102,164613,30406],{"class":161},[102,164615,164565],{"class":112},[102,164617,164583],{"class":217},[102,164619,12425],{"class":112},[102,164621,164622],{"class":217},"\"未知\"",[102,164624,30488],{"class":112},[19,164626,164627],{},"新增和修改：",[93,164629,164631],{"className":30369,"code":164630,"language":30371,"meta":23,"style":23},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[99,164632,164633,164646],{"__ignoreMap":23},[102,164634,164635,164637,164639,164641,164643],{"class":104,"line":105},[102,164636,152841],{"class":112},[102,164638,69115],{"class":217},[102,164640,4432],{"class":112},[102,164642,158],{"class":108},[102,164644,164645],{"class":161}," 19\n",[102,164647,164648,164650,164652,164654,164656],{"class":104,"line":24},[102,164649,152841],{"class":112},[102,164651,164583],{"class":217},[102,164653,4432],{"class":112},[102,164655,158],{"class":108},[102,164657,164658],{"class":217}," \"北京\"\n",[19,164660,164661],{},"删除：",[93,164663,164665],{"className":30369,"code":164664,"language":30371,"meta":23,"style":23},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[99,164666,164667,164680,164690],{"__ignoreMap":23},[102,164668,164669,164671,164673,164676,164678],{"class":104,"line":105},[102,164670,155340],{"class":112},[102,164672,158],{"class":108},[102,164674,164675],{"class":112}," student.pop(",[102,164677,151454],{"class":217},[102,164679,119],{"class":112},[102,164681,164682,164684,164686,164688],{"class":104,"line":24},[102,164683,163365],{"class":108},[102,164685,152131],{"class":112},[102,164687,69115],{"class":217},[102,164689,33237],{"class":112},[102,164691,164692],{"class":104,"line":1168},[102,164693,164694],{"class":112},"student.clear()\n",[14,164696,164698],{"id":164697},"_611-字典遍历","6.11 字典遍历",[19,164700,164701],{},"遍历 key：",[93,164703,164705],{"className":30369,"code":164704,"language":30371,"meta":23,"style":23},"for key in student:\n    print(key, student[key])\n",[99,164706,164707,164719],{"__ignoreMap":23},[102,164708,164709,164711,164714,164716],{"class":104,"line":105},[102,164710,3014],{"class":108},[102,164712,164713],{"class":112}," key ",[102,164715,26034],{"class":108},[102,164717,164718],{"class":112}," student:\n",[102,164720,164721,164723],{"class":104,"line":24},[102,164722,31290],{"class":161},[102,164724,164725],{"class":112},"(key, student[key])\n",[19,164727,164728],{},"遍历 value：",[93,164730,164732],{"className":30369,"code":164731,"language":30371,"meta":23,"style":23},"for value in student.values():\n    print(value)\n",[99,164733,164734,164746],{"__ignoreMap":23},[102,164735,164736,164738,164741,164743],{"class":104,"line":105},[102,164737,3014],{"class":108},[102,164739,164740],{"class":112}," value ",[102,164742,26034],{"class":108},[102,164744,164745],{"class":112}," student.values():\n",[102,164747,164748,164750],{"class":104,"line":24},[102,164749,31290],{"class":161},[102,164751,164752],{"class":112},"(value)\n",[19,164754,164755],{},"遍历 key 和 value：",[93,164757,164759],{"className":30369,"code":164758,"language":30371,"meta":23,"style":23},"for key, value in student.items():\n    print(key, value)\n",[99,164760,164761,164773],{"__ignoreMap":23},[102,164762,164763,164765,164768,164770],{"class":104,"line":105},[102,164764,3014],{"class":108},[102,164766,164767],{"class":112}," key, value ",[102,164769,26034],{"class":108},[102,164771,164772],{"class":112}," student.items():\n",[102,164774,164775,164777],{"class":104,"line":24},[102,164776,31290],{"class":161},[102,164778,164779],{"class":112},"(key, value)\n",[14,164781,164783],{"id":164782},"_612-嵌套容器","6.12 嵌套容器",[19,164785,164786],{},"列表中保存字典，是项目中最常见的结构之一。",[93,164788,164790],{"className":30369,"code":164789,"language":30371,"meta":23,"style":23},"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",[99,164791,164792,164800,164828,164856,164884,164888,164892,164902],{"__ignoreMap":23},[102,164793,164794,164796,164798],{"class":104,"line":105},[102,164795,159698],{"class":112},[102,164797,158],{"class":108},[102,164799,55438],{"class":112},[102,164801,164802,164804,164806,164808,164810,164812,164814,164816,164818,164820,164822,164824,164826],{"class":104,"line":24},[102,164803,148367],{"class":112},[102,164805,62670],{"class":217},[102,164807,51428],{"class":112},[102,164809,149870],{"class":217},[102,164811,12425],{"class":112},[102,164813,69115],{"class":217},[102,164815,51428],{"class":112},[102,164817,763],{"class":161},[102,164819,12425],{"class":112},[102,164821,151454],{"class":217},[102,164823,51428],{"class":112},[102,164825,1102],{"class":161},[102,164827,4919],{"class":112},[102,164829,164830,164832,164834,164836,164838,164840,164842,164844,164846,164848,164850,164852,164854],{"class":104,"line":1168},[102,164831,148367],{"class":112},[102,164833,62670],{"class":217},[102,164835,51428],{"class":112},[102,164837,150918],{"class":217},[102,164839,12425],{"class":112},[102,164841,69115],{"class":217},[102,164843,51428],{"class":112},[102,164845,738],{"class":161},[102,164847,12425],{"class":112},[102,164849,151454],{"class":217},[102,164851,51428],{"class":112},[102,164853,924],{"class":161},[102,164855,4919],{"class":112},[102,164857,164858,164860,164862,164864,164866,164868,164870,164872,164874,164876,164878,164880,164882],{"class":104,"line":1183},[102,164859,148367],{"class":112},[102,164861,62670],{"class":217},[102,164863,51428],{"class":112},[102,164865,159713],{"class":217},[102,164867,12425],{"class":112},[102,164869,69115],{"class":217},[102,164871,51428],{"class":112},[102,164873,788],{"class":161},[102,164875,12425],{"class":112},[102,164877,151454],{"class":217},[102,164879,51428],{"class":112},[102,164881,519],{"class":161},[102,164883,4919],{"class":112},[102,164885,164886],{"class":104,"line":1189},[102,164887,33237],{"class":112},[102,164889,164890],{"class":104,"line":1203},[102,164891,2389],{"emptyLinePlaceholder":30},[102,164893,164894,164896,164898,164900],{"class":104,"line":1209},[102,164895,3014],{"class":108},[102,164897,152119],{"class":112},[102,164899,26034],{"class":108},[102,164901,152124],{"class":112},[102,164903,164904,164906,164908,164910,164913,164915],{"class":104,"line":1300},[102,164905,31290],{"class":161},[102,164907,164554],{"class":112},[102,164909,62670],{"class":217},[102,164911,164912],{"class":112},"], student[",[102,164914,151454],{"class":217},[102,164916,4646],{"class":112},[19,164918,164919],{},"统计平均分：",[93,164921,164923],{"className":30369,"code":164922,"language":30371,"meta":23,"style":23},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[99,164924,164925,164933,164937,164947,164959,164963,164978],{"__ignoreMap":23},[102,164926,164927,164929,164931],{"class":104,"line":105},[102,164928,157242],{"class":112},[102,164930,158],{"class":108},[102,164932,47324],{"class":161},[102,164934,164935],{"class":104,"line":24},[102,164936,2389],{"emptyLinePlaceholder":30},[102,164938,164939,164941,164943,164945],{"class":104,"line":1168},[102,164940,3014],{"class":108},[102,164942,152119],{"class":112},[102,164944,26034],{"class":108},[102,164946,152124],{"class":112},[102,164948,164949,164951,164953,164955,164957],{"class":104,"line":1183},[102,164950,159289],{"class":112},[102,164952,9467],{"class":108},[102,164954,152131],{"class":112},[102,164956,151454],{"class":217},[102,164958,33237],{"class":112},[102,164960,164961],{"class":104,"line":1189},[102,164962,2389],{"emptyLinePlaceholder":30},[102,164964,164965,164967,164969,164971,164973,164975],{"class":104,"line":1203},[102,164966,163756],{"class":112},[102,164968,158],{"class":108},[102,164970,163761],{"class":112},[102,164972,697],{"class":108},[102,164974,7321],{"class":161},[102,164976,164977],{"class":112},"(students)\n",[102,164979,164980,164982,164984,164986,164988,164990,164992,164994,164996,164998],{"class":104,"line":1209},[102,164981,30406],{"class":161},[102,164983,113],{"class":112},[102,164985,165],{"class":108},[102,164987,163779],{"class":217},[102,164989,1009],{"class":161},[102,164991,163784],{"class":112},[102,164993,157141],{"class":108},[102,164995,1059],{"class":161},[102,164997,364],{"class":217},[102,164999,119],{"class":112},[19,165001,165002],{},"查找学生：",[93,165004,165006],{"className":30369,"code":165005,"language":30371,"meta":23,"style":23},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[99,165007,165008,165023,165027,165037,165051,165057,165061,165067],{"__ignoreMap":23},[102,165009,165010,165012,165014,165016,165018,165021],{"class":104,"line":105},[102,165011,111569],{"class":112},[102,165013,158],{"class":108},[102,165015,60596],{"class":161},[102,165017,113],{"class":112},[102,165019,165020],{"class":217},"\"请输入学生姓名:\"",[102,165022,119],{"class":112},[102,165024,165025],{"class":104,"line":24},[102,165026,2389],{"emptyLinePlaceholder":30},[102,165028,165029,165031,165033,165035],{"class":104,"line":1168},[102,165030,3014],{"class":108},[102,165032,152119],{"class":112},[102,165034,26034],{"class":108},[102,165036,152124],{"class":112},[102,165038,165039,165041,165043,165045,165047,165049],{"class":104,"line":1183},[102,165040,3090],{"class":108},[102,165042,152131],{"class":112},[102,165044,62670],{"class":217},[102,165046,4432],{"class":112},[102,165048,2938],{"class":108},[102,165050,160414],{"class":112},[102,165052,165053,165055],{"class":104,"line":1189},[102,165054,32442],{"class":161},[102,165056,150024],{"class":112},[102,165058,165059],{"class":104,"line":1203},[102,165060,31618],{"class":108},[102,165062,165063,165065],{"class":104,"line":1209},[102,165064,1690],{"class":108},[102,165066,3728],{"class":112},[102,165068,165069,165071,165073,165076],{"class":104,"line":1300},[102,165070,31290],{"class":161},[102,165072,113],{"class":112},[102,165074,165075],{"class":217},"\"没有找到\"",[102,165077,119],{"class":112},[14,165079,165081],{"id":165080},"_613-容器通用操作","6.13 容器通用操作",[19,165083,165084],{},"长度：",[93,165086,165088],{"className":30369,"code":165087,"language":30371,"meta":23,"style":23},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[99,165089,165090,165109,165119],{"__ignoreMap":23},[102,165091,165092,165094,165097,165099,165101,165103,165105,165107],{"class":104,"line":105},[102,165093,7348],{"class":161},[102,165095,165096],{"class":112},"([",[102,165098,330],{"class":161},[102,165100,12425],{"class":112},[102,165102,190],{"class":161},[102,165104,12425],{"class":112},[102,165106,184],{"class":161},[102,165108,4646],{"class":112},[102,165110,165111,165113,165115,165117],{"class":104,"line":24},[102,165112,7348],{"class":161},[102,165114,113],{"class":112},[102,165116,155862],{"class":217},[102,165118,119],{"class":112},[102,165120,165121,165123,165126,165128,165130,165132],{"class":104,"line":1168},[102,165122,7348],{"class":161},[102,165124,165125],{"class":112},"({",[102,165127,62670],{"class":217},[102,165129,51428],{"class":112},[102,165131,149870],{"class":217},[102,165133,165134],{"class":112},"})\n",[19,165136,165137],{},"最大最小：",[93,165139,165141],{"className":30369,"code":165140,"language":30371,"meta":23,"style":23},"max([1, 2, 3])\nmin([1, 2, 3])\n",[99,165142,165143,165161],{"__ignoreMap":23},[102,165144,165145,165147,165149,165151,165153,165155,165157,165159],{"class":104,"line":105},[102,165146,6005],{"class":161},[102,165148,165096],{"class":112},[102,165150,330],{"class":161},[102,165152,12425],{"class":112},[102,165154,190],{"class":161},[102,165156,12425],{"class":112},[102,165158,184],{"class":161},[102,165160,4646],{"class":112},[102,165162,165163,165166,165168,165170,165172,165174,165176,165178],{"class":104,"line":24},[102,165164,165165],{"class":161},"min",[102,165167,165096],{"class":112},[102,165169,330],{"class":161},[102,165171,12425],{"class":112},[102,165173,190],{"class":161},[102,165175,12425],{"class":112},[102,165177,184],{"class":161},[102,165179,4646],{"class":112},[19,165181,165182],{},"求和：",[93,165184,165186],{"className":30369,"code":165185,"language":30371,"meta":23,"style":23},"sum([1, 2, 3])\n",[99,165187,165188],{"__ignoreMap":23},[102,165189,165190,165193,165195,165197,165199,165201,165203,165205],{"class":104,"line":105},[102,165191,165192],{"class":161},"sum",[102,165194,165096],{"class":112},[102,165196,330],{"class":161},[102,165198,12425],{"class":112},[102,165200,190],{"class":161},[102,165202,12425],{"class":112},[102,165204,184],{"class":161},[102,165206,4646],{"class":112},[19,165208,163453],{},[93,165210,165212],{"className":30369,"code":165211,"language":30371,"meta":23,"style":23},"sorted([3, 1, 2])\n",[99,165213,165214],{"__ignoreMap":23},[102,165215,165216,165219,165221,165223,165225,165227,165229,165231],{"class":104,"line":105},[102,165217,165218],{"class":161},"sorted",[102,165220,165096],{"class":112},[102,165222,184],{"class":161},[102,165224,12425],{"class":112},[102,165226,330],{"class":161},[102,165228,12425],{"class":112},[102,165230,190],{"class":161},[102,165232,4646],{"class":112},[19,165234,165235],{},"类型转换：",[93,165237,165239],{"className":30369,"code":165238,"language":30371,"meta":23,"style":23},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[99,165240,165241,165251,165269],{"__ignoreMap":23},[102,165242,165243,165245,165247,165249],{"class":104,"line":105},[102,165244,154052],{"class":161},[102,165246,113],{"class":112},[102,165248,155862],{"class":217},[102,165250,119],{"class":112},[102,165252,165253,165255,165257,165259,165261,165263,165265,165267],{"class":104,"line":24},[102,165254,155247],{"class":161},[102,165256,165096],{"class":112},[102,165258,330],{"class":161},[102,165260,12425],{"class":112},[102,165262,190],{"class":161},[102,165264,12425],{"class":112},[102,165266,184],{"class":161},[102,165268,4646],{"class":112},[102,165270,165271,165273,165275,165277,165279,165281,165283,165285,165287,165289],{"class":104,"line":1168},[102,165272,155272],{"class":161},[102,165274,165096],{"class":112},[102,165276,330],{"class":161},[102,165278,12425],{"class":112},[102,165280,330],{"class":161},[102,165282,12425],{"class":112},[102,165284,190],{"class":161},[102,165286,12425],{"class":112},[102,165288,184],{"class":161},[102,165290,4646],{"class":112},[19,165292,165293],{},"成员判断：",[93,165295,165297],{"className":30369,"code":165296,"language":30371,"meta":23,"style":23},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[99,165298,165299,165316,165340],{"__ignoreMap":23},[102,165300,165301,165303,165305,165308,165311,165314],{"class":104,"line":105},[102,165302,30406],{"class":161},[102,165304,113],{"class":112},[102,165306,165307],{"class":217},"\"a\"",[102,165309,165310],{"class":108}," in",[102,165312,165313],{"class":217}," \"abc\"",[102,165315,119],{"class":112},[102,165317,165318,165320,165322,165324,165326,165328,165330,165332,165334,165336,165338],{"class":104,"line":24},[102,165319,30406],{"class":161},[102,165321,113],{"class":112},[102,165323,330],{"class":161},[102,165325,165310],{"class":108},[102,165327,52217],{"class":112},[102,165329,330],{"class":161},[102,165331,12425],{"class":112},[102,165333,190],{"class":161},[102,165335,12425],{"class":112},[102,165337,184],{"class":161},[102,165339,4646],{"class":112},[102,165341,165342,165344,165346,165348,165350,165352,165354,165356,165358],{"class":104,"line":1168},[102,165343,30406],{"class":161},[102,165345,113],{"class":112},[102,165347,62670],{"class":217},[102,165349,165310],{"class":108},[102,165351,4437],{"class":112},[102,165353,62670],{"class":217},[102,165355,51428],{"class":112},[102,165357,149870],{"class":217},[102,165359,165134],{"class":112},[14,165361,165363],{"id":165362},"_614-推导式","6.14 推导式",[19,165365,165366],{},"推导式用于快速生成容器。",[19,165368,165369],{},"列表推导式：",[93,165371,165373],{"className":30369,"code":165372,"language":30371,"meta":23,"style":23},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[99,165374,165375,165402],{"__ignoreMap":23},[102,165376,165377,165379,165381,165384,165386,165388,165390,165392,165394,165396,165398,165400],{"class":104,"line":105},[102,165378,164082],{"class":112},[102,165380,158],{"class":108},[102,165382,165383],{"class":112}," [i ",[102,165385,3014],{"class":108},[102,165387,9428],{"class":112},[102,165389,26034],{"class":108},[102,165391,32434],{"class":161},[102,165393,113],{"class":112},[102,165395,330],{"class":161},[102,165397,12425],{"class":112},[102,165399,457],{"class":161},[102,165401,97291],{"class":112},[102,165403,165404,165406],{"class":104,"line":24},[102,165405,30406],{"class":161},[102,165407,164298],{"class":112},[19,165409,165410],{},"带条件：",[93,165412,165414],{"className":30369,"code":165413,"language":30371,"meta":23,"style":23},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[99,165415,165416,165457],{"__ignoreMap":23},[102,165417,165418,165421,165423,165425,165427,165429,165431,165433,165435,165437,165439,165441,165443,165445,165447,165449,165451,165453,165455],{"class":104,"line":105},[102,165419,165420],{"class":112},"even_nums ",[102,165422,158],{"class":108},[102,165424,165383],{"class":112},[102,165426,3014],{"class":108},[102,165428,9428],{"class":112},[102,165430,26034],{"class":108},[102,165432,32434],{"class":161},[102,165434,113],{"class":112},[102,165436,330],{"class":161},[102,165438,12425],{"class":112},[102,165440,450],{"class":161},[102,165442,13704],{"class":112},[102,165444,1520],{"class":108},[102,165446,9428],{"class":112},[102,165448,441],{"class":108},[102,165450,14745],{"class":161},[102,165452,101550],{"class":108},[102,165454,4082],{"class":161},[102,165456,33237],{"class":112},[102,165458,165459,165461],{"class":104,"line":24},[102,165460,30406],{"class":161},[102,165462,165463],{"class":112},"(even_nums)\n",[19,165465,165466],{},"字典推导式：",[93,165468,165470],{"className":30369,"code":165469,"language":30371,"meta":23,"style":23},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[99,165471,165472,165506],{"__ignoreMap":23},[102,165473,165474,165477,165479,165482,165484,165486,165489,165491,165493,165495,165497,165499,165501,165503],{"class":104,"line":105},[102,165475,165476],{"class":112},"squares ",[102,165478,158],{"class":108},[102,165480,165481],{"class":112}," {i: i ",[102,165483,10651],{"class":108},[102,165485,14745],{"class":161},[102,165487,165488],{"class":108}," for",[102,165490,9428],{"class":112},[102,165492,26034],{"class":108},[102,165494,32434],{"class":161},[102,165496,113],{"class":112},[102,165498,330],{"class":161},[102,165500,12425],{"class":112},[102,165502,457],{"class":161},[102,165504,165505],{"class":112},")}\n",[102,165507,165508,165510],{"class":104,"line":24},[102,165509,30406],{"class":161},[102,165511,165512],{"class":112},"(squares)\n",[19,165514,165515],{},"集合推导式：",[93,165517,165519],{"className":30369,"code":165518,"language":30371,"meta":23,"style":23},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[99,165520,165521,165542],{"__ignoreMap":23},[102,165522,165523,165526,165528,165531,165533,165535,165537,165540],{"class":104,"line":105},[102,165524,165525],{"class":112},"chars ",[102,165527,158],{"class":108},[102,165529,165530],{"class":112}," {ch ",[102,165532,3014],{"class":108},[102,165534,159674],{"class":112},[102,165536,26034],{"class":108},[102,165538,165539],{"class":217}," \"hello\"",[102,165541,1554],{"class":112},[102,165543,165544,165546],{"class":104,"line":24},[102,165545,30406],{"class":161},[102,165547,165548],{"class":112},"(chars)\n",[19,165550,165551],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165553,165555],{"id":165554},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[93,165557,165559],{"className":30369,"code":165558,"language":30371,"meta":23,"style":23},"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",[99,165560,165561,165569,165589,165609,165629,165649,165653,165657,165665,165679,165688,165692,165702,165714,165718,165738,165747,165751,165767,165772,165776,165790,165794,165816,165852],{"__ignoreMap":23},[102,165562,165563,165565,165567],{"class":104,"line":105},[102,165564,159698],{"class":112},[102,165566,158],{"class":108},[102,165568,55438],{"class":112},[102,165570,165571,165573,165575,165577,165579,165581,165583,165585,165587],{"class":104,"line":24},[102,165572,148367],{"class":112},[102,165574,62670],{"class":217},[102,165576,51428],{"class":112},[102,165578,149870],{"class":217},[102,165580,12425],{"class":112},[102,165582,151454],{"class":217},[102,165584,51428],{"class":112},[102,165586,1102],{"class":161},[102,165588,4919],{"class":112},[102,165590,165591,165593,165595,165597,165599,165601,165603,165605,165607],{"class":104,"line":1168},[102,165592,148367],{"class":112},[102,165594,62670],{"class":217},[102,165596,51428],{"class":112},[102,165598,150918],{"class":217},[102,165600,12425],{"class":112},[102,165602,151454],{"class":217},[102,165604,51428],{"class":112},[102,165606,924],{"class":161},[102,165608,4919],{"class":112},[102,165610,165611,165613,165615,165617,165619,165621,165623,165625,165627],{"class":104,"line":1183},[102,165612,148367],{"class":112},[102,165614,62670],{"class":217},[102,165616,51428],{"class":112},[102,165618,159713],{"class":217},[102,165620,12425],{"class":112},[102,165622,151454],{"class":217},[102,165624,51428],{"class":112},[102,165626,519],{"class":161},[102,165628,4919],{"class":112},[102,165630,165631,165633,165635,165637,165639,165641,165643,165645,165647],{"class":104,"line":1189},[102,165632,148367],{"class":112},[102,165634,62670],{"class":217},[102,165636,51428],{"class":112},[102,165638,163292],{"class":217},[102,165640,12425],{"class":112},[102,165642,151454],{"class":217},[102,165644,51428],{"class":112},[102,165646,995],{"class":161},[102,165648,4919],{"class":112},[102,165650,165651],{"class":104,"line":1203},[102,165652,33237],{"class":112},[102,165654,165655],{"class":104,"line":1209},[102,165656,2389],{"emptyLinePlaceholder":30},[102,165658,165659,165661,165663],{"class":104,"line":1300},[102,165660,157242],{"class":112},[102,165662,158],{"class":108},[102,165664,47324],{"class":161},[102,165666,165667,165670,165672,165675,165677],{"class":104,"line":1306},[102,165668,165669],{"class":112},"max_student ",[102,165671,158],{"class":108},[102,165673,165674],{"class":112}," students[",[102,165676,304],{"class":161},[102,165678,33237],{"class":112},[102,165680,165681,165684,165686],{"class":104,"line":1318},[102,165682,165683],{"class":112},"passed ",[102,165685,158],{"class":108},[102,165687,51829],{"class":112},[102,165689,165690],{"class":104,"line":1601},[102,165691,2389],{"emptyLinePlaceholder":30},[102,165693,165694,165696,165698,165700],{"class":104,"line":1606},[102,165695,3014],{"class":108},[102,165697,152119],{"class":112},[102,165699,26034],{"class":108},[102,165701,152124],{"class":112},[102,165703,165704,165706,165708,165710,165712],{"class":104,"line":1612},[102,165705,159289],{"class":112},[102,165707,9467],{"class":108},[102,165709,152131],{"class":112},[102,165711,151454],{"class":217},[102,165713,33237],{"class":112},[102,165715,165716],{"class":104,"line":1617},[102,165717,2389],{"emptyLinePlaceholder":30},[102,165719,165720,165722,165724,165726,165728,165730,165733,165735],{"class":104,"line":1631},[102,165721,3090],{"class":108},[102,165723,152131],{"class":112},[102,165725,151454],{"class":217},[102,165727,4432],{"class":112},[102,165729,1073],{"class":108},[102,165731,165732],{"class":112}," max_student[",[102,165734,151454],{"class":217},[102,165736,165737],{"class":112},"]:\n",[102,165739,165740,165743,165745],{"class":104,"line":1636},[102,165741,165742],{"class":112},"        max_student ",[102,165744,158],{"class":108},[102,165746,152147],{"class":112},[102,165748,165749],{"class":104,"line":1642},[102,165750,2389],{"emptyLinePlaceholder":30},[102,165752,165753,165755,165757,165759,165761,165763,165765],{"class":104,"line":1663},[102,165754,3090],{"class":108},[102,165756,152131],{"class":112},[102,165758,151454],{"class":217},[102,165760,4432],{"class":112},[102,165762,1699],{"class":108},[102,165764,157819],{"class":161},[102,165766,3728],{"class":112},[102,165768,165769],{"class":104,"line":1668},[102,165770,165771],{"class":112},"        passed.append(student)\n",[102,165773,165774],{"class":104,"line":1682},[102,165775,2389],{"emptyLinePlaceholder":30},[102,165777,165778,165780,165782,165784,165786,165788],{"class":104,"line":1687},[102,165779,163756],{"class":112},[102,165781,158],{"class":108},[102,165783,163761],{"class":112},[102,165785,697],{"class":108},[102,165787,7321],{"class":161},[102,165789,164977],{"class":112},[102,165791,165792],{"class":104,"line":1716},[102,165793,2389],{"emptyLinePlaceholder":30},[102,165795,165796,165798,165800,165802,165804,165806,165808,165810,165812,165814],{"class":104,"line":1721},[102,165797,30406],{"class":161},[102,165799,113],{"class":112},[102,165801,165],{"class":108},[102,165803,163779],{"class":217},[102,165805,1009],{"class":161},[102,165807,163784],{"class":112},[102,165809,157141],{"class":108},[102,165811,1059],{"class":161},[102,165813,364],{"class":217},[102,165815,119],{"class":112},[102,165817,165818,165820,165822,165824,165827,165829,165832,165834,165836,165838,165840,165842,165844,165846,165848,165850],{"class":104,"line":1738},[102,165819,30406],{"class":161},[102,165821,113],{"class":112},[102,165823,165],{"class":108},[102,165825,165826],{"class":217},"\"最高分学生:",[102,165828,1009],{"class":161},[102,165830,165831],{"class":112},"max_student[",[102,165833,152864],{"class":217},[102,165835,1053],{"class":112},[102,165837,1059],{"class":161},[102,165839,4437],{"class":161},[102,165841,165831],{"class":112},[102,165843,152902],{"class":217},[102,165845,1053],{"class":112},[102,165847,1059],{"class":161},[102,165849,364],{"class":217},[102,165851,119],{"class":112},[102,165853,165854,165856,165858,165860,165863,165866,165869,165871,165873],{"class":104,"line":1743},[102,165855,30406],{"class":161},[102,165857,113],{"class":112},[102,165859,165],{"class":108},[102,165861,165862],{"class":217},"\"及格人数:",[102,165864,165865],{"class":161},"{len",[102,165867,165868],{"class":112},"(passed)",[102,165870,1059],{"class":161},[102,165872,364],{"class":217},[102,165874,119],{"class":112},[14,165876,165878],{"id":165877},"_616-易错点","6.16 易错点",[56,165880,165881,165884,165887,165890,165896,165905],{},[59,165882,165883],{},"列表可变，元组和字符串不可变。",[59,165885,165886],{},"切片结束位置不包含。",[59,165888,165889],{},"字典通过 key 取值，不是通过索引。",[59,165891,165892,165893,28376],{},"空集合要用 ",[99,165894,165895],{},"set()",[59,165897,104357,165898,165901,165902,28376],{},[99,165899,165900],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[99,165903,165904],{},"get()",[59,165906,165907],{},"嵌套容器要先看清楚每一层是什么类型。",[14,165909,165911],{"id":165910},"_617-本章练习","6.17 本章练习",[56,165913,165914,165917,165920,165923,165926],{},[59,165915,165916],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[59,165918,165919],{},"输入一句话，统计每个字符出现次数。",[59,165921,165922],{},"使用集合去除列表中的重复元素。",[59,165924,165925],{},"使用字典保存一个学生的信息，并实现修改成绩。",[59,165927,165928],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5116,165930,165931],{},"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":23,"searchDepth":24,"depth":24,"links":165933},[165934,165935,165936,165937,165938,165939,165940,165941,165942,165943,165944,165945,165946,165947,165948,165949,165950],{"id":162914,"depth":24,"text":162915},{"id":163031,"depth":24,"text":163032},{"id":163121,"depth":24,"text":163122},{"id":163245,"depth":24,"text":163246},{"id":163608,"depth":24,"text":163609},{"id":163795,"depth":24,"text":163796},{"id":163914,"depth":24,"text":163915},{"id":164056,"depth":24,"text":164057},{"id":164243,"depth":24,"text":164244},{"id":164487,"depth":24,"text":164488},{"id":164697,"depth":24,"text":164698},{"id":164782,"depth":24,"text":164783},{"id":165080,"depth":24,"text":165081},{"id":165362,"depth":24,"text":165363},{"id":165554,"depth":24,"text":165555},{"id":165877,"depth":24,"text":165878},{"id":165910,"depth":24,"text":165911},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162906,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165957,"title":165958,"body":165959,"description":27,"extension":28,"meta":168131,"navigation":30,"path":168132,"seo":168133,"stem":168134,"__hash__":168135},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165960,"toc":168106},[165961,165964,165968,165971,166051,166054,166075,166078,166082,166085,166147,166150,166167,166171,166174,166219,166221,166229,166233,166236,166318,166321,166324,166349,166352,166375,166379,166382,166384,166446,166449,166451,166502,166506,166510,166516,166621,166625,166631,166702,166706,166709,166777,166780,166860,166864,166870,166906,166909,166912,167022,167028,167032,167035,167107,167110,167114,167118,167123,167185,167189,167194,167262,167266,167271,167387,167391,167394,167474,167477,167481,167484,167588,167590,167605,167608,167612,167750,167758,167762,167764,167775,167777,168035,168039,168071,168075,168103],[10,165962,165958],{"id":165963},"_7-函数进阶",[14,165965,165967],{"id":165966},"_71-多返回值","7.1 多返回值",[19,165969,165970],{},"Python 函数可以返回多个值，本质上返回的是元组。",[93,165972,165974],{"className":30369,"code":165973,"language":30371,"meta":23,"style":23},"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",[99,165975,165976,165985,165993,166001,166010,166017,166021,166025,166034,166040],{"__ignoreMap":23},[102,165977,165978,165980,165983],{"class":104,"line":105},[102,165979,31938],{"class":108},[102,165981,165982],{"class":1952}," get_info",[102,165984,31944],{"class":112},[102,165986,165987,165989,165991],{"class":104,"line":24},[102,165988,152352],{"class":112},[102,165990,158],{"class":108},[102,165992,149335],{"class":217},[102,165994,165995,165997,165999],{"class":104,"line":1168},[102,165996,152368],{"class":112},[102,165998,158],{"class":108},[102,166000,146533],{"class":161},[102,166002,166003,166005,166007],{"class":104,"line":1183},[102,166004,152383],{"class":112},[102,166006,158],{"class":108},[102,166008,166009],{"class":161}," 95\n",[102,166011,166012,166014],{"class":104,"line":1189},[102,166013,4079],{"class":108},[102,166015,166016],{"class":112}," name, age, score\n",[102,166018,166019],{"class":104,"line":1203},[102,166020,2389],{"emptyLinePlaceholder":30},[102,166022,166023],{"class":104,"line":1209},[102,166024,2389],{"emptyLinePlaceholder":30},[102,166026,166027,166029,166031],{"class":104,"line":1300},[102,166028,161288],{"class":112},[102,166030,158],{"class":108},[102,166032,166033],{"class":112}," get_info()\n",[102,166035,166036,166038],{"class":104,"line":1306},[102,166037,30406],{"class":161},[102,166039,76576],{"class":112},[102,166041,166042,166044,166046,166048],{"class":104,"line":1318},[102,166043,30406],{"class":161},[102,166045,113],{"class":112},[102,166047,103098],{"class":161},[102,166049,166050],{"class":112},"(result))\n",[19,166052,166053],{},"可以直接解包：",[93,166055,166057],{"className":30369,"code":166056,"language":30371,"meta":23,"style":23},"name, age, score = get_info()\nprint(name, age, score)\n",[99,166058,166059,166068],{"__ignoreMap":23},[102,166060,166061,166064,166066],{"class":104,"line":105},[102,166062,166063],{"class":112},"name, age, score ",[102,166065,158],{"class":108},[102,166067,166033],{"class":112},[102,166069,166070,166072],{"class":104,"line":24},[102,166071,30406],{"class":161},[102,166073,166074],{"class":112},"(name, age, score)\n",[19,166076,166077],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166079,166081],{"id":166080},"_72-位置参数","7.2 位置参数",[19,166083,166084],{},"位置参数按顺序传递。",[93,166086,166088],{"className":30369,"code":166087,"language":30371,"meta":23,"style":23},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[99,166089,166090,166098,166126,166130,166134],{"__ignoreMap":23},[102,166091,166092,166094,166096],{"class":104,"line":105},[102,166093,31938],{"class":108},[102,166095,149354],{"class":1952},[102,166097,149357],{"class":112},[102,166099,166100,166102,166104,166106,166108,166110,166112,166114,166116,166118,166120,166122,166124],{"class":104,"line":24},[102,166101,31290],{"class":161},[102,166103,113],{"class":112},[102,166105,165],{"class":108},[102,166107,149368],{"class":217},[102,166109,1009],{"class":161},[102,166111,79801],{"class":112},[102,166113,1059],{"class":161},[102,166115,149377],{"class":217},[102,166117,1009],{"class":161},[102,166119,70212],{"class":112},[102,166121,1059],{"class":161},[102,166123,149386],{"class":217},[102,166125,119],{"class":112},[102,166127,166128],{"class":104,"line":1168},[102,166129,2389],{"emptyLinePlaceholder":30},[102,166131,166132],{"class":104,"line":1183},[102,166133,2389],{"emptyLinePlaceholder":30},[102,166135,166136,166139,166141,166143,166145],{"class":104,"line":1189},[102,166137,166138],{"class":112},"introduce(",[102,166140,149870],{"class":217},[102,166142,12425],{"class":112},[102,166144,763],{"class":161},[102,166146,119],{"class":112},[19,166148,166149],{},"顺序错了就会得到错误含义：",[93,166151,166153],{"className":30369,"code":166152,"language":30371,"meta":23,"style":23},"introduce(18, \"小明\")\n",[99,166154,166155],{"__ignoreMap":23},[102,166156,166157,166159,166161,166163,166165],{"class":104,"line":105},[102,166158,166138],{"class":112},[102,166160,763],{"class":161},[102,166162,12425],{"class":112},[102,166164,149870],{"class":217},[102,166166,119],{"class":112},[14,166168,166170],{"id":166169},"_73-关键字参数","7.3 关键字参数",[19,166172,166173],{},"关键字参数按参数名传递。",[93,166175,166177],{"className":30369,"code":166176,"language":30371,"meta":23,"style":23},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[99,166178,166179,166199],{"__ignoreMap":23},[102,166180,166181,166183,166185,166187,166189,166191,166193,166195,166197],{"class":104,"line":105},[102,166182,166138],{"class":112},[102,166184,79801],{"class":5206},[102,166186,158],{"class":108},[102,166188,149870],{"class":217},[102,166190,12425],{"class":112},[102,166192,70212],{"class":5206},[102,166194,158],{"class":108},[102,166196,763],{"class":161},[102,166198,119],{"class":112},[102,166200,166201,166203,166205,166207,166209,166211,166213,166215,166217],{"class":104,"line":24},[102,166202,166138],{"class":112},[102,166204,70212],{"class":5206},[102,166206,158],{"class":108},[102,166208,763],{"class":161},[102,166210,12425],{"class":112},[102,166212,79801],{"class":5206},[102,166214,158],{"class":108},[102,166216,149870],{"class":217},[102,166218,119],{"class":112},[19,166220,117925],{},[56,166222,166223,166226],{},[59,166224,166225],{},"顺序不容易错。",[59,166227,166228],{},"调用时可读性更强。",[14,166230,166232],{"id":166231},"_74-默认参数","7.4 默认参数",[19,166234,166235],{},"默认参数给参数设置默认值。",[93,166237,166239],{"className":30369,"code":166238,"language":30371,"meta":23,"style":23},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[99,166240,166241,166257,166287,166291,166295,166305],{"__ignoreMap":23},[102,166242,166243,166245,166247,166250,166252,166255],{"class":104,"line":105},[102,166244,31938],{"class":108},[102,166246,122084],{"class":1952},[102,166248,166249],{"class":112},"(host, port",[102,166251,158],{"class":108},[102,166253,166254],{"class":161},"3306",[102,166256,30777],{"class":112},[102,166258,166259,166261,166263,166265,166268,166270,166272,166274,166276,166278,166281,166283,166285],{"class":104,"line":24},[102,166260,31290],{"class":161},[102,166262,113],{"class":112},[102,166264,165],{"class":108},[102,166266,166267],{"class":217},"\"连接",[102,166269,1009],{"class":161},[102,166271,27386],{"class":112},[102,166273,1059],{"class":161},[102,166275,972],{"class":217},[102,166277,1009],{"class":161},[102,166279,166280],{"class":112},"port",[102,166282,1059],{"class":161},[102,166284,364],{"class":217},[102,166286,119],{"class":112},[102,166288,166289],{"class":104,"line":1168},[102,166290,2389],{"emptyLinePlaceholder":30},[102,166292,166293],{"class":104,"line":1183},[102,166294,2389],{"emptyLinePlaceholder":30},[102,166296,166297,166300,166303],{"class":104,"line":1189},[102,166298,166299],{"class":112},"connect(",[102,166301,166302],{"class":217},"\"localhost\"",[102,166304,119],{"class":112},[102,166306,166307,166309,166311,166313,166316],{"class":104,"line":1203},[102,166308,166299],{"class":112},[102,166310,166302],{"class":217},[102,166312,12425],{"class":112},[102,166314,166315],{"class":161},"6379",[102,166317,119],{"class":112},[19,166319,166320],{},"注意：默认参数必须放在非默认参数后面。",[19,166322,166323],{},"错误：",[93,166325,166327],{"className":30369,"code":166326,"language":30371,"meta":23,"style":23},"def connect(port=3306, host):\n    pass\n",[99,166328,166329,166345],{"__ignoreMap":23},[102,166330,166331,166333,166335,166338,166340,166342],{"class":104,"line":105},[102,166332,31938],{"class":108},[102,166334,122084],{"class":1952},[102,166336,166337],{"class":112},"(port",[102,166339,158],{"class":108},[102,166341,166254],{"class":161},[102,166343,166344],{"class":112},", host):\n",[102,166346,166347],{"class":104,"line":24},[102,166348,149519],{"class":108},[19,166350,166351],{},"正确：",[93,166353,166355],{"className":30369,"code":166354,"language":30371,"meta":23,"style":23},"def connect(host, port=3306):\n    pass\n",[99,166356,166357,166371],{"__ignoreMap":23},[102,166358,166359,166361,166363,166365,166367,166369],{"class":104,"line":105},[102,166360,31938],{"class":108},[102,166362,122084],{"class":1952},[102,166364,166249],{"class":112},[102,166366,158],{"class":108},[102,166368,166254],{"class":161},[102,166370,30777],{"class":112},[102,166372,166373],{"class":104,"line":24},[102,166374,149519],{"class":108},[14,166376,166378],{"id":166377},"_75-默认参数的坑","7.5 默认参数的坑",[19,166380,166381],{},"不要使用可变对象作为默认参数。",[19,166383,157605],{},[93,166385,166387],{"className":30369,"code":166386,"language":30371,"meta":23,"style":23},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[99,166388,166389,166404,166409,166416,166420,166424,166435],{"__ignoreMap":23},[102,166390,166391,166393,166396,166399,166401],{"class":104,"line":105},[102,166392,31938],{"class":108},[102,166394,166395],{"class":1952}," add_item",[102,166397,166398],{"class":112},"(item, items",[102,166400,158],{"class":108},[102,166402,166403],{"class":112},"[]):\n",[102,166405,166406],{"class":104,"line":24},[102,166407,166408],{"class":112},"    items.append(item)\n",[102,166410,166411,166413],{"class":104,"line":1168},[102,166412,4079],{"class":108},[102,166414,166415],{"class":112}," items\n",[102,166417,166418],{"class":104,"line":1183},[102,166419,2389],{"emptyLinePlaceholder":30},[102,166421,166422],{"class":104,"line":1189},[102,166423,2389],{"emptyLinePlaceholder":30},[102,166425,166426,166428,166431,166433],{"class":104,"line":1203},[102,166427,30406],{"class":161},[102,166429,166430],{"class":112},"(add_item(",[102,166432,165307],{"class":217},[102,166434,30488],{"class":112},[102,166436,166437,166439,166441,166444],{"class":104,"line":1209},[102,166438,30406],{"class":161},[102,166440,166430],{"class":112},[102,166442,166443],{"class":217},"\"b\"",[102,166445,30488],{"class":112},[19,166447,166448],{},"第二次调用会复用第一次的列表。",[19,166450,155870],{},[93,166452,166454],{"className":30369,"code":166453,"language":30371,"meta":23,"style":23},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[99,166455,166456,166470,166483,166492,166496],{"__ignoreMap":23},[102,166457,166458,166460,166462,166464,166466,166468],{"class":104,"line":105},[102,166459,31938],{"class":108},[102,166461,166395],{"class":1952},[102,166463,166398],{"class":112},[102,166465,158],{"class":108},[102,166467,95677],{"class":161},[102,166469,30777],{"class":112},[102,166471,166472,166474,166477,166479,166481],{"class":104,"line":24},[102,166473,3090],{"class":108},[102,166475,166476],{"class":112}," items ",[102,166478,38918],{"class":108},[102,166480,38924],{"class":161},[102,166482,3728],{"class":112},[102,166484,166485,166488,166490],{"class":104,"line":1168},[102,166486,166487],{"class":112},"        items ",[102,166489,158],{"class":108},[102,166491,51829],{"class":112},[102,166493,166494],{"class":104,"line":1183},[102,166495,166408],{"class":112},[102,166497,166498,166500],{"class":104,"line":1189},[102,166499,4079],{"class":108},[102,166501,166415],{"class":112},[14,166503,166505],{"id":166504},"_76-不定长参数","7.6 不定长参数",[73,166507,166509],{"id":166508},"_761-args","7.6.1 *args",[19,166511,166512,166515],{},[99,166513,166514],{},"*args"," 接收任意数量的位置参数，得到元组。",[93,166517,166519],{"className":30369,"code":166518,"language":30371,"meta":23,"style":23},"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",[99,166520,166521,166534,166542,166553,166562,166568,166572,166576,166595],{"__ignoreMap":23},[102,166522,166523,166525,166527,166529,166531],{"class":104,"line":105},[102,166524,31938],{"class":108},[102,166526,5199],{"class":1952},[102,166528,113],{"class":112},[102,166530,568],{"class":108},[102,166532,166533],{"class":112},"args):\n",[102,166535,166536,166538,166540],{"class":104,"line":24},[102,166537,159289],{"class":112},[102,166539,158],{"class":108},[102,166541,47324],{"class":161},[102,166543,166544,166546,166548,166550],{"class":104,"line":1168},[102,166545,3190],{"class":108},[102,166547,156162],{"class":112},[102,166549,26034],{"class":108},[102,166551,166552],{"class":112}," args:\n",[102,166554,166555,166557,166559],{"class":104,"line":1183},[102,166556,159964],{"class":112},[102,166558,9467],{"class":108},[102,166560,166561],{"class":112}," num\n",[102,166563,166564,166566],{"class":104,"line":1189},[102,166565,4079],{"class":108},[102,166567,162269],{"class":112},[102,166569,166570],{"class":104,"line":1203},[102,166571,2389],{"emptyLinePlaceholder":30},[102,166573,166574],{"class":104,"line":1209},[102,166575,2389],{"emptyLinePlaceholder":30},[102,166577,166578,166580,166583,166585,166587,166589,166591,166593],{"class":104,"line":1300},[102,166579,30406],{"class":161},[102,166581,166582],{"class":112},"(add(",[102,166584,330],{"class":161},[102,166586,12425],{"class":112},[102,166588,190],{"class":161},[102,166590,12425],{"class":112},[102,166592,184],{"class":161},[102,166594,30488],{"class":112},[102,166596,166597,166599,166601,166603,166605,166607,166609,166611,166613,166615,166617,166619],{"class":104,"line":1306},[102,166598,30406],{"class":161},[102,166600,166582],{"class":112},[102,166602,330],{"class":161},[102,166604,12425],{"class":112},[102,166606,190],{"class":161},[102,166608,12425],{"class":112},[102,166610,184],{"class":161},[102,166612,12425],{"class":112},[102,166614,406],{"class":161},[102,166616,12425],{"class":112},[102,166618,432],{"class":161},[102,166620,30488],{"class":112},[73,166622,166624],{"id":166623},"_762-kwargs","7.6.2 **kwargs",[19,166626,166627,166630],{},[99,166628,166629],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[93,166632,166634],{"className":30369,"code":166633,"language":30371,"meta":23,"style":23},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[99,166635,166636,166649,166660,166666,166670,166674],{"__ignoreMap":23},[102,166637,166638,166640,166642,166644,166646],{"class":104,"line":105},[102,166639,31938],{"class":108},[102,166641,161927],{"class":1952},[102,166643,113],{"class":112},[102,166645,10651],{"class":108},[102,166647,166648],{"class":112},"kwargs):\n",[102,166650,166651,166653,166655,166657],{"class":104,"line":24},[102,166652,3190],{"class":108},[102,166654,164767],{"class":112},[102,166656,26034],{"class":108},[102,166658,166659],{"class":112}," kwargs.items():\n",[102,166661,166662,166664],{"class":104,"line":1168},[102,166663,32442],{"class":161},[102,166665,164779],{"class":112},[102,166667,166668],{"class":104,"line":1183},[102,166669,2389],{"emptyLinePlaceholder":30},[102,166671,166672],{"class":104,"line":1189},[102,166673,2389],{"emptyLinePlaceholder":30},[102,166675,166676,166678,166680,166682,166684,166686,166688,166690,166692,166694,166696,166698,166700],{"class":104,"line":1203},[102,166677,161992],{"class":112},[102,166679,79801],{"class":5206},[102,166681,158],{"class":108},[102,166683,149870],{"class":217},[102,166685,12425],{"class":112},[102,166687,70212],{"class":5206},[102,166689,158],{"class":108},[102,166691,763],{"class":161},[102,166693,12425],{"class":112},[102,166695,70263],{"class":5206},[102,166697,158],{"class":108},[102,166699,69260],{"class":217},[102,166701,119],{"class":112},[14,166703,166705],{"id":166704},"_77-参数解包","7.7 参数解包",[19,166707,166708],{},"列表或元组解包为位置参数：",[93,166710,166712],{"className":30369,"code":166711,"language":30371,"meta":23,"style":23},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[99,166713,166714,166723,166738,166742,166746,166766],{"__ignoreMap":23},[102,166715,166716,166718,166720],{"class":104,"line":105},[102,166717,31938],{"class":108},[102,166719,5199],{"class":1952},[102,166721,166722],{"class":112},"(a, b, c):\n",[102,166724,166725,166727,166729,166731,166733,166735],{"class":104,"line":24},[102,166726,4079],{"class":108},[102,166728,10859],{"class":112},[102,166730,594],{"class":108},[102,166732,10872],{"class":112},[102,166734,594],{"class":108},[102,166736,166737],{"class":112}," c\n",[102,166739,166740],{"class":104,"line":1168},[102,166741,2389],{"emptyLinePlaceholder":30},[102,166743,166744],{"class":104,"line":1183},[102,166745,2389],{"emptyLinePlaceholder":30},[102,166747,166748,166750,166752,166754,166756,166758,166760,166762,166764],{"class":104,"line":1189},[102,166749,164082],{"class":112},[102,166751,158],{"class":108},[102,166753,52217],{"class":112},[102,166755,330],{"class":161},[102,166757,12425],{"class":112},[102,166759,190],{"class":161},[102,166761,12425],{"class":112},[102,166763,184],{"class":161},[102,166765,33237],{"class":112},[102,166767,166768,166770,166772,166774],{"class":104,"line":1203},[102,166769,30406],{"class":161},[102,166771,166582],{"class":112},[102,166773,568],{"class":108},[102,166775,166776],{"class":112},"nums))\n",[19,166778,166779],{},"字典解包为关键字参数：",[93,166781,166783],{"className":30369,"code":166782,"language":30371,"meta":23,"style":23},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[99,166784,166785,166793,166819,166823,166827,166851],{"__ignoreMap":23},[102,166786,166787,166789,166791],{"class":104,"line":105},[102,166788,31938],{"class":108},[102,166790,149354],{"class":1952},[102,166792,149357],{"class":112},[102,166794,166795,166797,166799,166801,166803,166805,166807,166809,166811,166813,166815,166817],{"class":104,"line":24},[102,166796,31290],{"class":161},[102,166798,113],{"class":112},[102,166800,165],{"class":108},[102,166802,364],{"class":217},[102,166804,1009],{"class":161},[102,166806,79801],{"class":112},[102,166808,1059],{"class":161},[102,166810,4437],{"class":161},[102,166812,70212],{"class":112},[102,166814,1059],{"class":161},[102,166816,364],{"class":217},[102,166818,119],{"class":112},[102,166820,166821],{"class":104,"line":1168},[102,166822,2389],{"emptyLinePlaceholder":30},[102,166824,166825],{"class":104,"line":1183},[102,166826,2389],{"emptyLinePlaceholder":30},[102,166828,166829,166831,166833,166835,166837,166839,166841,166843,166845,166847,166849],{"class":104,"line":1189},[102,166830,116305],{"class":112},[102,166832,158],{"class":108},[102,166834,4437],{"class":112},[102,166836,62670],{"class":217},[102,166838,51428],{"class":112},[102,166840,149870],{"class":217},[102,166842,12425],{"class":112},[102,166844,69115],{"class":217},[102,166846,51428],{"class":112},[102,166848,763],{"class":161},[102,166850,1554],{"class":112},[102,166852,166853,166855,166857],{"class":104,"line":1203},[102,166854,166138],{"class":112},[102,166856,10651],{"class":108},[102,166858,166859],{"class":112},"info)\n",[14,166861,166863],{"id":166862},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,166865,166866,166869],{},[99,166867,166868],{},"lambda"," 用于定义简单匿名函数。",[93,166871,166873],{"className":30369,"code":166872,"language":30371,"meta":23,"style":23},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[99,166874,166875,166892],{"__ignoreMap":23},[102,166876,166877,166880,166882,166885,166888,166890],{"class":104,"line":105},[102,166878,166879],{"class":112},"add ",[102,166881,158],{"class":108},[102,166883,166884],{"class":108}," lambda",[102,166886,166887],{"class":112}," a, b: a ",[102,166889,594],{"class":108},[102,166891,151086],{"class":112},[102,166893,166894,166896,166898,166900,166902,166904],{"class":104,"line":24},[102,166895,30406],{"class":161},[102,166897,166582],{"class":112},[102,166899,330],{"class":161},[102,166901,12425],{"class":112},[102,166903,190],{"class":161},[102,166905,30488],{"class":112},[19,166907,166908],{},"常和排序、过滤等函数一起使用。",[19,166910,166911],{},"按分数排序：",[93,166913,166915],{"className":30369,"code":166914,"language":30371,"meta":23,"style":23},"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",[99,166916,166917,166925,166945,166965,166985,166989,166993,167016],{"__ignoreMap":23},[102,166918,166919,166921,166923],{"class":104,"line":105},[102,166920,159698],{"class":112},[102,166922,158],{"class":108},[102,166924,55438],{"class":112},[102,166926,166927,166929,166931,166933,166935,166937,166939,166941,166943],{"class":104,"line":24},[102,166928,148367],{"class":112},[102,166930,62670],{"class":217},[102,166932,51428],{"class":112},[102,166934,149870],{"class":217},[102,166936,12425],{"class":112},[102,166938,151454],{"class":217},[102,166940,51428],{"class":112},[102,166942,1102],{"class":161},[102,166944,4919],{"class":112},[102,166946,166947,166949,166951,166953,166955,166957,166959,166961,166963],{"class":104,"line":1168},[102,166948,148367],{"class":112},[102,166950,62670],{"class":217},[102,166952,51428],{"class":112},[102,166954,150918],{"class":217},[102,166956,12425],{"class":112},[102,166958,151454],{"class":217},[102,166960,51428],{"class":112},[102,166962,924],{"class":161},[102,166964,4919],{"class":112},[102,166966,166967,166969,166971,166973,166975,166977,166979,166981,166983],{"class":104,"line":1183},[102,166968,148367],{"class":112},[102,166970,62670],{"class":217},[102,166972,51428],{"class":112},[102,166974,159713],{"class":217},[102,166976,12425],{"class":112},[102,166978,151454],{"class":217},[102,166980,51428],{"class":112},[102,166982,519],{"class":161},[102,166984,4919],{"class":112},[102,166986,166987],{"class":104,"line":1189},[102,166988,33237],{"class":112},[102,166990,166991],{"class":104,"line":1203},[102,166992,2389],{"emptyLinePlaceholder":30},[102,166994,166995,166998,167000,167002,167004,167006,167008,167010,167012,167014],{"class":104,"line":1209},[102,166996,166997],{"class":112},"students.sort(",[102,166999,153928],{"class":5206},[102,167001,153931],{"class":108},[102,167003,153934],{"class":112},[102,167005,151454],{"class":217},[102,167007,112193],{"class":112},[102,167009,163510],{"class":5206},[102,167011,158],{"class":108},[102,167013,31467],{"class":161},[102,167015,119],{"class":112},[102,167017,167018,167020],{"class":104,"line":1300},[102,167019,30406],{"class":161},[102,167021,164977],{"class":112},[19,167023,167024,167025,167027],{},"如果逻辑复杂，不要硬写 ",[99,167026,166868],{},"，定义普通函数更清晰。",[14,167029,167031],{"id":167030},"_79-函数作为参数","7.9 函数作为参数",[19,167033,167034],{},"函数可以作为参数传给另一个函数。",[93,167036,167038],{"className":30369,"code":167037,"language":30371,"meta":23,"style":23},"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",[99,167039,167040,167048,167058,167062,167066,167076,167083,167087,167091],{"__ignoreMap":23},[102,167041,167042,167044,167046],{"class":104,"line":105},[102,167043,31938],{"class":108},[102,167045,5199],{"class":1952},[102,167047,151075],{"class":112},[102,167049,167050,167052,167054,167056],{"class":104,"line":24},[102,167051,4079],{"class":108},[102,167053,10859],{"class":112},[102,167055,594],{"class":108},[102,167057,151086],{"class":112},[102,167059,167060],{"class":104,"line":1168},[102,167061,2389],{"emptyLinePlaceholder":30},[102,167063,167064],{"class":104,"line":1183},[102,167065,2389],{"emptyLinePlaceholder":30},[102,167067,167068,167070,167073],{"class":104,"line":1189},[102,167069,31938],{"class":108},[102,167071,167072],{"class":1952}," calculate",[102,167074,167075],{"class":112},"(a, b, func):\n",[102,167077,167078,167080],{"class":104,"line":1203},[102,167079,4079],{"class":108},[102,167081,167082],{"class":112}," func(a, b)\n",[102,167084,167085],{"class":104,"line":1209},[102,167086,2389],{"emptyLinePlaceholder":30},[102,167088,167089],{"class":104,"line":1300},[102,167090,2389],{"emptyLinePlaceholder":30},[102,167092,167093,167095,167098,167100,167102,167104],{"class":104,"line":1306},[102,167094,30406],{"class":161},[102,167096,167097],{"class":112},"(calculate(",[102,167099,559],{"class":161},[102,167101,12425],{"class":112},[102,167103,813],{"class":161},[102,167105,167106],{"class":112},", add))\n",[19,167108,167109],{},"这种思想在排序、回调、框架中经常出现。",[14,167111,167113],{"id":167112},"_710-mapfiltersorted","7.10 map、filter、sorted",[73,167115,167117],{"id":167116},"_7101-map","7.10.1 map",[19,167119,167120,167122],{},[99,167121,74035],{}," 对每个元素执行函数。",[93,167124,167126],{"className":30369,"code":167125,"language":30371,"meta":23,"style":23},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[99,167127,167128,167152,167175],{"__ignoreMap":23},[102,167129,167130,167132,167134,167136,167138,167140,167142,167144,167146,167148,167150],{"class":104,"line":105},[102,167131,164082],{"class":112},[102,167133,158],{"class":108},[102,167135,52217],{"class":112},[102,167137,330],{"class":161},[102,167139,12425],{"class":112},[102,167141,190],{"class":161},[102,167143,12425],{"class":112},[102,167145,184],{"class":161},[102,167147,12425],{"class":112},[102,167149,406],{"class":161},[102,167151,33237],{"class":112},[102,167153,167154,167156,167158,167161,167163,167165,167168,167170,167172],{"class":104,"line":24},[102,167155,161288],{"class":112},[102,167157,158],{"class":108},[102,167159,167160],{"class":161}," map",[102,167162,113],{"class":112},[102,167164,166868],{"class":108},[102,167166,167167],{"class":112}," x: x ",[102,167169,568],{"class":108},[102,167171,14745],{"class":161},[102,167173,167174],{"class":112},", nums)\n",[102,167176,167177,167179,167181,167183],{"class":104,"line":1168},[102,167178,30406],{"class":161},[102,167180,113],{"class":112},[102,167182,154052],{"class":161},[102,167184,166050],{"class":112},[73,167186,167188],{"id":167187},"_7102-filter","7.10.2 filter",[19,167190,167191,167193],{},[99,167192,80042],{}," 保留满足条件的元素。",[93,167195,167197],{"className":30369,"code":167196,"language":30371,"meta":23,"style":23},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[99,167198,167199,167227,167252],{"__ignoreMap":23},[102,167200,167201,167203,167205,167207,167209,167211,167213,167215,167217,167219,167221,167223,167225],{"class":104,"line":105},[102,167202,164082],{"class":112},[102,167204,158],{"class":108},[102,167206,52217],{"class":112},[102,167208,330],{"class":161},[102,167210,12425],{"class":112},[102,167212,190],{"class":161},[102,167214,12425],{"class":112},[102,167216,184],{"class":161},[102,167218,12425],{"class":112},[102,167220,406],{"class":161},[102,167222,12425],{"class":112},[102,167224,432],{"class":161},[102,167226,33237],{"class":112},[102,167228,167229,167231,167233,167236,167238,167240,167242,167244,167246,167248,167250],{"class":104,"line":24},[102,167230,161288],{"class":112},[102,167232,158],{"class":108},[102,167234,167235],{"class":161}," filter",[102,167237,113],{"class":112},[102,167239,166868],{"class":108},[102,167241,167167],{"class":112},[102,167243,441],{"class":108},[102,167245,14745],{"class":161},[102,167247,101550],{"class":108},[102,167249,4082],{"class":161},[102,167251,167174],{"class":112},[102,167253,167254,167256,167258,167260],{"class":104,"line":1168},[102,167255,30406],{"class":161},[102,167257,113],{"class":112},[102,167259,154052],{"class":161},[102,167261,166050],{"class":112},[73,167263,167265],{"id":167264},"_7103-sorted","7.10.3 sorted",[19,167267,167268,167270],{},[99,167269,165218],{}," 返回排序后的新列表。",[93,167272,167274],{"className":30369,"code":167273,"language":30371,"meta":23,"style":23},"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",[99,167275,167276,167284,167304,167324,167344,167348,167352,167381],{"__ignoreMap":23},[102,167277,167278,167280,167282],{"class":104,"line":105},[102,167279,159698],{"class":112},[102,167281,158],{"class":108},[102,167283,55438],{"class":112},[102,167285,167286,167288,167290,167292,167294,167296,167298,167300,167302],{"class":104,"line":24},[102,167287,148367],{"class":112},[102,167289,62670],{"class":217},[102,167291,51428],{"class":112},[102,167293,149870],{"class":217},[102,167295,12425],{"class":112},[102,167297,151454],{"class":217},[102,167299,51428],{"class":112},[102,167301,1102],{"class":161},[102,167303,4919],{"class":112},[102,167305,167306,167308,167310,167312,167314,167316,167318,167320,167322],{"class":104,"line":1168},[102,167307,148367],{"class":112},[102,167309,62670],{"class":217},[102,167311,51428],{"class":112},[102,167313,150918],{"class":217},[102,167315,12425],{"class":112},[102,167317,151454],{"class":217},[102,167319,51428],{"class":112},[102,167321,924],{"class":161},[102,167323,4919],{"class":112},[102,167325,167326,167328,167330,167332,167334,167336,167338,167340,167342],{"class":104,"line":1183},[102,167327,148367],{"class":112},[102,167329,62670],{"class":217},[102,167331,51428],{"class":112},[102,167333,159713],{"class":217},[102,167335,12425],{"class":112},[102,167337,151454],{"class":217},[102,167339,51428],{"class":112},[102,167341,519],{"class":161},[102,167343,4919],{"class":112},[102,167345,167346],{"class":104,"line":1189},[102,167347,33237],{"class":112},[102,167349,167350],{"class":104,"line":1203},[102,167351,2389],{"emptyLinePlaceholder":30},[102,167353,167354,167356,167358,167360,167363,167365,167367,167369,167371,167373,167375,167377,167379],{"class":104,"line":1209},[102,167355,161288],{"class":112},[102,167357,158],{"class":108},[102,167359,163586],{"class":161},[102,167361,167362],{"class":112},"(students, ",[102,167364,153928],{"class":5206},[102,167366,153931],{"class":108},[102,167368,153934],{"class":112},[102,167370,151454],{"class":217},[102,167372,112193],{"class":112},[102,167374,163510],{"class":5206},[102,167376,158],{"class":108},[102,167378,31467],{"class":161},[102,167380,119],{"class":112},[102,167382,167383,167385],{"class":104,"line":1300},[102,167384,30406],{"class":161},[102,167386,76576],{"class":112},[14,167388,167390],{"id":167389},"_711-闭包入门","7.11 闭包入门",[19,167392,167393],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[93,167395,167397],{"className":30369,"code":167396,"language":30371,"meta":23,"style":23},"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",[99,167398,167399,167409,167419,167430,167434,167441,167445,167449,167463],{"__ignoreMap":23},[102,167400,167401,167403,167406],{"class":104,"line":105},[102,167402,31938],{"class":108},[102,167404,167405],{"class":1952}," outer",[102,167407,167408],{"class":112},"(base):\n",[102,167410,167411,167413,167416],{"class":104,"line":24},[102,167412,30792],{"class":108},[102,167414,167415],{"class":1952}," inner",[102,167417,167418],{"class":112},"(num):\n",[102,167420,167421,167423,167426,167428],{"class":104,"line":1168},[102,167422,14742],{"class":108},[102,167424,167425],{"class":112}," base ",[102,167427,594],{"class":108},[102,167429,166561],{"class":112},[102,167431,167432],{"class":104,"line":1183},[102,167433,2389],{"emptyLinePlaceholder":30},[102,167435,167436,167438],{"class":104,"line":1189},[102,167437,4079],{"class":108},[102,167439,167440],{"class":112}," inner\n",[102,167442,167443],{"class":104,"line":1203},[102,167444,2389],{"emptyLinePlaceholder":30},[102,167446,167447],{"class":104,"line":1209},[102,167448,2389],{"emptyLinePlaceholder":30},[102,167450,167451,167454,167456,167459,167461],{"class":104,"line":1300},[102,167452,167453],{"class":112},"add_10 ",[102,167455,158],{"class":108},[102,167457,167458],{"class":112}," outer(",[102,167460,559],{"class":161},[102,167462,119],{"class":112},[102,167464,167465,167467,167470,167472],{"class":104,"line":1306},[102,167466,30406],{"class":161},[102,167468,167469],{"class":112},"(add_10(",[102,167471,432],{"class":161},[102,167473,30488],{"class":112},[19,167475,167476],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167478,167480],{"id":167479},"_712-装饰器入门","7.12 装饰器入门",[19,167482,167483],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[93,167485,167487],{"className":30369,"code":167486,"language":30371,"meta":23,"style":23},"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",[99,167488,167489,167498,167507,167518,167523,167534,167538,167545,167549,167553,167558,167566,167576,167580,167584],{"__ignoreMap":23},[102,167490,167491,167493,167495],{"class":104,"line":105},[102,167492,31938],{"class":108},[102,167494,87182],{"class":1952},[102,167496,167497],{"class":112},"(func):\n",[102,167499,167500,167502,167505],{"class":104,"line":24},[102,167501,30792],{"class":108},[102,167503,167504],{"class":1952}," wrapper",[102,167506,31944],{"class":112},[102,167508,167509,167511,167513,167516],{"class":104,"line":1168},[102,167510,32442],{"class":161},[102,167512,113],{"class":112},[102,167514,167515],{"class":217},"\"函数开始执行\"",[102,167517,119],{"class":112},[102,167519,167520],{"class":104,"line":1183},[102,167521,167522],{"class":112},"        func()\n",[102,167524,167525,167527,167529,167532],{"class":104,"line":1189},[102,167526,32442],{"class":161},[102,167528,113],{"class":112},[102,167530,167531],{"class":217},"\"函数执行结束\"",[102,167533,119],{"class":112},[102,167535,167536],{"class":104,"line":1203},[102,167537,2389],{"emptyLinePlaceholder":30},[102,167539,167540,167542],{"class":104,"line":1209},[102,167541,4079],{"class":108},[102,167543,167544],{"class":112}," wrapper\n",[102,167546,167547],{"class":104,"line":1300},[102,167548,2389],{"emptyLinePlaceholder":30},[102,167550,167551],{"class":104,"line":1306},[102,167552,2389],{"emptyLinePlaceholder":30},[102,167554,167555],{"class":104,"line":1318},[102,167556,167557],{"class":1952},"@log\n",[102,167559,167560,167562,167564],{"class":104,"line":1601},[102,167561,31938],{"class":108},[102,167563,160978],{"class":1952},[102,167565,31944],{"class":112},[102,167567,167568,167570,167572,167574],{"class":104,"line":1606},[102,167569,31290],{"class":161},[102,167571,113],{"class":112},[102,167573,5834],{"class":217},[102,167575,119],{"class":112},[102,167577,167578],{"class":104,"line":1612},[102,167579,2389],{"emptyLinePlaceholder":30},[102,167581,167582],{"class":104,"line":1617},[102,167583,2389],{"emptyLinePlaceholder":30},[102,167585,167586],{"class":104,"line":1631},[102,167587,161013],{"class":112},[19,167589,158256],{},[93,167591,167593],{"className":30369,"code":167592,"language":30371,"meta":23,"style":23},"say_hello = log(say_hello)\n",[99,167594,167595],{"__ignoreMap":23},[102,167596,167597,167600,167602],{"class":104,"line":105},[102,167598,167599],{"class":112},"say_hello ",[102,167601,158],{"class":108},[102,167603,167604],{"class":112}," log(say_hello)\n",[19,167606,167607],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167609,167611],{"id":167610},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[93,167613,167615],{"className":30369,"code":167614,"language":30371,"meta":23,"style":23},"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",[99,167616,167617,167625,167642,167652,167671,167681,167688,167692,167698,167702,167706,167710,167718,167728,167732,167736],{"__ignoreMap":23},[102,167618,167619,167621,167623],{"class":104,"line":105},[102,167620,31938],{"class":108},[102,167622,87182],{"class":1952},[102,167624,167497],{"class":112},[102,167626,167627,167629,167631,167633,167635,167638,167640],{"class":104,"line":24},[102,167628,30792],{"class":108},[102,167630,167504],{"class":1952},[102,167632,113],{"class":112},[102,167634,568],{"class":108},[102,167636,167637],{"class":112},"args, ",[102,167639,10651],{"class":108},[102,167641,166648],{"class":112},[102,167643,167644,167646,167648,167650],{"class":104,"line":1168},[102,167645,32442],{"class":161},[102,167647,113],{"class":112},[102,167649,167515],{"class":217},[102,167651,119],{"class":112},[102,167653,167654,167657,167659,167662,167664,167666,167668],{"class":104,"line":1183},[102,167655,167656],{"class":112},"        result ",[102,167658,158],{"class":108},[102,167660,167661],{"class":112}," func(",[102,167663,568],{"class":108},[102,167665,167637],{"class":112},[102,167667,10651],{"class":108},[102,167669,167670],{"class":112},"kwargs)\n",[102,167672,167673,167675,167677,167679],{"class":104,"line":1189},[102,167674,32442],{"class":161},[102,167676,113],{"class":112},[102,167678,167531],{"class":217},[102,167680,119],{"class":112},[102,167682,167683,167685],{"class":104,"line":1203},[102,167684,14742],{"class":108},[102,167686,167687],{"class":112}," result\n",[102,167689,167690],{"class":104,"line":1209},[102,167691,2389],{"emptyLinePlaceholder":30},[102,167693,167694,167696],{"class":104,"line":1300},[102,167695,4079],{"class":108},[102,167697,167544],{"class":112},[102,167699,167700],{"class":104,"line":1306},[102,167701,2389],{"emptyLinePlaceholder":30},[102,167703,167704],{"class":104,"line":1318},[102,167705,2389],{"emptyLinePlaceholder":30},[102,167707,167708],{"class":104,"line":1601},[102,167709,167557],{"class":1952},[102,167711,167712,167714,167716],{"class":104,"line":1606},[102,167713,31938],{"class":108},[102,167715,5199],{"class":1952},[102,167717,151075],{"class":112},[102,167719,167720,167722,167724,167726],{"class":104,"line":1612},[102,167721,4079],{"class":108},[102,167723,10859],{"class":112},[102,167725,594],{"class":108},[102,167727,151086],{"class":112},[102,167729,167730],{"class":104,"line":1617},[102,167731,2389],{"emptyLinePlaceholder":30},[102,167733,167734],{"class":104,"line":1631},[102,167735,2389],{"emptyLinePlaceholder":30},[102,167737,167738,167740,167742,167744,167746,167748],{"class":104,"line":1636},[102,167739,30406],{"class":161},[102,167741,166582],{"class":112},[102,167743,559],{"class":161},[102,167745,12425],{"class":112},[102,167747,813],{"class":161},[102,167749,30488],{"class":112},[19,167751,167752,167753,101009,167755,167757],{},"这个写法使用 ",[99,167754,166514],{},[99,167756,166629],{}," 接收原函数的所有参数。",[14,167759,167761],{"id":167760},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167763,123283],{},[56,167765,167766,167769,167772],{},[59,167767,167768],{},"给定一组学生数据。",[59,167770,167771],{},"封装函数，根据传入规则筛选学生。",[59,167773,167774],{},"筛选及格、优秀、未成年学生。",[19,167776,10025],{},[93,167778,167780],{"className":30369,"code":167779,"language":30371,"meta":23,"style":23},"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",[99,167781,167782,167790,167818,167846,167874,167878,167882,167886,167896,167904,167914,167921,167926,167932,167936,167940,167964,167987,168010,168014,168021,168028],{"__ignoreMap":23},[102,167783,167784,167786,167788],{"class":104,"line":105},[102,167785,159698],{"class":112},[102,167787,158],{"class":108},[102,167789,55438],{"class":112},[102,167791,167792,167794,167796,167798,167800,167802,167804,167806,167808,167810,167812,167814,167816],{"class":104,"line":24},[102,167793,148367],{"class":112},[102,167795,62670],{"class":217},[102,167797,51428],{"class":112},[102,167799,149870],{"class":217},[102,167801,12425],{"class":112},[102,167803,69115],{"class":217},[102,167805,51428],{"class":112},[102,167807,763],{"class":161},[102,167809,12425],{"class":112},[102,167811,151454],{"class":217},[102,167813,51428],{"class":112},[102,167815,1102],{"class":161},[102,167817,4919],{"class":112},[102,167819,167820,167822,167824,167826,167828,167830,167832,167834,167836,167838,167840,167842,167844],{"class":104,"line":1168},[102,167821,148367],{"class":112},[102,167823,62670],{"class":217},[102,167825,51428],{"class":112},[102,167827,150918],{"class":217},[102,167829,12425],{"class":112},[102,167831,69115],{"class":217},[102,167833,51428],{"class":112},[102,167835,738],{"class":161},[102,167837,12425],{"class":112},[102,167839,151454],{"class":217},[102,167841,51428],{"class":112},[102,167843,924],{"class":161},[102,167845,4919],{"class":112},[102,167847,167848,167850,167852,167854,167856,167858,167860,167862,167864,167866,167868,167870,167872],{"class":104,"line":1183},[102,167849,148367],{"class":112},[102,167851,62670],{"class":217},[102,167853,51428],{"class":112},[102,167855,159713],{"class":217},[102,167857,12425],{"class":112},[102,167859,69115],{"class":217},[102,167861,51428],{"class":112},[102,167863,788],{"class":161},[102,167865,12425],{"class":112},[102,167867,151454],{"class":217},[102,167869,51428],{"class":112},[102,167871,995],{"class":161},[102,167873,4919],{"class":112},[102,167875,167876],{"class":104,"line":1189},[102,167877,33237],{"class":112},[102,167879,167880],{"class":104,"line":1203},[102,167881,2389],{"emptyLinePlaceholder":30},[102,167883,167884],{"class":104,"line":1209},[102,167885,2389],{"emptyLinePlaceholder":30},[102,167887,167888,167890,167893],{"class":104,"line":1300},[102,167889,31938],{"class":108},[102,167891,167892],{"class":1952}," filter_students",[102,167894,167895],{"class":112},"(students, condition):\n",[102,167897,167898,167900,167902],{"class":104,"line":1306},[102,167899,161205],{"class":112},[102,167901,158],{"class":108},[102,167903,51829],{"class":112},[102,167905,167906,167908,167910,167912],{"class":104,"line":1318},[102,167907,3190],{"class":108},[102,167909,152119],{"class":112},[102,167911,26034],{"class":108},[102,167913,152124],{"class":112},[102,167915,167916,167918],{"class":104,"line":1601},[102,167917,2486],{"class":108},[102,167919,167920],{"class":112}," condition(student):\n",[102,167922,167923],{"class":104,"line":1606},[102,167924,167925],{"class":112},"            result.append(student)\n",[102,167927,167928,167930],{"class":104,"line":1612},[102,167929,4079],{"class":108},[102,167931,167687],{"class":112},[102,167933,167934],{"class":104,"line":1617},[102,167935,2389],{"emptyLinePlaceholder":30},[102,167937,167938],{"class":104,"line":1631},[102,167939,2389],{"emptyLinePlaceholder":30},[102,167941,167942,167944,167946,167949,167951,167954,167956,167958,167960,167962],{"class":104,"line":1636},[102,167943,165683],{"class":112},[102,167945,158],{"class":108},[102,167947,167948],{"class":112}," filter_students(students, ",[102,167950,166868],{"class":108},[102,167952,167953],{"class":112}," s: s[",[102,167955,151454],{"class":217},[102,167957,4432],{"class":112},[102,167959,1699],{"class":108},[102,167961,157819],{"class":161},[102,167963,119],{"class":112},[102,167965,167966,167969,167971,167973,167975,167977,167979,167981,167983,167985],{"class":104,"line":1642},[102,167967,167968],{"class":112},"excellent ",[102,167970,158],{"class":108},[102,167972,167948],{"class":112},[102,167974,166868],{"class":108},[102,167976,167953],{"class":112},[102,167978,151454],{"class":217},[102,167980,4432],{"class":112},[102,167982,1699],{"class":108},[102,167984,157770],{"class":161},[102,167986,119],{"class":112},[102,167988,167989,167992,167994,167996,167998,168000,168002,168004,168006,168008],{"class":104,"line":1663},[102,167990,167991],{"class":112},"under_age ",[102,167993,158],{"class":108},[102,167995,167948],{"class":112},[102,167997,166868],{"class":108},[102,167999,167953],{"class":112},[102,168001,69115],{"class":217},[102,168003,4432],{"class":112},[102,168005,1023],{"class":108},[102,168007,156267],{"class":161},[102,168009,119],{"class":112},[102,168011,168012],{"class":104,"line":1668},[102,168013,2389],{"emptyLinePlaceholder":30},[102,168015,168016,168018],{"class":104,"line":1682},[102,168017,30406],{"class":161},[102,168019,168020],{"class":112},"(passed)\n",[102,168022,168023,168025],{"class":104,"line":1687},[102,168024,30406],{"class":161},[102,168026,168027],{"class":112},"(excellent)\n",[102,168029,168030,168032],{"class":104,"line":1716},[102,168031,30406],{"class":161},[102,168033,168034],{"class":112},"(under_age)\n",[14,168036,168038],{"id":168037},"_715-易错点","7.15 易错点",[56,168040,168041,168044,168052,168057,168068],{},[59,168042,168043],{},"默认参数不要写可变对象。",[59,168045,168046,168048,168049,168051],{},[99,168047,166514],{}," 是元组，",[99,168050,166629],{}," 是字典。",[59,168053,168054,168056],{},[99,168055,166868],{}," 只适合简单表达式。",[59,168058,168059,101009,168061,168063,168064,168067],{},[99,168060,74035],{},[99,168062,80042],{}," 的结果是迭代器，常用 ",[99,168065,168066],{},"list()"," 转换查看。",[59,168069,168070],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168072,168074],{"id":168073},"_716-本章练习","7.16 本章练习",[56,168076,168077,168084,168090,168095,168100],{},[59,168078,168079,168080,168083],{},"写函数 ",[99,168081,168082],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[59,168085,168079,168086,168089],{},[99,168087,168088],{},"print_user(**kwargs)","，输出用户所有字段。",[59,168091,104357,168092,168094],{},[99,168093,166868],{}," 对学生列表按年龄排序。",[59,168096,104357,168097,168099],{},[99,168098,80042],{}," 找出成绩不及格的学生。",[59,168101,168102],{},"写一个装饰器，统计函数执行前后的提示信息。",[5116,168104,168105],{},"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":23,"searchDepth":24,"depth":24,"links":168107},[168108,168109,168110,168111,168112,168113,168117,168118,168119,168120,168125,168126,168127,168128,168129,168130],{"id":165966,"depth":24,"text":165967},{"id":166080,"depth":24,"text":166081},{"id":166169,"depth":24,"text":166170},{"id":166231,"depth":24,"text":166232},{"id":166377,"depth":24,"text":166378},{"id":166504,"depth":24,"text":166505,"children":168114},[168115,168116],{"id":166508,"depth":1168,"text":166509},{"id":166623,"depth":1168,"text":166624},{"id":166704,"depth":24,"text":166705},{"id":166862,"depth":24,"text":166863},{"id":167030,"depth":24,"text":167031},{"id":167112,"depth":24,"text":167113,"children":168121},[168122,168123,168124],{"id":167116,"depth":1168,"text":167117},{"id":167187,"depth":1168,"text":167188},{"id":167264,"depth":1168,"text":167265},{"id":167389,"depth":24,"text":167390},{"id":167479,"depth":24,"text":167480},{"id":167610,"depth":24,"text":167611},{"id":167760,"depth":24,"text":167761},{"id":168037,"depth":24,"text":168038},{"id":168073,"depth":24,"text":168074},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165958,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168137,"title":168138,"body":168139,"description":27,"extension":28,"meta":170658,"navigation":30,"path":170659,"seo":170660,"stem":170661,"__hash__":170662},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168140,"toc":170633},[168141,168144,168148,168151,168154,168185,168189,168193,168196,168223,168227,168230,168281,168284,168299,168302,168337,168341,168343,168367,168370,168430,168434,168438,168441,168498,168501,168521,168525,168528,168591,168595,168598,168654,168661,168685,168689,168692,168755,168759,168764,168815,168818,168822,168827,168894,168897,168979,168983,168988,169039,169042,169046,169049,169052,169060,169063,169109,169112,169158,169162,169168,169212,169215,169261,169264,169304,169307,169368,169372,169375,169465,169468,169610,169613,169680,169684,169687,169690,169831,169834,169912,169915,170091,170095,170097,170108,170110,170309,170313,170557,170561,170595,170599,170630],[10,168142,168138],{"id":168143},"_8-文件操作",[14,168145,168147],{"id":168146},"_81-文件操作的意义","8.1 文件操作的意义",[19,168149,168150],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168152,168153],{},"常见文件类型：",[56,168155,168156,168162,168168,168174,168180],{},[59,168157,168158,168161],{},[99,168159,168160],{},".txt","：普通文本。",[59,168163,168164,168167],{},[99,168165,168166],{},".csv","：表格文本。",[59,168169,168170,168173],{},[99,168171,168172],{},".json","：结构化数据。",[59,168175,168176,168179],{},[99,168177,168178],{},".log","：日志文件。",[59,168181,168182,168184],{},[99,168183,146334],{},"：Python 源代码。",[14,168186,168188],{"id":168187},"_82-路径","8.2 路径",[73,168190,168192],{"id":168191},"_821-相对路径","8.2.1 相对路径",[19,168194,168195],{},"相对当前运行目录：",[93,168197,168199],{"className":30369,"code":168198,"language":30371,"meta":23,"style":23},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[99,168200,168201],{"__ignoreMap":23},[102,168202,168203,168205,168207,168209,168211,168213,168215,168217,168219,168221],{"class":104,"line":105},[102,168204,86906],{"class":161},[102,168206,113],{"class":112},[102,168208,146778],{"class":217},[102,168210,12425],{"class":112},[102,168212,146783],{"class":217},[102,168214,12425],{"class":112},[102,168216,146788],{"class":5206},[102,168218,158],{"class":108},[102,168220,146793],{"class":217},[102,168222,119],{"class":112},[73,168224,168226],{"id":168225},"_822-绝对路径","8.2.2 绝对路径",[19,168228,168229],{},"从根目录或盘符开始：",[93,168231,168233],{"className":30369,"code":168232,"language":30371,"meta":23,"style":23},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[99,168234,168235,168258],{"__ignoreMap":23},[102,168236,168237,168239,168241,168244,168246,168248,168250,168252,168254,168256],{"class":104,"line":105},[102,168238,86906],{"class":161},[102,168240,113],{"class":112},[102,168242,168243],{"class":217},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[102,168245,12425],{"class":112},[102,168247,146783],{"class":217},[102,168249,12425],{"class":112},[102,168251,146788],{"class":5206},[102,168253,158],{"class":108},[102,168255,146793],{"class":217},[102,168257,119],{"class":112},[102,168259,168260,168262,168264,168267,168269,168271,168273,168275,168277,168279],{"class":104,"line":24},[102,168261,86906],{"class":161},[102,168263,113],{"class":112},[102,168265,168266],{"class":217},"\"D:\u002Fdata\u002Fdata.txt\"",[102,168268,12425],{"class":112},[102,168270,146783],{"class":217},[102,168272,12425],{"class":112},[102,168274,146788],{"class":5206},[102,168276,158],{"class":108},[102,168278,146793],{"class":217},[102,168280,119],{"class":112},[19,168282,168283],{},"Windows 路径建议写成：",[93,168285,168287],{"className":30369,"code":168286,"language":30371,"meta":23,"style":23},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[99,168288,168289],{"__ignoreMap":23},[102,168290,168291,168294,168296],{"class":104,"line":105},[102,168292,168293],{"class":112},"path ",[102,168295,158],{"class":108},[102,168297,168298],{"class":217}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168300,168301],{},"或原始字符串：",[93,168303,168305],{"className":30369,"code":168304,"language":30371,"meta":23,"style":23},"path = r\"D:\\data\\data.txt\"\n",[99,168306,168307],{"__ignoreMap":23},[102,168308,168309,168311,168313,168315,168317,168320,168323,168326,168328,168330,168332,168335],{"class":104,"line":105},[102,168310,168293],{"class":112},[102,168312,158],{"class":108},[102,168314,17111],{"class":108},[102,168316,364],{"class":217},[102,168318,168319],{"class":47968},"D:",[102,168321,168322],{"class":161},"\\d",[102,168324,168325],{"class":47968},"ata",[102,168327,168322],{"class":161},[102,168329,168325],{"class":47968},[102,168331,671],{"class":161},[102,168333,168334],{"class":47968},"txt",[102,168336,25124],{"class":217},[14,168338,168340],{"id":168339},"_83-open函数","8.3 open函数",[19,168342,5171],{},[93,168344,168346],{"className":30369,"code":168345,"language":30371,"meta":23,"style":23},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[99,168347,168348],{"__ignoreMap":23},[102,168349,168350,168352,168354,168356,168359,168361,168363,168365],{"class":104,"line":105},[102,168351,45345],{"class":5206},[102,168353,13554],{"class":108},[102,168355,146773],{"class":161},[102,168357,168358],{"class":112},"(文件路径, 打开模式, ",[102,168360,146788],{"class":5206},[102,168362,158],{"class":108},[102,168364,146793],{"class":217},[102,168366,119],{"class":112},[19,168368,168369],{},"常见模式：",[250,168371,168372,168381],{},[253,168373,168374],{},[256,168375,168376,168379],{},[259,168377,168378],{},"模式",[259,168380,25860],{},[297,168382,168383,168392,168401,168410,168420],{},[256,168384,168385,168389],{},[302,168386,168387],{},[99,168388,783],{},[302,168390,168391],{},"只读，文件不存在会报错",[256,168393,168394,168398],{},[302,168395,168396],{},[99,168397,908],{},[302,168399,168400],{},"只写，文件不存在会创建，存在会清空",[256,168402,168403,168407],{},[302,168404,168405],{},[99,168406,351],{},[302,168408,168409],{},"追加，文件不存在会创建",[256,168411,168412,168417],{},[302,168413,168414],{},[99,168415,168416],{},"rb",[302,168418,168419],{},"二进制只读",[256,168421,168422,168427],{},[302,168423,168424],{},[99,168425,168426],{},"wb",[302,168428,168429],{},"二进制只写",[14,168431,168433],{"id":168432},"_84-读取文件","8.4 读取文件",[73,168435,168437],{"id":168436},"_841-read","8.4.1 read",[19,168439,168440],{},"一次读取全部内容：",[93,168442,168444],{"className":30369,"code":168443,"language":30371,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[99,168445,168446,168472,168484,168491],{"__ignoreMap":23},[102,168447,168448,168450,168452,168454,168456,168458,168460,168462,168464,168466,168468,168470],{"class":104,"line":105},[102,168449,45345],{"class":5206},[102,168451,13554],{"class":108},[102,168453,146773],{"class":161},[102,168455,113],{"class":112},[102,168457,146778],{"class":217},[102,168459,12425],{"class":112},[102,168461,146783],{"class":217},[102,168463,12425],{"class":112},[102,168465,146788],{"class":5206},[102,168467,158],{"class":108},[102,168469,146793],{"class":217},[102,168471,119],{"class":112},[102,168473,168474,168477,168479,168481],{"class":104,"line":24},[102,168475,168476],{"class":112},"content ",[102,168478,158],{"class":108},[102,168480,148135],{"class":5206},[102,168482,168483],{"class":112},".read()\n",[102,168485,168486,168488],{"class":104,"line":1168},[102,168487,30406],{"class":161},[102,168489,168490],{"class":112},"(content)\n",[102,168492,168493,168495],{"class":104,"line":1183},[102,168494,45345],{"class":5206},[102,168496,168497],{"class":112},".close()\n",[19,168499,168500],{},"可以指定读取字符数：",[93,168502,168504],{"className":30369,"code":168503,"language":30371,"meta":23,"style":23},"content = file.read(10)\n",[99,168505,168506],{"__ignoreMap":23},[102,168507,168508,168510,168512,168514,168517,168519],{"class":104,"line":105},[102,168509,168476],{"class":112},[102,168511,158],{"class":108},[102,168513,148135],{"class":5206},[102,168515,168516],{"class":112},".read(",[102,168518,559],{"class":161},[102,168520,119],{"class":112},[73,168522,168524],{"id":168523},"_842-readline","8.4.2 readline",[19,168526,168527],{},"一次读取一行：",[93,168529,168531],{"className":30369,"code":168530,"language":30371,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[99,168532,168533,168559,168563,168574,168581,168585],{"__ignoreMap":23},[102,168534,168535,168537,168539,168541,168543,168545,168547,168549,168551,168553,168555,168557],{"class":104,"line":105},[102,168536,45345],{"class":5206},[102,168538,13554],{"class":108},[102,168540,146773],{"class":161},[102,168542,113],{"class":112},[102,168544,146778],{"class":217},[102,168546,12425],{"class":112},[102,168548,146783],{"class":217},[102,168550,12425],{"class":112},[102,168552,146788],{"class":5206},[102,168554,158],{"class":108},[102,168556,146793],{"class":217},[102,168558,119],{"class":112},[102,168560,168561],{"class":104,"line":24},[102,168562,2389],{"emptyLinePlaceholder":30},[102,168564,168565,168567,168569,168571],{"class":104,"line":1168},[102,168566,147234],{"class":112},[102,168568,158],{"class":108},[102,168570,148135],{"class":5206},[102,168572,168573],{"class":112},".readline()\n",[102,168575,168576,168578],{"class":104,"line":1183},[102,168577,30406],{"class":161},[102,168579,168580],{"class":112},"(line)\n",[102,168582,168583],{"class":104,"line":1189},[102,168584,2389],{"emptyLinePlaceholder":30},[102,168586,168587,168589],{"class":104,"line":1203},[102,168588,45345],{"class":5206},[102,168590,168497],{"class":112},[73,168592,168594],{"id":168593},"_843-readlines","8.4.3 readlines",[19,168596,168597],{},"读取所有行，返回列表：",[93,168599,168601],{"className":30369,"code":168600,"language":30371,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[99,168602,168603,168629,168641,168648],{"__ignoreMap":23},[102,168604,168605,168607,168609,168611,168613,168615,168617,168619,168621,168623,168625,168627],{"class":104,"line":105},[102,168606,45345],{"class":5206},[102,168608,13554],{"class":108},[102,168610,146773],{"class":161},[102,168612,113],{"class":112},[102,168614,146778],{"class":217},[102,168616,12425],{"class":112},[102,168618,146783],{"class":217},[102,168620,12425],{"class":112},[102,168622,146788],{"class":5206},[102,168624,158],{"class":108},[102,168626,146793],{"class":217},[102,168628,119],{"class":112},[102,168630,168631,168634,168636,168638],{"class":104,"line":24},[102,168632,168633],{"class":112},"lines ",[102,168635,158],{"class":108},[102,168637,148135],{"class":5206},[102,168639,168640],{"class":112},".readlines()\n",[102,168642,168643,168645],{"class":104,"line":1168},[102,168644,30406],{"class":161},[102,168646,168647],{"class":112},"(lines)\n",[102,168649,168650,168652],{"class":104,"line":1183},[102,168651,45345],{"class":5206},[102,168653,168497],{"class":112},[19,168655,168656,168657,168660],{},"每一行通常带有换行符，可以用 ",[99,168658,168659],{},"strip()"," 去掉：",[93,168662,168664],{"className":30369,"code":168663,"language":30371,"meta":23,"style":23},"for line in lines:\n    print(line.strip())\n",[99,168665,168666,168678],{"__ignoreMap":23},[102,168667,168668,168670,168673,168675],{"class":104,"line":105},[102,168669,3014],{"class":108},[102,168671,168672],{"class":112}," line ",[102,168674,26034],{"class":108},[102,168676,168677],{"class":112}," lines:\n",[102,168679,168680,168682],{"class":104,"line":24},[102,168681,31290],{"class":161},[102,168683,168684],{"class":112},"(line.strip())\n",[73,168686,168688],{"id":168687},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168690,168691],{},"推荐读取大文件时使用：",[93,168693,168695],{"className":30369,"code":168694,"language":30371,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[99,168696,168697,168723,168727,168739,168745,168749],{"__ignoreMap":23},[102,168698,168699,168701,168703,168705,168707,168709,168711,168713,168715,168717,168719,168721],{"class":104,"line":105},[102,168700,45345],{"class":5206},[102,168702,13554],{"class":108},[102,168704,146773],{"class":161},[102,168706,113],{"class":112},[102,168708,146778],{"class":217},[102,168710,12425],{"class":112},[102,168712,146783],{"class":217},[102,168714,12425],{"class":112},[102,168716,146788],{"class":5206},[102,168718,158],{"class":108},[102,168720,146793],{"class":217},[102,168722,119],{"class":112},[102,168724,168725],{"class":104,"line":24},[102,168726,2389],{"emptyLinePlaceholder":30},[102,168728,168729,168731,168733,168735,168737],{"class":104,"line":1168},[102,168730,3014],{"class":108},[102,168732,168672],{"class":112},[102,168734,26034],{"class":108},[102,168736,148135],{"class":5206},[102,168738,3728],{"class":112},[102,168740,168741,168743],{"class":104,"line":1183},[102,168742,31290],{"class":161},[102,168744,168684],{"class":112},[102,168746,168747],{"class":104,"line":1189},[102,168748,2389],{"emptyLinePlaceholder":30},[102,168750,168751,168753],{"class":104,"line":1203},[102,168752,45345],{"class":5206},[102,168754,168497],{"class":112},[14,168756,168758],{"id":168757},"_85-with语句","8.5 with语句",[19,168760,168761,168763],{},[99,168762,107824],{}," 会自动关闭文件，推荐使用。",[93,168765,168767],{"className":30369,"code":168766,"language":30371,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[99,168768,168769,168799,168809],{"__ignoreMap":23},[102,168770,168771,168773,168775,168777,168779,168781,168783,168785,168787,168789,168791,168793,168795,168797],{"class":104,"line":105},[102,168772,107824],{"class":108},[102,168774,146773],{"class":161},[102,168776,113],{"class":112},[102,168778,146778],{"class":217},[102,168780,12425],{"class":112},[102,168782,146783],{"class":217},[102,168784,12425],{"class":112},[102,168786,146788],{"class":5206},[102,168788,158],{"class":108},[102,168790,146793],{"class":217},[102,168792,13704],{"class":112},[102,168794,31374],{"class":108},[102,168796,148135],{"class":5206},[102,168798,3728],{"class":112},[102,168800,168801,168803,168805,168807],{"class":104,"line":24},[102,168802,146805],{"class":112},[102,168804,158],{"class":108},[102,168806,148135],{"class":5206},[102,168808,168483],{"class":112},[102,168810,168811,168813],{"class":104,"line":1168},[102,168812,31290],{"class":161},[102,168814,168490],{"class":112},[19,168816,168817],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168819,168821],{"id":168820},"_86-写入文件","8.6 写入文件",[19,168823,168824,168826],{},[99,168825,908],{}," 模式会清空原文件。",[93,168828,168830],{"className":30369,"code":168829,"language":30371,"meta":23,"style":23},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[99,168831,168832,168862,168879],{"__ignoreMap":23},[102,168833,168834,168836,168838,168840,168842,168844,168846,168848,168850,168852,168854,168856,168858,168860],{"class":104,"line":105},[102,168835,107824],{"class":108},[102,168837,146773],{"class":161},[102,168839,113],{"class":112},[102,168841,146778],{"class":217},[102,168843,12425],{"class":112},[102,168845,151958],{"class":217},[102,168847,12425],{"class":112},[102,168849,146788],{"class":5206},[102,168851,158],{"class":108},[102,168853,146793],{"class":217},[102,168855,13704],{"class":112},[102,168857,31374],{"class":108},[102,168859,148135],{"class":5206},[102,168861,3728],{"class":112},[102,168863,168864,168867,168870,168873,168875,168877],{"class":104,"line":24},[102,168865,168866],{"class":5206},"    file",[102,168868,168869],{"class":112},".write(",[102,168871,168872],{"class":217},"\"hello",[102,168874,156507],{"class":161},[102,168876,364],{"class":217},[102,168878,119],{"class":112},[102,168880,168881,168883,168885,168888,168890,168892],{"class":104,"line":1168},[102,168882,168866],{"class":5206},[102,168884,168869],{"class":112},[102,168886,168887],{"class":217},"\"python",[102,168889,156507],{"class":161},[102,168891,364],{"class":217},[102,168893,119],{"class":112},[19,168895,168896],{},"写入多行：",[93,168898,168900],{"className":30369,"code":168899,"language":30371,"meta":23,"style":23},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[99,168901,168902,168937,168941,168972],{"__ignoreMap":23},[102,168903,168904,168906,168908,168910,168913,168915,168917,168919,168922,168924,168926,168928,168931,168933,168935],{"class":104,"line":105},[102,168905,168633],{"class":112},[102,168907,158],{"class":108},[102,168909,52217],{"class":112},[102,168911,168912],{"class":217},"\"小明,18",[102,168914,156507],{"class":161},[102,168916,364],{"class":217},[102,168918,12425],{"class":112},[102,168920,168921],{"class":217},"\"小红,17",[102,168923,156507],{"class":161},[102,168925,364],{"class":217},[102,168927,12425],{"class":112},[102,168929,168930],{"class":217},"\"小刚,19",[102,168932,156507],{"class":161},[102,168934,364],{"class":217},[102,168936,33237],{"class":112},[102,168938,168939],{"class":104,"line":24},[102,168940,2389],{"emptyLinePlaceholder":30},[102,168942,168943,168945,168947,168949,168952,168954,168956,168958,168960,168962,168964,168966,168968,168970],{"class":104,"line":1168},[102,168944,107824],{"class":108},[102,168946,146773],{"class":161},[102,168948,113],{"class":112},[102,168950,168951],{"class":217},"\"students.txt\"",[102,168953,12425],{"class":112},[102,168955,151958],{"class":217},[102,168957,12425],{"class":112},[102,168959,146788],{"class":5206},[102,168961,158],{"class":108},[102,168963,146793],{"class":217},[102,168965,13704],{"class":112},[102,168967,31374],{"class":108},[102,168969,148135],{"class":5206},[102,168971,3728],{"class":112},[102,168973,168974,168976],{"class":104,"line":1183},[102,168975,168866],{"class":5206},[102,168977,168978],{"class":112},".writelines(lines)\n",[14,168980,168982],{"id":168981},"_87-追加文件","8.7 追加文件",[19,168984,168985,168987],{},[99,168986,351],{}," 模式不会清空原内容，而是在末尾追加。",[93,168989,168991],{"className":30369,"code":168990,"language":30371,"meta":23,"style":23},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[99,168992,168993,169024],{"__ignoreMap":23},[102,168994,168995,168997,168999,169001,169004,169006,169008,169010,169012,169014,169016,169018,169020,169022],{"class":104,"line":105},[102,168996,107824],{"class":108},[102,168998,146773],{"class":161},[102,169000,113],{"class":112},[102,169002,169003],{"class":217},"\"log.txt\"",[102,169005,12425],{"class":112},[102,169007,165307],{"class":217},[102,169009,12425],{"class":112},[102,169011,146788],{"class":5206},[102,169013,158],{"class":108},[102,169015,146793],{"class":217},[102,169017,13704],{"class":112},[102,169019,31374],{"class":108},[102,169021,148135],{"class":5206},[102,169023,3728],{"class":112},[102,169025,169026,169028,169030,169033,169035,169037],{"class":104,"line":24},[102,169027,168866],{"class":5206},[102,169029,168869],{"class":112},[102,169031,169032],{"class":217},"\"程序启动",[102,169034,156507],{"class":161},[102,169036,364],{"class":217},[102,169038,119],{"class":112},[19,169040,169041],{},"日志类文件常用追加模式。",[14,169043,169045],{"id":169044},"_88-文件编码","8.8 文件编码",[19,169047,169048],{},"编码决定文字如何保存为字节。",[19,169050,169051],{},"常见编码：",[56,169053,169054,169057],{},[59,169055,169056],{},"UTF-8：推荐。",[59,169058,169059],{},"GBK：部分 Windows 中文文件常见。",[19,169061,169062],{},"读取文件乱码时，可以尝试：",[93,169064,169066],{"className":30369,"code":169065,"language":30371,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[99,169067,169068,169099],{"__ignoreMap":23},[102,169069,169070,169072,169074,169076,169078,169080,169082,169084,169086,169088,169091,169093,169095,169097],{"class":104,"line":105},[102,169071,107824],{"class":108},[102,169073,146773],{"class":161},[102,169075,113],{"class":112},[102,169077,146778],{"class":217},[102,169079,12425],{"class":112},[102,169081,146783],{"class":217},[102,169083,12425],{"class":112},[102,169085,146788],{"class":5206},[102,169087,158],{"class":108},[102,169089,169090],{"class":217},"\"gbk\"",[102,169092,13704],{"class":112},[102,169094,31374],{"class":108},[102,169096,148135],{"class":5206},[102,169098,3728],{"class":112},[102,169100,169101,169103,169105,169107],{"class":104,"line":24},[102,169102,146805],{"class":112},[102,169104,158],{"class":108},[102,169106,148135],{"class":5206},[102,169108,168483],{"class":112},[19,169110,169111],{},"写文件时建议统一 UTF-8：",[93,169113,169115],{"className":30369,"code":169114,"language":30371,"meta":23,"style":23},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[99,169116,169117,169147],{"__ignoreMap":23},[102,169118,169119,169121,169123,169125,169127,169129,169131,169133,169135,169137,169139,169141,169143,169145],{"class":104,"line":105},[102,169120,107824],{"class":108},[102,169122,146773],{"class":161},[102,169124,113],{"class":112},[102,169126,146778],{"class":217},[102,169128,12425],{"class":112},[102,169130,151958],{"class":217},[102,169132,12425],{"class":112},[102,169134,146788],{"class":5206},[102,169136,158],{"class":108},[102,169138,146793],{"class":217},[102,169140,13704],{"class":112},[102,169142,31374],{"class":108},[102,169144,148135],{"class":5206},[102,169146,3728],{"class":112},[102,169148,169149,169151,169153,169156],{"class":104,"line":24},[102,169150,168866],{"class":5206},[102,169152,168869],{"class":112},[102,169154,169155],{"class":217},"\"中文内容\"",[102,169157,119],{"class":112},[14,169159,169161],{"id":169160},"_89-pathlib","8.9 pathlib",[19,169163,169164,169167],{},[99,169165,169166],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[93,169169,169171],{"className":30369,"code":169170,"language":30371,"meta":23,"style":23},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[99,169172,169173,169183,169187,169205],{"__ignoreMap":23},[102,169174,169175,169177,169179,169181],{"class":104,"line":105},[102,169176,30728],{"class":108},[102,169178,108302],{"class":112},[102,169180,30383],{"class":108},[102,169182,108307],{"class":112},[102,169184,169185],{"class":104,"line":24},[102,169186,2389],{"emptyLinePlaceholder":30},[102,169188,169189,169191,169193,169195,169198,169200,169202],{"class":104,"line":1168},[102,169190,168293],{"class":112},[102,169192,158],{"class":108},[102,169194,108536],{"class":112},[102,169196,169197],{"class":217},"\"data\"",[102,169199,13704],{"class":112},[102,169201,697],{"class":108},[102,169203,169204],{"class":217}," \"students.txt\"\n",[102,169206,169207,169209],{"class":104,"line":1183},[102,169208,30406],{"class":161},[102,169210,169211],{"class":112},"(path)\n",[19,169213,169214],{},"创建目录：",[93,169216,169218],{"className":30369,"code":169217,"language":30371,"meta":23,"style":23},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[99,169219,169220,169230,169234,169247],{"__ignoreMap":23},[102,169221,169222,169224,169226,169228],{"class":104,"line":105},[102,169223,30728],{"class":108},[102,169225,108302],{"class":112},[102,169227,30383],{"class":108},[102,169229,108307],{"class":112},[102,169231,169232],{"class":104,"line":24},[102,169233,2389],{"emptyLinePlaceholder":30},[102,169235,169236,169239,169241,169243,169245],{"class":104,"line":1168},[102,169237,169238],{"class":112},"data_dir ",[102,169240,158],{"class":108},[102,169242,108536],{"class":112},[102,169244,169197],{"class":217},[102,169246,119],{"class":112},[102,169248,169249,169252,169255,169257,169259],{"class":104,"line":1183},[102,169250,169251],{"class":112},"data_dir.mkdir(",[102,169253,169254],{"class":5206},"exist_ok",[102,169256,158],{"class":108},[102,169258,31467],{"class":161},[102,169260,119],{"class":112},[19,169262,169263],{},"判断文件是否存在：",[93,169265,169267],{"className":30369,"code":169266,"language":30371,"meta":23,"style":23},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[99,169268,169269,169282,169286,169293],{"__ignoreMap":23},[102,169270,169271,169273,169275,169277,169280],{"class":104,"line":105},[102,169272,168293],{"class":112},[102,169274,158],{"class":108},[102,169276,108536],{"class":112},[102,169278,169279],{"class":217},"\"data\u002Fstudents.txt\"",[102,169281,119],{"class":112},[102,169283,169284],{"class":104,"line":24},[102,169285,2389],{"emptyLinePlaceholder":30},[102,169287,169288,169290],{"class":104,"line":1168},[102,169289,1520],{"class":108},[102,169291,169292],{"class":112}," path.exists():\n",[102,169294,169295,169297,169299,169302],{"class":104,"line":1183},[102,169296,31290],{"class":161},[102,169298,113],{"class":112},[102,169300,169301],{"class":217},"\"文件存在\"",[102,169303,119],{"class":112},[19,169305,169306],{},"读写文本：",[93,169308,169310],{"className":30369,"code":169309,"language":30371,"meta":23,"style":23},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[99,169311,169312,169324,169328,169345,169362],{"__ignoreMap":23},[102,169313,169314,169316,169318,169320,169322],{"class":104,"line":105},[102,169315,168293],{"class":112},[102,169317,158],{"class":108},[102,169319,108536],{"class":112},[102,169321,146778],{"class":217},[102,169323,119],{"class":112},[102,169325,169326],{"class":104,"line":24},[102,169327,2389],{"emptyLinePlaceholder":30},[102,169329,169330,169333,169335,169337,169339,169341,169343],{"class":104,"line":1168},[102,169331,169332],{"class":112},"path.write_text(",[102,169334,145858],{"class":217},[102,169336,12425],{"class":112},[102,169338,146788],{"class":5206},[102,169340,158],{"class":108},[102,169342,146793],{"class":217},[102,169344,119],{"class":112},[102,169346,169347,169349,169351,169354,169356,169358,169360],{"class":104,"line":1183},[102,169348,168476],{"class":112},[102,169350,158],{"class":108},[102,169352,169353],{"class":112}," path.read_text(",[102,169355,146788],{"class":5206},[102,169357,158],{"class":108},[102,169359,146793],{"class":217},[102,169361,119],{"class":112},[102,169363,169364,169366],{"class":104,"line":1189},[102,169365,30406],{"class":161},[102,169367,168490],{"class":112},[14,169369,169371],{"id":169370},"_810-json文件","8.10 JSON文件",[19,169373,169374],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[93,169376,169378],{"className":30369,"code":169377,"language":30371,"meta":23,"style":23},"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",[99,169379,169380,169386,169390,169398,169408,169418,169426,169430,169434,169459],{"__ignoreMap":23},[102,169381,169382,169384],{"class":104,"line":105},[102,169383,30383],{"class":108},[102,169385,147073],{"class":112},[102,169387,169388],{"class":104,"line":24},[102,169389,2389],{"emptyLinePlaceholder":30},[102,169391,169392,169394,169396],{"class":104,"line":1168},[102,169393,149463],{"class":112},[102,169395,158],{"class":108},[102,169397,15562],{"class":112},[102,169399,169400,169402,169404,169406],{"class":104,"line":1183},[102,169401,147002],{"class":217},[102,169403,51428],{"class":112},[102,169405,149870],{"class":217},[102,169407,31457],{"class":112},[102,169409,169410,169412,169414,169416],{"class":104,"line":1189},[102,169411,164519],{"class":217},[102,169413,51428],{"class":112},[102,169415,763],{"class":161},[102,169417,31457],{"class":112},[102,169419,169420,169422,169424],{"class":104,"line":1203},[102,169421,164530],{"class":217},[102,169423,51428],{"class":112},[102,169425,164535],{"class":161},[102,169427,169428],{"class":104,"line":1209},[102,169429,1554],{"class":112},[102,169431,169432],{"class":104,"line":1300},[102,169433,2389],{"emptyLinePlaceholder":30},[102,169435,169436,169438,169440,169443,169445,169447,169449,169451,169453,169455,169457],{"class":104,"line":1306},[102,169437,156426],{"class":112},[102,169439,158],{"class":108},[102,169441,169442],{"class":112}," json.dumps(student, ",[102,169444,147119],{"class":5206},[102,169446,158],{"class":108},[102,169448,33978],{"class":161},[102,169450,12425],{"class":112},[102,169452,151994],{"class":5206},[102,169454,158],{"class":108},[102,169456,190],{"class":161},[102,169458,119],{"class":112},[102,169460,169461,169463],{"class":104,"line":1318},[102,169462,30406],{"class":161},[102,169464,164053],{"class":112},[19,169466,169467],{},"写入 JSON 文件：",[93,169469,169471],{"className":30369,"code":169470,"language":30371,"meta":23,"style":23},"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",[99,169472,169473,169479,169483,169491,169519,169547,169551,169555,169585],{"__ignoreMap":23},[102,169474,169475,169477],{"class":104,"line":105},[102,169476,30383],{"class":108},[102,169478,147073],{"class":112},[102,169480,169481],{"class":104,"line":24},[102,169482,2389],{"emptyLinePlaceholder":30},[102,169484,169485,169487,169489],{"class":104,"line":1168},[102,169486,159698],{"class":112},[102,169488,158],{"class":108},[102,169490,55438],{"class":112},[102,169492,169493,169495,169497,169499,169501,169503,169505,169507,169509,169511,169513,169515,169517],{"class":104,"line":1183},[102,169494,148367],{"class":112},[102,169496,62670],{"class":217},[102,169498,51428],{"class":112},[102,169500,149870],{"class":217},[102,169502,12425],{"class":112},[102,169504,69115],{"class":217},[102,169506,51428],{"class":112},[102,169508,763],{"class":161},[102,169510,12425],{"class":112},[102,169512,151454],{"class":217},[102,169514,51428],{"class":112},[102,169516,1102],{"class":161},[102,169518,4919],{"class":112},[102,169520,169521,169523,169525,169527,169529,169531,169533,169535,169537,169539,169541,169543,169545],{"class":104,"line":1189},[102,169522,148367],{"class":112},[102,169524,62670],{"class":217},[102,169526,51428],{"class":112},[102,169528,150918],{"class":217},[102,169530,12425],{"class":112},[102,169532,69115],{"class":217},[102,169534,51428],{"class":112},[102,169536,738],{"class":161},[102,169538,12425],{"class":112},[102,169540,151454],{"class":217},[102,169542,51428],{"class":112},[102,169544,924],{"class":161},[102,169546,4919],{"class":112},[102,169548,169549],{"class":104,"line":1203},[102,169550,33237],{"class":112},[102,169552,169553],{"class":104,"line":1209},[102,169554,2389],{"emptyLinePlaceholder":30},[102,169556,169557,169559,169561,169563,169565,169567,169569,169571,169573,169575,169577,169579,169581,169583],{"class":104,"line":1300},[102,169558,107824],{"class":108},[102,169560,146773],{"class":161},[102,169562,113],{"class":112},[102,169564,151813],{"class":217},[102,169566,12425],{"class":112},[102,169568,151958],{"class":217},[102,169570,12425],{"class":112},[102,169572,146788],{"class":5206},[102,169574,158],{"class":108},[102,169576,146793],{"class":217},[102,169578,13704],{"class":112},[102,169580,31374],{"class":108},[102,169582,148135],{"class":5206},[102,169584,3728],{"class":112},[102,169586,169587,169590,169592,169594,169596,169598,169600,169602,169604,169606,169608],{"class":104,"line":1306},[102,169588,169589],{"class":112},"    json.dump(students, ",[102,169591,45345],{"class":5206},[102,169593,12425],{"class":112},[102,169595,147119],{"class":5206},[102,169597,158],{"class":108},[102,169599,33978],{"class":161},[102,169601,12425],{"class":112},[102,169603,151994],{"class":5206},[102,169605,158],{"class":108},[102,169607,190],{"class":161},[102,169609,119],{"class":112},[19,169611,169612],{},"读取 JSON 文件：",[93,169614,169616],{"className":30369,"code":169615,"language":30371,"meta":23,"style":23},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[99,169617,169618,169624,169628,169658,169670,169674],{"__ignoreMap":23},[102,169619,169620,169622],{"class":104,"line":105},[102,169621,30383],{"class":108},[102,169623,147073],{"class":112},[102,169625,169626],{"class":104,"line":24},[102,169627,2389],{"emptyLinePlaceholder":30},[102,169629,169630,169632,169634,169636,169638,169640,169642,169644,169646,169648,169650,169652,169654,169656],{"class":104,"line":1168},[102,169631,107824],{"class":108},[102,169633,146773],{"class":161},[102,169635,113],{"class":112},[102,169637,151813],{"class":217},[102,169639,12425],{"class":112},[102,169641,146783],{"class":217},[102,169643,12425],{"class":112},[102,169645,146788],{"class":5206},[102,169647,158],{"class":108},[102,169649,146793],{"class":217},[102,169651,13704],{"class":112},[102,169653,31374],{"class":108},[102,169655,148135],{"class":5206},[102,169657,3728],{"class":112},[102,169659,169660,169662,169664,169666,169668],{"class":104,"line":1183},[102,169661,153019],{"class":112},[102,169663,158],{"class":108},[102,169665,148146],{"class":112},[102,169667,45345],{"class":5206},[102,169669,119],{"class":112},[102,169671,169672],{"class":104,"line":1189},[102,169673,2389],{"emptyLinePlaceholder":30},[102,169675,169676,169678],{"class":104,"line":1203},[102,169677,30406],{"class":161},[102,169679,164977],{"class":112},[14,169681,169683],{"id":169682},"_811-csv文件","8.11 CSV文件",[19,169685,169686],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169688,169689],{},"写入 CSV：",[93,169691,169693],{"className":30369,"code":169692,"language":30371,"meta":23,"style":23},"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",[99,169694,169695,169702,169706,169714,169732,169748,169764,169768,169772,169812,169826],{"__ignoreMap":23},[102,169696,169697,169699],{"class":104,"line":105},[102,169698,30383],{"class":108},[102,169700,169701],{"class":112}," csv\n",[102,169703,169704],{"class":104,"line":24},[102,169705,2389],{"emptyLinePlaceholder":30},[102,169707,169708,169710,169712],{"class":104,"line":1168},[102,169709,159698],{"class":112},[102,169711,158],{"class":108},[102,169713,55438],{"class":112},[102,169715,169716,169719,169721,169723,169725,169727,169730],{"class":104,"line":1183},[102,169717,169718],{"class":112},"    [",[102,169720,73090],{"class":217},[102,169722,12425],{"class":112},[102,169724,73123],{"class":217},[102,169726,12425],{"class":112},[102,169728,169729],{"class":217},"\"成绩\"",[102,169731,87827],{"class":112},[102,169733,169734,169736,169738,169740,169742,169744,169746],{"class":104,"line":1189},[102,169735,169718],{"class":112},[102,169737,149870],{"class":217},[102,169739,12425],{"class":112},[102,169741,763],{"class":161},[102,169743,12425],{"class":112},[102,169745,1102],{"class":161},[102,169747,87827],{"class":112},[102,169749,169750,169752,169754,169756,169758,169760,169762],{"class":104,"line":1203},[102,169751,169718],{"class":112},[102,169753,150918],{"class":217},[102,169755,12425],{"class":112},[102,169757,738],{"class":161},[102,169759,12425],{"class":112},[102,169761,924],{"class":161},[102,169763,87827],{"class":112},[102,169765,169766],{"class":104,"line":1209},[102,169767,33237],{"class":112},[102,169769,169770],{"class":104,"line":1300},[102,169771,2389],{"emptyLinePlaceholder":30},[102,169773,169774,169776,169778,169780,169783,169785,169787,169789,169791,169793,169795,169797,169800,169802,169804,169806,169808,169810],{"class":104,"line":1306},[102,169775,107824],{"class":108},[102,169777,146773],{"class":161},[102,169779,113],{"class":112},[102,169781,169782],{"class":217},"\"students.csv\"",[102,169784,12425],{"class":112},[102,169786,151958],{"class":217},[102,169788,12425],{"class":112},[102,169790,146788],{"class":5206},[102,169792,158],{"class":108},[102,169794,146793],{"class":217},[102,169796,12425],{"class":112},[102,169798,169799],{"class":5206},"newline",[102,169801,158],{"class":108},[102,169803,7642],{"class":217},[102,169805,13704],{"class":112},[102,169807,31374],{"class":108},[102,169809,148135],{"class":5206},[102,169811,3728],{"class":112},[102,169813,169814,169817,169819,169822,169824],{"class":104,"line":1318},[102,169815,169816],{"class":112},"    writer ",[102,169818,158],{"class":108},[102,169820,169821],{"class":112}," csv.writer(",[102,169823,45345],{"class":5206},[102,169825,119],{"class":112},[102,169827,169828],{"class":104,"line":1601},[102,169829,169830],{"class":112},"    writer.writerows(students)\n",[19,169832,169833],{},"读取 CSV：",[93,169835,169837],{"className":30369,"code":169836,"language":30371,"meta":23,"style":23},"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",[99,169838,169839,169845,169849,169879,169893,169905],{"__ignoreMap":23},[102,169840,169841,169843],{"class":104,"line":105},[102,169842,30383],{"class":108},[102,169844,169701],{"class":112},[102,169846,169847],{"class":104,"line":24},[102,169848,2389],{"emptyLinePlaceholder":30},[102,169850,169851,169853,169855,169857,169859,169861,169863,169865,169867,169869,169871,169873,169875,169877],{"class":104,"line":1168},[102,169852,107824],{"class":108},[102,169854,146773],{"class":161},[102,169856,113],{"class":112},[102,169858,169782],{"class":217},[102,169860,12425],{"class":112},[102,169862,146783],{"class":217},[102,169864,12425],{"class":112},[102,169866,146788],{"class":5206},[102,169868,158],{"class":108},[102,169870,146793],{"class":217},[102,169872,13704],{"class":112},[102,169874,31374],{"class":108},[102,169876,148135],{"class":5206},[102,169878,3728],{"class":112},[102,169880,169881,169884,169886,169889,169891],{"class":104,"line":1183},[102,169882,169883],{"class":112},"    reader ",[102,169885,158],{"class":108},[102,169887,169888],{"class":112}," csv.reader(",[102,169890,45345],{"class":5206},[102,169892,119],{"class":112},[102,169894,169895,169897,169900,169902],{"class":104,"line":1189},[102,169896,3190],{"class":108},[102,169898,169899],{"class":112}," row ",[102,169901,26034],{"class":108},[102,169903,169904],{"class":112}," reader:\n",[102,169906,169907,169909],{"class":104,"line":1203},[102,169908,32442],{"class":161},[102,169910,169911],{"class":112},"(row)\n",[19,169913,169914],{},"使用字典写入：",[93,169916,169918],{"className":30369,"code":169917,"language":30371,"meta":23,"style":23},"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",[99,169919,169920,169926,169930,169938,169966,169994,169998,170002,170040,170061,170082,170087],{"__ignoreMap":23},[102,169921,169922,169924],{"class":104,"line":105},[102,169923,30383],{"class":108},[102,169925,169701],{"class":112},[102,169927,169928],{"class":104,"line":24},[102,169929,2389],{"emptyLinePlaceholder":30},[102,169931,169932,169934,169936],{"class":104,"line":1168},[102,169933,159698],{"class":112},[102,169935,158],{"class":108},[102,169937,55438],{"class":112},[102,169939,169940,169942,169944,169946,169948,169950,169952,169954,169956,169958,169960,169962,169964],{"class":104,"line":1183},[102,169941,148367],{"class":112},[102,169943,62670],{"class":217},[102,169945,51428],{"class":112},[102,169947,149870],{"class":217},[102,169949,12425],{"class":112},[102,169951,69115],{"class":217},[102,169953,51428],{"class":112},[102,169955,763],{"class":161},[102,169957,12425],{"class":112},[102,169959,151454],{"class":217},[102,169961,51428],{"class":112},[102,169963,1102],{"class":161},[102,169965,4919],{"class":112},[102,169967,169968,169970,169972,169974,169976,169978,169980,169982,169984,169986,169988,169990,169992],{"class":104,"line":1189},[102,169969,148367],{"class":112},[102,169971,62670],{"class":217},[102,169973,51428],{"class":112},[102,169975,150918],{"class":217},[102,169977,12425],{"class":112},[102,169979,69115],{"class":217},[102,169981,51428],{"class":112},[102,169983,738],{"class":161},[102,169985,12425],{"class":112},[102,169987,151454],{"class":217},[102,169989,51428],{"class":112},[102,169991,924],{"class":161},[102,169993,4919],{"class":112},[102,169995,169996],{"class":104,"line":1203},[102,169997,33237],{"class":112},[102,169999,170000],{"class":104,"line":1209},[102,170001,2389],{"emptyLinePlaceholder":30},[102,170003,170004,170006,170008,170010,170012,170014,170016,170018,170020,170022,170024,170026,170028,170030,170032,170034,170036,170038],{"class":104,"line":1300},[102,170005,107824],{"class":108},[102,170007,146773],{"class":161},[102,170009,113],{"class":112},[102,170011,169782],{"class":217},[102,170013,12425],{"class":112},[102,170015,151958],{"class":217},[102,170017,12425],{"class":112},[102,170019,146788],{"class":5206},[102,170021,158],{"class":108},[102,170023,146793],{"class":217},[102,170025,12425],{"class":112},[102,170027,169799],{"class":5206},[102,170029,158],{"class":108},[102,170031,7642],{"class":217},[102,170033,13704],{"class":112},[102,170035,31374],{"class":108},[102,170037,148135],{"class":5206},[102,170039,3728],{"class":112},[102,170041,170042,170045,170047,170049,170051,170053,170055,170057,170059],{"class":104,"line":1306},[102,170043,170044],{"class":112},"    fieldnames ",[102,170046,158],{"class":108},[102,170048,52217],{"class":112},[102,170050,62670],{"class":217},[102,170052,12425],{"class":112},[102,170054,69115],{"class":217},[102,170056,12425],{"class":112},[102,170058,151454],{"class":217},[102,170060,33237],{"class":112},[102,170062,170063,170065,170067,170070,170072,170074,170077,170079],{"class":104,"line":1318},[102,170064,169816],{"class":112},[102,170066,158],{"class":108},[102,170068,170069],{"class":112}," csv.DictWriter(",[102,170071,45345],{"class":5206},[102,170073,12425],{"class":112},[102,170075,170076],{"class":5206},"fieldnames",[102,170078,158],{"class":108},[102,170080,170081],{"class":112},"fieldnames)\n",[102,170083,170084],{"class":104,"line":1601},[102,170085,170086],{"class":112},"    writer.writeheader()\n",[102,170088,170089],{"class":104,"line":1606},[102,170090,169830],{"class":112},[14,170092,170094],{"id":170093},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170096,123283],{},[56,170098,170099,170102,170105],{},[59,170100,170101],{},"读取文本文件。",[59,170103,170104],{},"统计每个单词出现次数。",[59,170106,170107],{},"输出出现次数最多的前 10 个单词。",[19,170109,10025],{},[93,170111,170113],{"className":30369,"code":170112,"language":30371,"meta":23,"style":23},"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",[99,170114,170115,170125,170129,170142,170158,170162,170172,170181,170185,170197,170217,170226,170230,170248,170252,170282,170286,170302],{"__ignoreMap":23},[102,170116,170117,170119,170121,170123],{"class":104,"line":105},[102,170118,30728],{"class":108},[102,170120,108302],{"class":112},[102,170122,30383],{"class":108},[102,170124,108307],{"class":112},[102,170126,170127],{"class":104,"line":24},[102,170128,2389],{"emptyLinePlaceholder":30},[102,170130,170131,170133,170135,170137,170140],{"class":104,"line":1168},[102,170132,168293],{"class":112},[102,170134,158],{"class":108},[102,170136,108536],{"class":112},[102,170138,170139],{"class":217},"\"article.txt\"",[102,170141,119],{"class":112},[102,170143,170144,170146,170148,170150,170152,170154,170156],{"class":104,"line":1183},[102,170145,168476],{"class":112},[102,170147,158],{"class":108},[102,170149,169353],{"class":112},[102,170151,146788],{"class":5206},[102,170153,158],{"class":108},[102,170155,146793],{"class":217},[102,170157,119],{"class":112},[102,170159,170160],{"class":104,"line":1189},[102,170161,2389],{"emptyLinePlaceholder":30},[102,170163,170164,170167,170169],{"class":104,"line":1203},[102,170165,170166],{"class":112},"words ",[102,170168,158],{"class":108},[102,170170,170171],{"class":112}," content.lower().split()\n",[102,170173,170174,170177,170179],{"class":104,"line":1209},[102,170175,170176],{"class":112},"counter ",[102,170178,158],{"class":108},[102,170180,87859],{"class":112},[102,170182,170183],{"class":104,"line":1300},[102,170184,2389],{"emptyLinePlaceholder":30},[102,170186,170187,170189,170192,170194],{"class":104,"line":1306},[102,170188,3014],{"class":108},[102,170190,170191],{"class":112}," word ",[102,170193,26034],{"class":108},[102,170195,170196],{"class":112}," words:\n",[102,170198,170199,170202,170204,170207,170210,170212,170215],{"class":104,"line":1318},[102,170200,170201],{"class":112},"    word ",[102,170203,158],{"class":108},[102,170205,170206],{"class":112}," word.strip(",[102,170208,170209],{"class":217},"\".,!?;:",[102,170211,156477],{"class":161},[102,170213,170214],{"class":217},"'()[]\"",[102,170216,119],{"class":112},[102,170218,170219,170221,170223],{"class":104,"line":1601},[102,170220,3090],{"class":108},[102,170222,38921],{"class":108},[102,170224,170225],{"class":112}," word:\n",[102,170227,170228],{"class":104,"line":1606},[102,170229,148494],{"class":108},[102,170231,170232,170235,170237,170240,170242,170244,170246],{"class":104,"line":1612},[102,170233,170234],{"class":112},"    counter[word] ",[102,170236,158],{"class":108},[102,170238,170239],{"class":112}," counter.get(word, ",[102,170241,304],{"class":161},[102,170243,13704],{"class":112},[102,170245,594],{"class":108},[102,170247,55690],{"class":161},[102,170249,170250],{"class":104,"line":1617},[102,170251,2389],{"emptyLinePlaceholder":30},[102,170253,170254,170257,170259,170261,170264,170266,170268,170270,170272,170274,170276,170278,170280],{"class":104,"line":1631},[102,170255,170256],{"class":112},"items ",[102,170258,158],{"class":108},[102,170260,163586],{"class":161},[102,170262,170263],{"class":112},"(counter.items(), ",[102,170265,153928],{"class":5206},[102,170267,153931],{"class":108},[102,170269,153934],{"class":112},[102,170271,330],{"class":161},[102,170273,112193],{"class":112},[102,170275,163510],{"class":5206},[102,170277,158],{"class":108},[102,170279,31467],{"class":161},[102,170281,119],{"class":112},[102,170283,170284],{"class":104,"line":1636},[102,170285,2389],{"emptyLinePlaceholder":30},[102,170287,170288,170290,170293,170295,170298,170300],{"class":104,"line":1642},[102,170289,3014],{"class":108},[102,170291,170292],{"class":112}," word, count ",[102,170294,26034],{"class":108},[102,170296,170297],{"class":112}," items[:",[102,170299,559],{"class":161},[102,170301,165737],{"class":112},[102,170303,170304,170306],{"class":104,"line":1663},[102,170305,31290],{"class":161},[102,170307,170308],{"class":112},"(word, count)\n",[14,170310,170312],{"id":170311},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[93,170314,170316],{"className":30369,"code":170315,"language":30371,"meta":23,"style":23},"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",[99,170317,170318,170324,170334,170338,170350,170354,170358,170366,170376,170382,170386,170416,170426,170430,170434,170442,170472,170496,170500,170504,170512,170541,170546],{"__ignoreMap":23},[102,170319,170320,170322],{"class":104,"line":105},[102,170321,30383],{"class":108},[102,170323,147073],{"class":112},[102,170325,170326,170328,170330,170332],{"class":104,"line":24},[102,170327,30728],{"class":108},[102,170329,108302],{"class":112},[102,170331,30383],{"class":108},[102,170333,108307],{"class":112},[102,170335,170336],{"class":104,"line":1168},[102,170337,2389],{"emptyLinePlaceholder":30},[102,170339,170340,170342,170344,170346,170348],{"class":104,"line":1183},[102,170341,151806],{"class":161},[102,170343,13554],{"class":108},[102,170345,108536],{"class":112},[102,170347,151813],{"class":217},[102,170349,119],{"class":112},[102,170351,170352],{"class":104,"line":1189},[102,170353,2389],{"emptyLinePlaceholder":30},[102,170355,170356],{"class":104,"line":1203},[102,170357,2389],{"emptyLinePlaceholder":30},[102,170359,170360,170362,170364],{"class":104,"line":1209},[102,170361,31938],{"class":108},[102,170363,151830],{"class":1952},[102,170365,31944],{"class":112},[102,170367,170368,170370,170372,170374],{"class":104,"line":1300},[102,170369,3090],{"class":108},[102,170371,38921],{"class":108},[102,170373,151841],{"class":161},[102,170375,151844],{"class":112},[102,170377,170378,170380],{"class":104,"line":1306},[102,170379,14742],{"class":108},[102,170381,51829],{"class":112},[102,170383,170384],{"class":104,"line":1318},[102,170385,2389],{"emptyLinePlaceholder":30},[102,170387,170388,170390,170392,170394,170396,170398,170400,170402,170404,170406,170408,170410,170412,170414],{"class":104,"line":1601},[102,170389,34169],{"class":108},[102,170391,146773],{"class":161},[102,170393,113],{"class":112},[102,170395,151806],{"class":161},[102,170397,12425],{"class":112},[102,170399,146783],{"class":217},[102,170401,12425],{"class":112},[102,170403,146788],{"class":5206},[102,170405,158],{"class":108},[102,170407,146793],{"class":217},[102,170409,13704],{"class":112},[102,170411,31374],{"class":108},[102,170413,148135],{"class":5206},[102,170415,3728],{"class":112},[102,170417,170418,170420,170422,170424],{"class":104,"line":1606},[102,170419,14742],{"class":108},[102,170421,148146],{"class":112},[102,170423,45345],{"class":5206},[102,170425,119],{"class":112},[102,170427,170428],{"class":104,"line":1612},[102,170429,2389],{"emptyLinePlaceholder":30},[102,170431,170432],{"class":104,"line":1617},[102,170433,2389],{"emptyLinePlaceholder":30},[102,170435,170436,170438,170440],{"class":104,"line":1631},[102,170437,31938],{"class":108},[102,170439,151940],{"class":1952},[102,170441,151943],{"class":112},[102,170443,170444,170446,170448,170450,170452,170454,170456,170458,170460,170462,170464,170466,170468,170470],{"class":104,"line":1636},[102,170445,34169],{"class":108},[102,170447,146773],{"class":161},[102,170449,113],{"class":112},[102,170451,151806],{"class":161},[102,170453,12425],{"class":112},[102,170455,151958],{"class":217},[102,170457,12425],{"class":112},[102,170459,146788],{"class":5206},[102,170461,158],{"class":108},[102,170463,146793],{"class":217},[102,170465,13704],{"class":112},[102,170467,31374],{"class":108},[102,170469,148135],{"class":5206},[102,170471,3728],{"class":112},[102,170473,170474,170476,170478,170480,170482,170484,170486,170488,170490,170492,170494],{"class":104,"line":1642},[102,170475,151979],{"class":112},[102,170477,45345],{"class":5206},[102,170479,12425],{"class":112},[102,170481,147119],{"class":5206},[102,170483,158],{"class":108},[102,170485,33978],{"class":161},[102,170487,12425],{"class":112},[102,170489,151994],{"class":5206},[102,170491,158],{"class":108},[102,170493,190],{"class":161},[102,170495,119],{"class":112},[102,170497,170498],{"class":104,"line":1663},[102,170499,2389],{"emptyLinePlaceholder":30},[102,170501,170502],{"class":104,"line":1668},[102,170503,2389],{"emptyLinePlaceholder":30},[102,170505,170506,170508,170510],{"class":104,"line":1682},[102,170507,159698],{"class":112},[102,170509,158],{"class":108},[102,170511,153024],{"class":112},[102,170513,170514,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535,170537,170539],{"class":104,"line":1687},[102,170515,170516],{"class":112},"students.append({",[102,170518,62670],{"class":217},[102,170520,51428],{"class":112},[102,170522,149870],{"class":217},[102,170524,12425],{"class":112},[102,170526,69115],{"class":217},[102,170528,51428],{"class":112},[102,170530,763],{"class":161},[102,170532,12425],{"class":112},[102,170534,151454],{"class":217},[102,170536,51428],{"class":112},[102,170538,1102],{"class":161},[102,170540,165134],{"class":112},[102,170542,170543],{"class":104,"line":1716},[102,170544,170545],{"class":112},"save_students(students)\n",[102,170547,170548,170550,170552,170555],{"class":104,"line":1721},[102,170549,30406],{"class":161},[102,170551,113],{"class":112},[102,170553,170554],{"class":217},"\"保存成功\"",[102,170556,119],{"class":112},[14,170558,170560],{"id":170559},"_814-易错点","8.14 易错点",[56,170562,170563,170567,170573,170578,170585,170592],{},[59,170564,170565,168826],{},[99,170566,908],{},[59,170568,170569,170570,28376],{},"读写中文要指定 ",[99,170571,170572],{},"encoding=\"utf-8\"",[59,170574,170575,170576,28376],{},"打开文件后要关闭，推荐使用 ",[99,170577,107824],{},[59,170579,170580,170581,170584],{},"读取大文件不要直接 ",[99,170582,170583],{},"read()"," 全部内容。",[59,170586,170587,170588,170591],{},"Windows 写 CSV 时建议加 ",[99,170589,170590],{},"newline=\"\"","，避免空行。",[59,170593,170594],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170596,170598],{"id":170597},"_815-本章练习","8.15 本章练习",[56,170600,170601,170608,170613,170616,170619],{},[59,170602,170603,170604,170607],{},"写入一个 ",[99,170605,170606],{},"students.txt","，每行保存一个学生姓名。",[59,170609,104346,170610,170612],{},[99,170611,170606],{}," 并输出所有学生。",[59,170614,170615],{},"把学生列表保存为 JSON 文件。",[59,170617,170618],{},"从 JSON 文件读取学生数据，计算平均分。",[59,170620,170621,170622,170625,170626,170629],{},"写一个日志函数 ",[99,170623,170624],{},"write_log(message)","，每次调用向 ",[99,170627,170628],{},"app.log"," 追加一行。",[5116,170631,170632],{},"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":23,"searchDepth":24,"depth":24,"links":170634},[170635,170636,170640,170641,170647,170648,170649,170650,170651,170652,170653,170654,170655,170656,170657],{"id":168146,"depth":24,"text":168147},{"id":168187,"depth":24,"text":168188,"children":170637},[170638,170639],{"id":168191,"depth":1168,"text":168192},{"id":168225,"depth":1168,"text":168226},{"id":168339,"depth":24,"text":168340},{"id":168432,"depth":24,"text":168433,"children":170642},[170643,170644,170645,170646],{"id":168436,"depth":1168,"text":168437},{"id":168523,"depth":1168,"text":168524},{"id":168593,"depth":1168,"text":168594},{"id":168687,"depth":1168,"text":168688},{"id":168757,"depth":24,"text":168758},{"id":168820,"depth":24,"text":168821},{"id":168981,"depth":24,"text":168982},{"id":169044,"depth":24,"text":169045},{"id":169160,"depth":24,"text":169161},{"id":169370,"depth":24,"text":169371},{"id":169682,"depth":24,"text":169683},{"id":170093,"depth":24,"text":170094},{"id":170311,"depth":24,"text":170312},{"id":170559,"depth":24,"text":170560},{"id":170597,"depth":24,"text":170598},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168138,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170664,"title":170665,"body":170666,"description":27,"extension":28,"meta":172852,"navigation":30,"path":172853,"seo":172854,"stem":172855,"__hash__":172856},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170667,"toc":172819},[170668,170671,170675,170678,170681,170773,170775,170794,170799,170803,170806,170809,170838,170845,170848,170852,170855,170884,170886,170938,170944,170997,171001,171099,171102,171169,171173,171230,171232,171238,171242,171247,171253,171344,171349,171353,171356,171434,171437,171475,171479,171597,171600,171604,171607,171652,171655,171659,171664,171670,171720,171723,171754,171758,171762,171792,171796,171831,171835,171870,171910,171914,171930,171933,171937,171941,172020,172024,172065,172069,172124,172128,172162,172166,172196,172205,172212,172218,172275,172278,172286,172289,172293,172300,172303,172309,172312,172329,172334,172338,172344,172357,172360,172397,172400,172411,172414,172428,172431,172445,172449,172456,172489,172492,172494,172500,172503,172507,172509,172515,172520,172693,172697,172760,172764,172788,172792,172816],[10,170669,170665],{"id":170670},"_9-异常模块与包",[14,170672,170674],{"id":170673},"_91-什么是异常","9.1 什么是异常",[19,170676,170677],{},"异常是程序运行过程中出现的错误。",[19,170679,170680],{},"常见异常：",[250,170682,170683,170692],{},[253,170684,170685],{},[256,170686,170687,170690],{},[259,170688,170689],{},"异常",[259,170691,25860],{},[297,170693,170694,170704,170714,170723,170733,170743,170753,170763],{},[256,170695,170696,170701],{},[302,170697,170698],{},[99,170699,170700],{},"NameError",[302,170702,170703],{},"使用了未定义变量",[256,170705,170706,170711],{},[302,170707,170708],{},[99,170709,170710],{},"TypeError",[302,170712,170713],{},"类型不匹配",[256,170715,170716,170720],{},[302,170717,170718],{},[99,170719,154816],{},[302,170721,170722],{},"值不合法",[256,170724,170725,170730],{},[302,170726,170727],{},[99,170728,170729],{},"IndexError",[302,170731,170732],{},"列表索引越界",[256,170734,170735,170740],{},[302,170736,170737],{},[99,170738,170739],{},"KeyError",[302,170741,170742],{},"字典 key 不存在",[256,170744,170745,170750],{},[302,170746,170747],{},[99,170748,170749],{},"FileNotFoundError",[302,170751,170752],{},"文件不存在",[256,170754,170755,170760],{},[302,170756,170757],{},[99,170758,170759],{},"ZeroDivisionError",[302,170761,170762],{},"除数为 0",[256,170764,170765,170770],{},[302,170766,170767],{},[99,170768,170769],{},"ImportError",[302,170771,170772],{},"导入失败",[19,170774,15125],{},[93,170776,170778],{"className":30369,"code":170777,"language":30371,"meta":23,"style":23},"num = int(\"abc\")\n",[99,170779,170780],{"__ignoreMap":23},[102,170781,170782,170784,170786,170788,170790,170792],{"class":104,"line":105},[102,170783,155769],{"class":112},[102,170785,158],{"class":108},[102,170787,2371],{"class":161},[102,170789,113],{"class":112},[102,170791,155862],{"class":217},[102,170793,119],{"class":112},[19,170795,170796,170797,28376],{},"会触发 ",[99,170798,154816],{},[14,170800,170802],{"id":170801},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,170804,170805],{},"如果不处理异常，程序会直接终止。",[19,170807,170808],{},"例如用户输入年龄：",[93,170810,170812],{"className":30369,"code":170811,"language":30371,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[99,170813,170814,170832],{"__ignoreMap":23},[102,170815,170816,170818,170820,170822,170824,170826,170828,170830],{"class":104,"line":105},[102,170817,146528],{"class":112},[102,170819,158],{"class":108},[102,170821,2371],{"class":161},[102,170823,113],{"class":112},[102,170825,53812],{"class":161},[102,170827,113],{"class":112},[102,170829,152376],{"class":217},[102,170831,30488],{"class":112},[102,170833,170834,170836],{"class":104,"line":24},[102,170835,30406],{"class":161},[102,170837,155743],{"class":112},[19,170839,170840,170841,170844],{},"用户输入 ",[99,170842,170843],{},"abc","，程序就会报错退出。",[19,170846,170847],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,170849,170851],{"id":170850},"_93-try-except","9.3 try except",[19,170853,170854],{},"基础语法：",[93,170856,170858],{"className":30369,"code":170857,"language":30371,"meta":23,"style":23},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[99,170859,170860,170867,170872,170879],{"__ignoreMap":23},[102,170861,170862,170865],{"class":104,"line":105},[102,170863,170864],{"class":108},"try",[102,170866,3728],{"class":112},[102,170868,170869],{"class":104,"line":24},[102,170870,170871],{"class":112},"    可能出错的代码\n",[102,170873,170874,170877],{"class":104,"line":1168},[102,170875,170876],{"class":108},"except",[102,170878,3728],{"class":112},[102,170880,170881],{"class":104,"line":1183},[102,170882,170883],{"class":112},"    出错后的处理代码\n",[19,170885,15125],{},[93,170887,170889],{"className":30369,"code":170888,"language":30371,"meta":23,"style":23},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[99,170890,170891,170897,170915,170921,170927],{"__ignoreMap":23},[102,170892,170893,170895],{"class":104,"line":105},[102,170894,170864],{"class":108},[102,170896,3728],{"class":112},[102,170898,170899,170901,170903,170905,170907,170909,170911,170913],{"class":104,"line":24},[102,170900,152368],{"class":112},[102,170902,158],{"class":108},[102,170904,2371],{"class":161},[102,170906,113],{"class":112},[102,170908,53812],{"class":161},[102,170910,113],{"class":112},[102,170912,152376],{"class":217},[102,170914,30488],{"class":112},[102,170916,170917,170919],{"class":104,"line":1168},[102,170918,31290],{"class":161},[102,170920,155743],{"class":112},[102,170922,170923,170925],{"class":104,"line":1183},[102,170924,170876],{"class":108},[102,170926,3728],{"class":112},[102,170928,170929,170931,170933,170936],{"class":104,"line":1189},[102,170930,31290],{"class":161},[102,170932,113],{"class":112},[102,170934,170935],{"class":217},"\"年龄必须是数字\"",[102,170937,119],{"class":112},[19,170939,170940,170941,170943],{},"不建议裸写 ",[99,170942,170876],{},"，最好指定异常类型。",[93,170945,170947],{"className":30369,"code":170946,"language":30371,"meta":23,"style":23},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[99,170948,170949,170955,170973,170979,170987],{"__ignoreMap":23},[102,170950,170951,170953],{"class":104,"line":105},[102,170952,170864],{"class":108},[102,170954,3728],{"class":112},[102,170956,170957,170959,170961,170963,170965,170967,170969,170971],{"class":104,"line":24},[102,170958,152368],{"class":112},[102,170960,158],{"class":108},[102,170962,2371],{"class":161},[102,170964,113],{"class":112},[102,170966,53812],{"class":161},[102,170968,113],{"class":112},[102,170970,152376],{"class":217},[102,170972,30488],{"class":112},[102,170974,170975,170977],{"class":104,"line":1168},[102,170976,31290],{"class":161},[102,170978,155743],{"class":112},[102,170980,170981,170983,170985],{"class":104,"line":1183},[102,170982,170876],{"class":108},[102,170984,152208],{"class":161},[102,170986,3728],{"class":112},[102,170988,170989,170991,170993,170995],{"class":104,"line":1189},[102,170990,31290],{"class":161},[102,170992,113],{"class":112},[102,170994,170935],{"class":217},[102,170996,119],{"class":112},[14,170998,171000],{"id":170999},"_94-捕获多个异常","9.4 捕获多个异常",[93,171002,171004],{"className":30369,"code":171003,"language":30371,"meta":23,"style":23},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[99,171005,171006,171012,171033,171053,171060,171068,171079,171088],{"__ignoreMap":23},[102,171007,171008,171010],{"class":104,"line":105},[102,171009,170864],{"class":108},[102,171011,3728],{"class":112},[102,171013,171014,171017,171019,171021,171023,171025,171027,171029,171031],{"class":104,"line":24},[102,171015,171016],{"class":112},"    nums ",[102,171018,158],{"class":108},[102,171020,52217],{"class":112},[102,171022,330],{"class":161},[102,171024,12425],{"class":112},[102,171026,190],{"class":161},[102,171028,12425],{"class":112},[102,171030,184],{"class":161},[102,171032,33237],{"class":112},[102,171034,171035,171038,171040,171042,171044,171046,171048,171051],{"class":104,"line":1168},[102,171036,171037],{"class":112},"    index ",[102,171039,158],{"class":108},[102,171041,2371],{"class":161},[102,171043,113],{"class":112},[102,171045,53812],{"class":161},[102,171047,113],{"class":112},[102,171049,171050],{"class":217},"\"请输入索引:\"",[102,171052,30488],{"class":112},[102,171054,171055,171057],{"class":104,"line":1183},[102,171056,31290],{"class":161},[102,171058,171059],{"class":112},"(nums[index])\n",[102,171061,171062,171064,171066],{"class":104,"line":1189},[102,171063,170876],{"class":108},[102,171065,152208],{"class":161},[102,171067,3728],{"class":112},[102,171069,171070,171072,171074,171077],{"class":104,"line":1203},[102,171071,31290],{"class":161},[102,171073,113],{"class":112},[102,171075,171076],{"class":217},"\"索引必须是整数\"",[102,171078,119],{"class":112},[102,171080,171081,171083,171086],{"class":104,"line":1209},[102,171082,170876],{"class":108},[102,171084,171085],{"class":161}," IndexError",[102,171087,3728],{"class":112},[102,171089,171090,171092,171094,171097],{"class":104,"line":1300},[102,171091,31290],{"class":161},[102,171093,113],{"class":112},[102,171095,171096],{"class":217},"\"索引越界\"",[102,171098,119],{"class":112},[19,171100,171101],{},"多个异常使用相同处理逻辑：",[93,171103,171105],{"className":30369,"code":171104,"language":30371,"meta":23,"style":23},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[99,171106,171107,171113,171131,171144,171158],{"__ignoreMap":23},[102,171108,171109,171111],{"class":104,"line":105},[102,171110,170864],{"class":108},[102,171112,3728],{"class":112},[102,171114,171115,171117,171119,171121,171123,171125,171127,171129],{"class":104,"line":24},[102,171116,45584],{"class":112},[102,171118,158],{"class":108},[102,171120,2371],{"class":161},[102,171122,113],{"class":112},[102,171124,53812],{"class":161},[102,171126,113],{"class":112},[102,171128,155778],{"class":217},[102,171130,30488],{"class":112},[102,171132,171133,171135,171137,171139,171141],{"class":104,"line":1168},[102,171134,31290],{"class":161},[102,171136,113],{"class":112},[102,171138,559],{"class":161},[102,171140,156028],{"class":108},[102,171142,171143],{"class":112}," num)\n",[102,171145,171146,171148,171150,171152,171154,171156],{"class":104,"line":1183},[102,171147,170876],{"class":108},[102,171149,1647],{"class":112},[102,171151,154816],{"class":161},[102,171153,12425],{"class":112},[102,171155,170759],{"class":161},[102,171157,30777],{"class":112},[102,171159,171160,171162,171164,171167],{"class":104,"line":1189},[102,171161,31290],{"class":161},[102,171163,113],{"class":112},[102,171165,171166],{"class":217},"\"输入不合法\"",[102,171168,119],{"class":112},[14,171170,171172],{"id":171171},"_95-获取异常信息","9.5 获取异常信息",[93,171174,171176],{"className":30369,"code":171175,"language":30371,"meta":23,"style":23},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[99,171177,171178,171184,171198,171209],{"__ignoreMap":23},[102,171179,171180,171182],{"class":104,"line":105},[102,171181,170864],{"class":108},[102,171183,3728],{"class":112},[102,171185,171186,171188,171190,171192,171194,171196],{"class":104,"line":24},[102,171187,45584],{"class":112},[102,171189,158],{"class":108},[102,171191,2371],{"class":161},[102,171193,113],{"class":112},[102,171195,155862],{"class":217},[102,171197,119],{"class":112},[102,171199,171200,171202,171204,171206],{"class":104,"line":1168},[102,171201,170876],{"class":108},[102,171203,152208],{"class":161},[102,171205,64595],{"class":108},[102,171207,171208],{"class":112}," e:\n",[102,171210,171211,171213,171215,171217,171220,171222,171224,171226,171228],{"class":104,"line":1183},[102,171212,31290],{"class":161},[102,171214,113],{"class":112},[102,171216,165],{"class":108},[102,171218,171219],{"class":217},"\"出错了:",[102,171221,1009],{"class":161},[102,171223,187],{"class":112},[102,171225,1059],{"class":161},[102,171227,364],{"class":217},[102,171229,119],{"class":112},[19,171231,146439],{},[93,171233,171236],{"className":171234,"code":171235,"language":5177,"meta":23},[5175],"出错了:invalid literal for int() with base 10: 'abc'\n",[99,171237,171235],{"__ignoreMap":23},[14,171239,171241],{"id":171240},"_96-else和finally","9.6 else和finally",[19,171243,171244,171246],{},[99,171245,1690],{},"：没有异常时执行。",[19,171248,171249,171252],{},[99,171250,171251],{},"finally","：无论是否异常都会执行。",[93,171254,171256],{"className":30369,"code":171255,"language":30371,"meta":23,"style":23},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[99,171257,171258,171264,171282,171290,171300,171306,171327,171333],{"__ignoreMap":23},[102,171259,171260,171262],{"class":104,"line":105},[102,171261,170864],{"class":108},[102,171263,3728],{"class":112},[102,171265,171266,171268,171270,171272,171274,171276,171278,171280],{"class":104,"line":24},[102,171267,45584],{"class":112},[102,171269,158],{"class":108},[102,171271,2371],{"class":161},[102,171273,113],{"class":112},[102,171275,53812],{"class":161},[102,171277,113],{"class":112},[102,171279,155778],{"class":217},[102,171281,30488],{"class":112},[102,171283,171284,171286,171288],{"class":104,"line":1168},[102,171285,170876],{"class":108},[102,171287,152208],{"class":161},[102,171289,3728],{"class":112},[102,171291,171292,171294,171296,171298],{"class":104,"line":1183},[102,171293,31290],{"class":161},[102,171295,113],{"class":112},[102,171297,153196],{"class":217},[102,171299,119],{"class":112},[102,171301,171302,171304],{"class":104,"line":1189},[102,171303,1690],{"class":108},[102,171305,3728],{"class":112},[102,171307,171308,171310,171312,171314,171317,171319,171321,171323,171325],{"class":104,"line":1203},[102,171309,31290],{"class":161},[102,171311,113],{"class":112},[102,171313,165],{"class":108},[102,171315,171316],{"class":217},"\"输入正确:",[102,171318,1009],{"class":161},[102,171320,1654],{"class":112},[102,171322,1059],{"class":161},[102,171324,364],{"class":217},[102,171326,119],{"class":112},[102,171328,171329,171331],{"class":104,"line":1209},[102,171330,171251],{"class":108},[102,171332,3728],{"class":112},[102,171334,171335,171337,171339,171342],{"class":104,"line":1300},[102,171336,31290],{"class":161},[102,171338,113],{"class":112},[102,171340,171341],{"class":217},"\"程序结束\"",[102,171343,119],{"class":112},[19,171345,171346,171348],{},[99,171347,171251],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171350,171352],{"id":171351},"_97-抛出异常","9.7 抛出异常",[19,171354,171355],{},"程序可以主动抛出异常。",[93,171357,171359],{"className":30369,"code":171358,"language":30371,"meta":23,"style":23},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[99,171360,171361,171370,171382,171395,171415,171419,171423],{"__ignoreMap":23},[102,171362,171363,171365,171368],{"class":104,"line":105},[102,171364,31938],{"class":108},[102,171366,171367],{"class":1952}," set_age",[102,171369,161397],{"class":112},[102,171371,171372,171374,171376,171378,171380],{"class":104,"line":24},[102,171373,3090],{"class":108},[102,171375,15697],{"class":112},[102,171377,1023],{"class":108},[102,171379,4082],{"class":161},[102,171381,3728],{"class":112},[102,171383,171384,171386,171388,171390,171393],{"class":104,"line":1168},[102,171385,103423],{"class":108},[102,171387,152208],{"class":161},[102,171389,113],{"class":112},[102,171391,171392],{"class":217},"\"年龄不能为负数\"",[102,171394,119],{"class":112},[102,171396,171397,171399,171401,171403,171405,171407,171409,171411,171413],{"class":104,"line":1183},[102,171398,31290],{"class":161},[102,171400,113],{"class":112},[102,171402,165],{"class":108},[102,171404,161965],{"class":217},[102,171406,1009],{"class":161},[102,171408,70212],{"class":112},[102,171410,1059],{"class":161},[102,171412,364],{"class":217},[102,171414,119],{"class":112},[102,171416,171417],{"class":104,"line":1189},[102,171418,2389],{"emptyLinePlaceholder":30},[102,171420,171421],{"class":104,"line":1203},[102,171422,2389],{"emptyLinePlaceholder":30},[102,171424,171425,171428,171430,171432],{"class":104,"line":1209},[102,171426,171427],{"class":112},"set_age(",[102,171429,645],{"class":108},[102,171431,330],{"class":161},[102,171433,119],{"class":112},[19,171435,171436],{},"调用者可以捕获：",[93,171438,171440],{"className":30369,"code":171439,"language":30371,"meta":23,"style":23},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[99,171441,171442,171448,171459,171469],{"__ignoreMap":23},[102,171443,171444,171446],{"class":104,"line":105},[102,171445,170864],{"class":108},[102,171447,3728],{"class":112},[102,171449,171450,171453,171455,171457],{"class":104,"line":24},[102,171451,171452],{"class":112},"    set_age(",[102,171454,645],{"class":108},[102,171456,330],{"class":161},[102,171458,119],{"class":112},[102,171460,171461,171463,171465,171467],{"class":104,"line":1168},[102,171462,170876],{"class":108},[102,171464,152208],{"class":161},[102,171466,64595],{"class":108},[102,171468,171208],{"class":112},[102,171470,171471,171473],{"class":104,"line":1183},[102,171472,31290],{"class":161},[102,171474,66990],{"class":112},[14,171476,171478],{"id":171477},"_98-自定义异常","9.8 自定义异常",[93,171480,171482],{"className":30369,"code":171481,"language":30371,"meta":23,"style":23},"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",[99,171483,171484,171498,171502,171506,171510,171518,171528,171539,171549,171553,171557,171563,171580,171591],{"__ignoreMap":23},[102,171485,171486,171488,171491,171493,171496],{"class":104,"line":105},[102,171487,14684],{"class":108},[102,171489,171490],{"class":1952}," BalanceNotEnoughError",[102,171492,113],{"class":112},[102,171494,171495],{"class":161},"Exception",[102,171497,30777],{"class":112},[102,171499,171500],{"class":104,"line":24},[102,171501,149519],{"class":108},[102,171503,171504],{"class":104,"line":1168},[102,171505,2389],{"emptyLinePlaceholder":30},[102,171507,171508],{"class":104,"line":1183},[102,171509,2389],{"emptyLinePlaceholder":30},[102,171511,171512,171514,171516],{"class":104,"line":1189},[102,171513,31938],{"class":108},[102,171515,150168],{"class":1952},[102,171517,162794],{"class":112},[102,171519,171520,171522,171524,171526],{"class":104,"line":1203},[102,171521,3090],{"class":108},[102,171523,150124],{"class":112},[102,171525,1073],{"class":108},[102,171527,162571],{"class":112},[102,171529,171530,171532,171535,171537],{"class":104,"line":1209},[102,171531,103423],{"class":108},[102,171533,171534],{"class":112}," BalanceNotEnoughError(",[102,171536,150219],{"class":217},[102,171538,119],{"class":112},[102,171540,171541,171543,171545,171547],{"class":104,"line":1300},[102,171542,4079],{"class":108},[102,171544,162801],{"class":112},[102,171546,645],{"class":108},[102,171548,150157],{"class":112},[102,171550,171551],{"class":104,"line":1306},[102,171552,2389],{"emptyLinePlaceholder":30},[102,171554,171555],{"class":104,"line":1318},[102,171556,2389],{"emptyLinePlaceholder":30},[102,171558,171559,171561],{"class":104,"line":1601},[102,171560,170864],{"class":108},[102,171562,3728],{"class":112},[102,171564,171565,171567,171569,171572,171574,171576,171578],{"class":104,"line":1606},[102,171566,162472],{"class":112},[102,171568,158],{"class":108},[102,171570,171571],{"class":112}," withdraw(",[102,171573,424],{"class":161},[102,171575,12425],{"class":112},[102,171577,1711],{"class":161},[102,171579,119],{"class":112},[102,171581,171582,171584,171587,171589],{"class":104,"line":1612},[102,171583,170876],{"class":108},[102,171585,171586],{"class":112}," BalanceNotEnoughError ",[102,171588,31374],{"class":108},[102,171590,171208],{"class":112},[102,171592,171593,171595],{"class":104,"line":1617},[102,171594,31290],{"class":161},[102,171596,66990],{"class":112},[19,171598,171599],{},"入门阶段大多数情况使用内置异常即可。",[14,171601,171603],{"id":171602},"_99-traceback","9.9 traceback",[19,171605,171606],{},"调试时可以输出完整异常堆栈。",[93,171608,171610],{"className":30369,"code":171609,"language":30371,"meta":23,"style":23},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[99,171611,171612,171619,171623,171629,171639,171647],{"__ignoreMap":23},[102,171613,171614,171616],{"class":104,"line":105},[102,171615,30383],{"class":108},[102,171617,171618],{"class":112}," traceback\n",[102,171620,171621],{"class":104,"line":24},[102,171622,2389],{"emptyLinePlaceholder":30},[102,171624,171625,171627],{"class":104,"line":1168},[102,171626,170864],{"class":108},[102,171628,3728],{"class":112},[102,171630,171631,171633,171635,171637],{"class":104,"line":1183},[102,171632,1974],{"class":161},[102,171634,113],{"class":112},[102,171636,155862],{"class":217},[102,171638,119],{"class":112},[102,171640,171641,171643,171645],{"class":104,"line":1189},[102,171642,170876],{"class":108},[102,171644,152208],{"class":161},[102,171646,3728],{"class":112},[102,171648,171649],{"class":104,"line":1203},[102,171650,171651],{"class":112},"    traceback.print_exc()\n",[19,171653,171654],{},"日志系统中常把异常堆栈记录到文件。",[14,171656,171658],{"id":171657},"_910-什么是模块","9.10 什么是模块",[19,171660,171661,171662,125965],{},"模块就是一个 ",[99,171663,146334],{},[19,171665,171666,171667,24609],{},"例如创建 ",[99,171668,171669],{},"my_math.py",[93,171671,171673],{"className":30369,"code":171672,"language":30371,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[99,171674,171675,171683,171693,171697,171701,171710],{"__ignoreMap":23},[102,171676,171677,171679,171681],{"class":104,"line":105},[102,171678,31938],{"class":108},[102,171680,5199],{"class":1952},[102,171682,151075],{"class":112},[102,171684,171685,171687,171689,171691],{"class":104,"line":24},[102,171686,4079],{"class":108},[102,171688,10859],{"class":112},[102,171690,594],{"class":108},[102,171692,151086],{"class":112},[102,171694,171695],{"class":104,"line":1168},[102,171696,2389],{"emptyLinePlaceholder":30},[102,171698,171699],{"class":104,"line":1183},[102,171700,2389],{"emptyLinePlaceholder":30},[102,171702,171703,171705,171708],{"class":104,"line":1189},[102,171704,31938],{"class":108},[102,171706,171707],{"class":1952}," sub",[102,171709,151075],{"class":112},[102,171711,171712,171714,171716,171718],{"class":104,"line":1203},[102,171713,4079],{"class":108},[102,171715,10859],{"class":112},[102,171717,645],{"class":108},[102,171719,151086],{"class":112},[19,171721,171722],{},"在另一个文件中导入：",[93,171724,171726],{"className":30369,"code":171725,"language":30371,"meta":23,"style":23},"import my_math\n\nprint(my_math.add(1, 2))\n",[99,171727,171728,171735,171739],{"__ignoreMap":23},[102,171729,171730,171732],{"class":104,"line":105},[102,171731,30383],{"class":108},[102,171733,171734],{"class":112}," my_math\n",[102,171736,171737],{"class":104,"line":24},[102,171738,2389],{"emptyLinePlaceholder":30},[102,171740,171741,171743,171746,171748,171750,171752],{"class":104,"line":1168},[102,171742,30406],{"class":161},[102,171744,171745],{"class":112},"(my_math.add(",[102,171747,330],{"class":161},[102,171749,12425],{"class":112},[102,171751,190],{"class":161},[102,171753,30488],{"class":112},[14,171755,171757],{"id":171756},"_911-import导入","9.11 import导入",[73,171759,171761],{"id":171760},"_9111-导入模块","9.11.1 导入模块",[93,171763,171765],{"className":30369,"code":171764,"language":30371,"meta":23,"style":23},"import random\n\nprint(random.randint(1, 10))\n",[99,171766,171767,171773,171777],{"__ignoreMap":23},[102,171768,171769,171771],{"class":104,"line":105},[102,171770,30383],{"class":108},[102,171772,45319],{"class":112},[102,171774,171775],{"class":104,"line":24},[102,171776,2389],{"emptyLinePlaceholder":30},[102,171778,171779,171781,171784,171786,171788,171790],{"class":104,"line":1168},[102,171780,30406],{"class":161},[102,171782,171783],{"class":112},"(random.randint(",[102,171785,330],{"class":161},[102,171787,12425],{"class":112},[102,171789,559],{"class":161},[102,171791,30488],{"class":112},[73,171793,171795],{"id":171794},"_9112-导入指定内容","9.11.2 导入指定内容",[93,171797,171799],{"className":30369,"code":171798,"language":30371,"meta":23,"style":23},"from random import randint\n\nprint(randint(1, 10))\n",[99,171800,171801,171812,171816],{"__ignoreMap":23},[102,171802,171803,171805,171807,171809],{"class":104,"line":105},[102,171804,30728],{"class":108},[102,171806,57787],{"class":112},[102,171808,30383],{"class":108},[102,171810,171811],{"class":112}," randint\n",[102,171813,171814],{"class":104,"line":24},[102,171815,2389],{"emptyLinePlaceholder":30},[102,171817,171818,171820,171823,171825,171827,171829],{"class":104,"line":1168},[102,171819,30406],{"class":161},[102,171821,171822],{"class":112},"(randint(",[102,171824,330],{"class":161},[102,171826,12425],{"class":112},[102,171828,559],{"class":161},[102,171830,30488],{"class":112},[73,171832,171834],{"id":171833},"_9113-起别名","9.11.3 起别名",[93,171836,171838],{"className":30369,"code":171837,"language":30371,"meta":23,"style":23},"import random as rd\n\nprint(rd.randint(1, 10))\n",[99,171839,171840,171851,171855],{"__ignoreMap":23},[102,171841,171842,171844,171846,171848],{"class":104,"line":105},[102,171843,30383],{"class":108},[102,171845,57787],{"class":112},[102,171847,31374],{"class":108},[102,171849,171850],{"class":112}," rd\n",[102,171852,171853],{"class":104,"line":24},[102,171854,2389],{"emptyLinePlaceholder":30},[102,171856,171857,171859,171862,171864,171866,171868],{"class":104,"line":1168},[102,171858,30406],{"class":161},[102,171860,171861],{"class":112},"(rd.randint(",[102,171863,330],{"class":161},[102,171865,12425],{"class":112},[102,171867,559],{"class":161},[102,171869,30488],{"class":112},[93,171871,171873],{"className":30369,"code":171872,"language":30371,"meta":23,"style":23},"from random import randint as rint\n\nprint(rint(1, 10))\n",[99,171874,171875,171891,171895],{"__ignoreMap":23},[102,171876,171877,171879,171881,171883,171886,171888],{"class":104,"line":105},[102,171878,30728],{"class":108},[102,171880,57787],{"class":112},[102,171882,30383],{"class":108},[102,171884,171885],{"class":112}," randint ",[102,171887,31374],{"class":108},[102,171889,171890],{"class":112}," rint\n",[102,171892,171893],{"class":104,"line":24},[102,171894,2389],{"emptyLinePlaceholder":30},[102,171896,171897,171899,171902,171904,171906,171908],{"class":104,"line":1168},[102,171898,30406],{"class":161},[102,171900,171901],{"class":112},"(rint(",[102,171903,330],{"class":161},[102,171905,12425],{"class":112},[102,171907,559],{"class":161},[102,171909,30488],{"class":112},[73,171911,171913],{"id":171912},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[93,171915,171917],{"className":30369,"code":171916,"language":30371,"meta":23,"style":23},"from random import *\n",[99,171918,171919],{"__ignoreMap":23},[102,171920,171921,171923,171925,171927],{"class":104,"line":105},[102,171922,30728],{"class":108},[102,171924,57787],{"class":112},[102,171926,30383],{"class":108},[102,171928,171929],{"class":108}," *\n",[19,171931,171932],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,171934,171936],{"id":171935},"_912-常用内置模块","9.12 常用内置模块",[73,171938,171940],{"id":171939},"_9121-random","9.12.1 random",[93,171942,171944],{"className":30369,"code":171943,"language":30371,"meta":23,"style":23},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[99,171945,171946,171952,171956,171970,171989],{"__ignoreMap":23},[102,171947,171948,171950],{"class":104,"line":105},[102,171949,30383],{"class":108},[102,171951,45319],{"class":112},[102,171953,171954],{"class":104,"line":24},[102,171955,2389],{"emptyLinePlaceholder":30},[102,171957,171958,171960,171962,171964,171966,171968],{"class":104,"line":1168},[102,171959,30406],{"class":161},[102,171961,171783],{"class":112},[102,171963,330],{"class":161},[102,171965,12425],{"class":112},[102,171967,559],{"class":161},[102,171969,30488],{"class":112},[102,171971,171972,171974,171977,171979,171981,171983,171985,171987],{"class":104,"line":1183},[102,171973,30406],{"class":161},[102,171975,171976],{"class":112},"(random.choice([",[102,171978,149870],{"class":217},[102,171980,12425],{"class":112},[102,171982,150918],{"class":217},[102,171984,12425],{"class":112},[102,171986,159713],{"class":217},[102,171988,33134],{"class":112},[102,171990,171991,171993,171996,171998,172000,172002,172004,172006,172008,172010,172012,172014,172016,172018],{"class":104,"line":1189},[102,171992,30406],{"class":161},[102,171994,171995],{"class":112},"(random.sample([",[102,171997,330],{"class":161},[102,171999,12425],{"class":112},[102,172001,190],{"class":161},[102,172003,12425],{"class":112},[102,172005,184],{"class":161},[102,172007,12425],{"class":112},[102,172009,406],{"class":161},[102,172011,12425],{"class":112},[102,172013,432],{"class":161},[102,172015,112193],{"class":112},[102,172017,190],{"class":161},[102,172019,30488],{"class":112},[73,172021,172023],{"id":172022},"_9122-time","9.12.2 time",[93,172025,172027],{"className":30369,"code":172026,"language":30371,"meta":23,"style":23},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[99,172028,172029,172035,172039,172046,172054],{"__ignoreMap":23},[102,172030,172031,172033],{"class":104,"line":105},[102,172032,30383],{"class":108},[102,172034,31820],{"class":112},[102,172036,172037],{"class":104,"line":24},[102,172038,2389],{"emptyLinePlaceholder":30},[102,172040,172041,172043],{"class":104,"line":1168},[102,172042,30406],{"class":161},[102,172044,172045],{"class":112},"(time.time())\n",[102,172047,172048,172050,172052],{"class":104,"line":1183},[102,172049,95062],{"class":112},[102,172051,330],{"class":161},[102,172053,119],{"class":112},[102,172055,172056,172058,172060,172063],{"class":104,"line":1189},[102,172057,30406],{"class":161},[102,172059,113],{"class":112},[102,172061,172062],{"class":217},"\"1秒后执行\"",[102,172064,119],{"class":112},[73,172066,172068],{"id":172067},"_9123-datetime","9.12.3 datetime",[93,172070,172072],{"className":30369,"code":172071,"language":30371,"meta":23,"style":23},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[99,172073,172074,172086,172090,172100,172107],{"__ignoreMap":23},[102,172075,172076,172078,172081,172083],{"class":104,"line":105},[102,172077,30728],{"class":108},[102,172079,172080],{"class":112}," datetime ",[102,172082,30383],{"class":108},[102,172084,172085],{"class":112}," datetime\n",[102,172087,172088],{"class":104,"line":24},[102,172089,2389],{"emptyLinePlaceholder":30},[102,172091,172092,172095,172097],{"class":104,"line":1168},[102,172093,172094],{"class":112},"now ",[102,172096,158],{"class":108},[102,172098,172099],{"class":112}," datetime.now()\n",[102,172101,172102,172104],{"class":104,"line":1183},[102,172103,30406],{"class":161},[102,172105,172106],{"class":112},"(now)\n",[102,172108,172109,172111,172114,172117,172119,172122],{"class":104,"line":1189},[102,172110,30406],{"class":161},[102,172112,172113],{"class":112},"(now.strftime(",[102,172115,172116],{"class":217},"\"%Y-%m-",[102,172118,156673],{"class":161},[102,172120,172121],{"class":217}," %H:%M:%S\"",[102,172123,30488],{"class":112},[73,172125,172127],{"id":172126},"_9124-os","9.12.4 os",[93,172129,172131],{"className":30369,"code":172130,"language":30371,"meta":23,"style":23},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[99,172132,172133,172139,172143,172150],{"__ignoreMap":23},[102,172134,172135,172137],{"class":104,"line":105},[102,172136,30383],{"class":108},[102,172138,45296],{"class":112},[102,172140,172141],{"class":104,"line":24},[102,172142,2389],{"emptyLinePlaceholder":30},[102,172144,172145,172147],{"class":104,"line":1168},[102,172146,30406],{"class":161},[102,172148,172149],{"class":112},"(os.getcwd())\n",[102,172151,172152,172154,172157,172160],{"class":104,"line":1183},[102,172153,30406],{"class":161},[102,172155,172156],{"class":112},"(os.listdir(",[102,172158,172159],{"class":217},"\".\"",[102,172161,30488],{"class":112},[73,172163,172165],{"id":172164},"_9125-sys","9.12.5 sys",[93,172167,172169],{"className":30369,"code":172168,"language":30371,"meta":23,"style":23},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[99,172170,172171,172178,172182,172189],{"__ignoreMap":23},[102,172172,172173,172175],{"class":104,"line":105},[102,172174,30383],{"class":108},[102,172176,172177],{"class":112}," sys\n",[102,172179,172180],{"class":104,"line":24},[102,172181,2389],{"emptyLinePlaceholder":30},[102,172183,172184,172186],{"class":104,"line":1168},[102,172185,30406],{"class":161},[102,172187,172188],{"class":112},"(sys.version)\n",[102,172190,172191,172193],{"class":104,"line":1183},[102,172192,30406],{"class":161},[102,172194,172195],{"class":112},"(sys.path)\n",[14,172197,172199,172200,172202,172203,364],{"id":172198},"_913-if-name-main","9.13 if ",[262,172201,79801],{}," == \"",[262,172204,102049],{},[19,172206,172207,172208,172211],{},"模块被直接运行和被导入时，",[99,172209,172210],{},"__name__"," 的值不同。",[19,172213,172214,172215,24609],{},"创建 ",[99,172216,172217],{},"my_module.py",[93,172219,172221],{"className":30369,"code":172220,"language":30371,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[99,172222,172223,172231,172241,172245,172249,172261],{"__ignoreMap":23},[102,172224,172225,172227,172229],{"class":104,"line":105},[102,172226,31938],{"class":108},[102,172228,5199],{"class":1952},[102,172230,151075],{"class":112},[102,172232,172233,172235,172237,172239],{"class":104,"line":24},[102,172234,4079],{"class":108},[102,172236,10859],{"class":112},[102,172238,594],{"class":108},[102,172240,151086],{"class":112},[102,172242,172243],{"class":104,"line":1168},[102,172244,2389],{"emptyLinePlaceholder":30},[102,172246,172247],{"class":104,"line":1183},[102,172248,2389],{"emptyLinePlaceholder":30},[102,172250,172251,172253,172255,172257,172259],{"class":104,"line":1189},[102,172252,1520],{"class":108},[102,172254,31211],{"class":161},[102,172256,101550],{"class":108},[102,172258,101553],{"class":217},[102,172260,3728],{"class":112},[102,172262,172263,172265,172267,172269,172271,172273],{"class":104,"line":1203},[102,172264,31290],{"class":161},[102,172266,166582],{"class":112},[102,172268,330],{"class":161},[102,172270,12425],{"class":112},[102,172272,190],{"class":161},[102,172274,30488],{"class":112},[19,172276,172277],{},"作用：",[56,172279,172280,172283],{},[59,172281,172282],{},"直接运行该文件时，执行测试代码。",[59,172284,172285],{},"被其他文件导入时，不执行测试代码。",[19,172287,172288],{},"这是写模块时很常用的习惯。",[14,172290,172292],{"id":172291},"_914-包","9.14 包",[19,172294,172295,172296,172299],{},"包是包含 ",[99,172297,172298],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172301,172302],{},"目录结构：",[93,172304,172307],{"className":172305,"code":172306,"language":5177,"meta":23},[5175],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[99,172308,172306],{"__ignoreMap":23},[19,172310,172311],{},"导入：",[93,172313,172315],{"className":30369,"code":172314,"language":30371,"meta":23,"style":23},"from utils.file_utils import read_file\n",[99,172316,172317],{"__ignoreMap":23},[102,172318,172319,172321,172324,172326],{"class":104,"line":105},[102,172320,30728],{"class":108},[102,172322,172323],{"class":112}," utils.file_utils ",[102,172325,30383],{"class":108},[102,172327,172328],{"class":112}," read_file\n",[19,172330,172331,172333],{},[99,172332,172298],{}," 可以为空，也可以写包初始化逻辑。",[14,172335,172337],{"id":172336},"_915-第三方包","9.15 第三方包",[19,172339,172340,172341,172343],{},"第三方包通过 ",[99,172342,23821],{}," 安装。",[93,172345,172347],{"className":23812,"code":172346,"language":23814,"meta":23,"style":23},"pip install requests\n",[99,172348,172349],{"__ignoreMap":23},[102,172350,172351,172353,172355],{"class":104,"line":105},[102,172352,23821],{"class":1952},[102,172354,23824],{"class":217},[102,172356,146080],{"class":217},[19,172358,172359],{},"使用：",[93,172361,172363],{"className":30369,"code":172362,"language":30371,"meta":23,"style":23},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[99,172364,172365,172371,172375,172390],{"__ignoreMap":23},[102,172366,172367,172369],{"class":104,"line":105},[102,172368,30383],{"class":108},[102,172370,146080],{"class":112},[102,172372,172373],{"class":104,"line":24},[102,172374,2389],{"emptyLinePlaceholder":30},[102,172376,172377,172380,172382,172385,172388],{"class":104,"line":1168},[102,172378,172379],{"class":112},"response ",[102,172381,158],{"class":108},[102,172383,172384],{"class":112}," requests.get(",[102,172386,172387],{"class":217},"\"https:\u002F\u002Fwww.example.com\"",[102,172389,119],{"class":112},[102,172391,172392,172394],{"class":104,"line":1183},[102,172393,30406],{"class":161},[102,172395,172396],{"class":112},"(response.status_code)\n",[19,172398,172399],{},"查看已安装包：",[93,172401,172403],{"className":23812,"code":172402,"language":23814,"meta":23,"style":23},"pip list\n",[99,172404,172405],{"__ignoreMap":23},[102,172406,172407,172409],{"class":104,"line":105},[102,172408,23821],{"class":1952},[102,172410,118946],{"class":217},[19,172412,172413],{},"导出项目依赖：",[93,172415,172416],{"className":23812,"code":146275,"language":23814,"meta":23,"style":23},[99,172417,172418],{"__ignoreMap":23},[102,172419,172420,172422,172424,172426],{"class":104,"line":105},[102,172421,23821],{"class":1952},[102,172423,146284],{"class":217},[102,172425,26213],{"class":108},[102,172427,146289],{"class":217},[19,172429,172430],{},"安装项目依赖：",[93,172432,172433],{"className":23812,"code":146295,"language":23814,"meta":23,"style":23},[99,172434,172435],{"__ignoreMap":23},[102,172436,172437,172439,172441,172443],{"class":104,"line":105},[102,172438,23821],{"class":1952},[102,172440,23824],{"class":217},[102,172442,119630],{"class":161},[102,172444,146289],{"class":217},[14,172446,172448],{"id":172447},"_916-模块搜索路径","9.16 模块搜索路径",[19,172450,172451,172452,172455],{},"Python 导入模块时会在 ",[99,172453,172454],{},"sys.path"," 中查找。",[93,172457,172459],{"className":30369,"code":172458,"language":30371,"meta":23,"style":23},"import sys\n\nfor path in sys.path:\n    print(path)\n",[99,172460,172461,172467,172471,172483],{"__ignoreMap":23},[102,172462,172463,172465],{"class":104,"line":105},[102,172464,30383],{"class":108},[102,172466,172177],{"class":112},[102,172468,172469],{"class":104,"line":24},[102,172470,2389],{"emptyLinePlaceholder":30},[102,172472,172473,172475,172478,172480],{"class":104,"line":1168},[102,172474,3014],{"class":108},[102,172476,172477],{"class":112}," path ",[102,172479,26034],{"class":108},[102,172481,172482],{"class":112}," sys.path:\n",[102,172484,172485,172487],{"class":104,"line":1183},[102,172486,31290],{"class":161},[102,172488,169211],{"class":112},[19,172490,172491],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172493,157605],{},[93,172495,172498],{"className":172496,"code":172497,"language":5177,"meta":23},[5175],"random.py\njson.py\ntime.py\n",[99,172499,172497],{"__ignoreMap":23},[19,172501,172502],{},"这些文件名可能导致导入异常。",[14,172504,172506],{"id":172505},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172508,172302],{},[93,172510,172513],{"className":172511,"code":172512,"language":5177,"meta":23},[5175],"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",[99,172514,172512],{"__ignoreMap":23},[19,172516,172517,24609],{},[99,172518,172519],{},"utils\u002Ffile_utils.py",[93,172521,172523],{"className":30369,"code":172522,"language":30371,"meta":23,"style":23},"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",[99,172524,172525,172531,172541,172545,172549,172559,172569,172577,172583,172587,172614,172624,172628,172632,172642,172668],{"__ignoreMap":23},[102,172526,172527,172529],{"class":104,"line":105},[102,172528,30383],{"class":108},[102,172530,147073],{"class":112},[102,172532,172533,172535,172537,172539],{"class":104,"line":24},[102,172534,30728],{"class":108},[102,172536,108302],{"class":112},[102,172538,30383],{"class":108},[102,172540,108307],{"class":112},[102,172542,172543],{"class":104,"line":1168},[102,172544,2389],{"emptyLinePlaceholder":30},[102,172546,172547],{"class":104,"line":1183},[102,172548,2389],{"emptyLinePlaceholder":30},[102,172550,172551,172553,172556],{"class":104,"line":1189},[102,172552,31938],{"class":108},[102,172554,172555],{"class":1952}," read_json",[102,172557,172558],{"class":112},"(path):\n",[102,172560,172561,172564,172566],{"class":104,"line":1203},[102,172562,172563],{"class":112},"    path ",[102,172565,158],{"class":108},[102,172567,172568],{"class":112}," Path(path)\n",[102,172570,172571,172573,172575],{"class":104,"line":1209},[102,172572,3090],{"class":108},[102,172574,38921],{"class":108},[102,172576,169292],{"class":112},[102,172578,172579,172581],{"class":104,"line":1300},[102,172580,14742],{"class":108},[102,172582,51829],{"class":112},[102,172584,172585],{"class":104,"line":1306},[102,172586,2389],{"emptyLinePlaceholder":30},[102,172588,172589,172591,172593,172596,172598,172600,172602,172604,172606,172608,172610,172612],{"class":104,"line":1318},[102,172590,34169],{"class":108},[102,172592,146773],{"class":161},[102,172594,172595],{"class":112},"(path, ",[102,172597,146783],{"class":217},[102,172599,12425],{"class":112},[102,172601,146788],{"class":5206},[102,172603,158],{"class":108},[102,172605,146793],{"class":217},[102,172607,13704],{"class":112},[102,172609,31374],{"class":108},[102,172611,148135],{"class":5206},[102,172613,3728],{"class":112},[102,172615,172616,172618,172620,172622],{"class":104,"line":1601},[102,172617,14742],{"class":108},[102,172619,148146],{"class":112},[102,172621,45345],{"class":5206},[102,172623,119],{"class":112},[102,172625,172626],{"class":104,"line":1606},[102,172627,2389],{"emptyLinePlaceholder":30},[102,172629,172630],{"class":104,"line":1612},[102,172631,2389],{"emptyLinePlaceholder":30},[102,172633,172634,172636,172639],{"class":104,"line":1617},[102,172635,31938],{"class":108},[102,172637,172638],{"class":1952}," write_json",[102,172640,172641],{"class":112},"(path, data):\n",[102,172643,172644,172646,172648,172650,172652,172654,172656,172658,172660,172662,172664,172666],{"class":104,"line":1631},[102,172645,34169],{"class":108},[102,172647,146773],{"class":161},[102,172649,172595],{"class":112},[102,172651,151958],{"class":217},[102,172653,12425],{"class":112},[102,172655,146788],{"class":5206},[102,172657,158],{"class":108},[102,172659,146793],{"class":217},[102,172661,13704],{"class":112},[102,172663,31374],{"class":108},[102,172665,148135],{"class":5206},[102,172667,3728],{"class":112},[102,172669,172670,172673,172675,172677,172679,172681,172683,172685,172687,172689,172691],{"class":104,"line":1636},[102,172671,172672],{"class":112},"        json.dump(data, ",[102,172674,45345],{"class":5206},[102,172676,12425],{"class":112},[102,172678,147119],{"class":5206},[102,172680,158],{"class":108},[102,172682,33978],{"class":161},[102,172684,12425],{"class":112},[102,172686,151994],{"class":5206},[102,172688,158],{"class":108},[102,172690,190],{"class":161},[102,172692,119],{"class":112},[19,172694,172695,24609],{},[99,172696,154589],{},[93,172698,172700],{"className":30369,"code":172699,"language":30371,"meta":23,"style":23},"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",[99,172701,172702,172713,172717,172730,172750],{"__ignoreMap":23},[102,172703,172704,172706,172708,172710],{"class":104,"line":105},[102,172705,30728],{"class":108},[102,172707,172323],{"class":112},[102,172709,30383],{"class":108},[102,172711,172712],{"class":112}," read_json, write_json\n",[102,172714,172715],{"class":104,"line":24},[102,172716,2389],{"emptyLinePlaceholder":30},[102,172718,172719,172721,172723,172726,172728],{"class":104,"line":1168},[102,172720,159698],{"class":112},[102,172722,158],{"class":108},[102,172724,172725],{"class":112}," read_json(",[102,172727,151813],{"class":217},[102,172729,119],{"class":112},[102,172731,172732,172734,172736,172738,172740,172742,172744,172746,172748],{"class":104,"line":1183},[102,172733,170516],{"class":112},[102,172735,62670],{"class":217},[102,172737,51428],{"class":112},[102,172739,149870],{"class":217},[102,172741,12425],{"class":112},[102,172743,151454],{"class":217},[102,172745,51428],{"class":112},[102,172747,1102],{"class":161},[102,172749,165134],{"class":112},[102,172751,172752,172755,172757],{"class":104,"line":1189},[102,172753,172754],{"class":112},"write_json(",[102,172756,151813],{"class":217},[102,172758,172759],{"class":112},", students)\n",[14,172761,172763],{"id":172762},"_918-易错点","9.18 易错点",[56,172765,172766,172769,172774,172779,172782,172785],{},[59,172767,172768],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[59,172770,172771,172772,28376],{},"能指定异常类型就不要裸写 ",[99,172773,170876],{},[59,172775,172776,172778],{},[99,172777,171251],{}," 无论是否出错都会执行。",[59,172780,172781],{},"模块文件名不要和标准库重名。",[59,172783,172784],{},"导入自己写的模块时，要注意运行目录。",[59,172786,172787],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172789,172791],{"id":172790},"_919-本章练习","9.19 本章练习",[56,172793,172794,172797,172800,172806,172813],{},[59,172795,172796],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[59,172798,172799],{},"写函数读取文件，如果文件不存在则返回空字符串。",[59,172801,172214,172802,172805],{},[99,172803,172804],{},"math_utils.py","，实现加减乘除函数并导入使用。",[59,172807,172808,172809,172812],{},"创建一个 ",[99,172810,172811],{},"utils"," 包，把 JSON 读写函数放进去。",[59,172814,172815],{},"写一个程序，捕获除零异常和输入格式异常。",[5116,172817,172818],{},"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":23,"searchDepth":24,"depth":24,"links":172820},[172821,172822,172823,172824,172825,172826,172827,172828,172829,172830,172831,172837,172844,172846,172847,172848,172849,172850,172851],{"id":170673,"depth":24,"text":170674},{"id":170801,"depth":24,"text":170802},{"id":170850,"depth":24,"text":170851},{"id":170999,"depth":24,"text":171000},{"id":171171,"depth":24,"text":171172},{"id":171240,"depth":24,"text":171241},{"id":171351,"depth":24,"text":171352},{"id":171477,"depth":24,"text":171478},{"id":171602,"depth":24,"text":171603},{"id":171657,"depth":24,"text":171658},{"id":171756,"depth":24,"text":171757,"children":172832},[172833,172834,172835,172836],{"id":171760,"depth":1168,"text":171761},{"id":171794,"depth":1168,"text":171795},{"id":171833,"depth":1168,"text":171834},{"id":171912,"depth":1168,"text":171913},{"id":171935,"depth":24,"text":171936,"children":172838},[172839,172840,172841,172842,172843],{"id":171939,"depth":1168,"text":171940},{"id":172022,"depth":1168,"text":172023},{"id":172067,"depth":1168,"text":172068},{"id":172126,"depth":1168,"text":172127},{"id":172164,"depth":1168,"text":172165},{"id":172198,"depth":24,"text":172845},"9.13 if name == \"main\"",{"id":172291,"depth":24,"text":172292},{"id":172336,"depth":24,"text":172337},{"id":172447,"depth":24,"text":172448},{"id":172505,"depth":24,"text":172506},{"id":172762,"depth":24,"text":172763},{"id":172790,"depth":24,"text":172791},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170665,"description":27},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172858,"title":172859,"body":172860,"description":173023,"extension":28,"meta":173024,"navigation":30,"path":173025,"seo":173026,"stem":173027,"__hash__":173028},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172861,"toc":173018},[172862,172865,172868,172871,172882,172884,172958,172961,172964,172967,172970,172973,172976,172979,172982,172985,172988],[10,172863,172859],{"id":172864},"python教程",[19,172866,172867],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,172869,172870],{},"建议学习环境：",[56,172872,172873,172876,172879],{},[59,172874,172875],{},"Python 版本：Python 3.10 及以上。",[59,172877,172878],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[59,172880,172881],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,172883,117069],{"id":117069},[56,172885,172886,172892,172898,172904,172910,172916,172922,172928,172934,172940,172946,172952],{},[59,172887,172888],{},[351,172889,172891],{"href":172890},".\u002Fch1-Python","Python环境与第一个程序",[59,172893,172894],{},[351,172895,172897],{"href":172896},".\u002Fch2","基础语法、变量与字符串",[59,172899,172900],{},[351,172901,172903],{"href":172902},".\u002Fch3","判断语句",[59,172905,172906],{},[351,172907,172909],{"href":172908},".\u002Fch4","循环语句",[59,172911,172912],{},[351,172913,172915],{"href":172914},".\u002Fch5","函数基础",[59,172917,172918],{},[351,172919,172921],{"href":172920},".\u002Fch6","数据容器",[59,172923,172924],{},[351,172925,172927],{"href":172926},".\u002Fch7","函数进阶",[59,172929,172930],{},[351,172931,172933],{"href":172932},".\u002Fch8","文件操作",[59,172935,172936],{},[351,172937,172939],{"href":172938},".\u002Fch9","异常、模块与包",[59,172941,172942],{},[351,172943,172945],{"href":172944},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[59,172947,172948],{},[351,172949,172951],{"href":172950},".\u002Fch11","面向对象基础",[59,172953,172954],{},[351,172955,172957],{"href":172956},".\u002Fch12","综合案例与复习路线",[14,172959,172960],{"id":172960},"学习路线",[19,172962,172963],{},"第一阶段：能运行程序。",[19,172965,172966],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,172968,172969],{},"第二阶段：能组织数据。",[19,172971,172972],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,172974,172975],{},"第三阶段：能封装逻辑。",[19,172977,172978],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,172980,172981],{},"第四阶段：能做小项目。",[19,172983,172984],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,172986,172987],{"id":172987},"参考资料",[56,172989,172990,172997,173004,173011],{},[59,172991,172992,172993],{},"黑马程序员 Python 入门教程推荐：",[351,172994,172995],{"href":172995,"rel":172996},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23855],[59,172998,172999,173000],{},"Python 官方中文教程：",[351,173001,173002],{"href":173002,"rel":173003},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23855],[59,173005,173006,173007],{},"Python 标准库文档：",[351,173008,173009],{"href":173009,"rel":173010},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23855],[59,173012,173013,173014],{},"pyecharts 文档：",[351,173015,173016],{"href":173016,"rel":173017},"https:\u002F\u002Fpyecharts.org\u002F",[23855],{"title":23,"searchDepth":24,"depth":24,"links":173019},[173020,173021,173022],{"id":117069,"depth":24,"text":117069},{"id":172960,"depth":24,"text":172960},{"id":172987,"depth":24,"text":172987},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23368},"\u002Fwiki\u002F2024-10-10-python",{"title":172859,"description":173023},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331426749]